1/* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { BaseElement, element } from '../../../base-ui/BaseElement'; 17import LitSwitch, { LitSwitchChangeEvent } from '../../../base-ui/switch/lit-switch'; 18import '../../../base-ui/select/LitAllocationSelect'; 19 20import '../../../base-ui/switch/lit-switch'; 21import { LitAllocationSelect } from '../../../base-ui/select/LitAllocationSelect'; 22import { SpRecordTrace } from '../SpRecordTrace'; 23import { Cmd } from '../../../command/Cmd'; 24import { SpVmTrackerHtml } from './SpVmTracker.html'; 25 26@element('sp-vm-tracker') 27export class SpVmTracker extends BaseElement { 28 private vmTrackerProcessInput: LitAllocationSelect | undefined | null; 29 30 set startSamp(start: boolean) { 31 if (start) { 32 this.setAttribute('startSamp', ''); 33 } else { 34 this.removeAttribute('startSamp'); 35 let input = this.vmTrackerProcessInput?.shadowRoot?.querySelector<HTMLInputElement>('#singleInput'); 36 input!.value = ''; 37 } 38 } 39 40 get process(): string { 41 if (this.vmTrackerProcessInput!.value.length > 0) { 42 let result = this.vmTrackerProcessInput!.value.match(/\((.+?)\)/g); 43 if (result) { 44 return result.toString().replace('(', '').replace(')', ''); 45 } else { 46 return this.vmTrackerProcessInput!.value; 47 } 48 } 49 return ''; 50 } 51 52 get startSamp(): boolean { 53 return this.hasAttribute('startSamp'); 54 } 55 56 initElements(): void { 57 let vmTrackerSwitch = this.shadowRoot?.querySelector('lit-switch') as LitSwitch; 58 vmTrackerSwitch.addEventListener('change', (event: CustomEventInit<LitSwitchChangeEvent>) => { 59 let detail = event.detail; 60 if (detail!.checked) { 61 this.startSamp = true; 62 this.unDisable(); 63 } else { 64 this.startSamp = false; 65 this.disable(); 66 } 67 }); 68 this.vmTrackerProcessInput = this.shadowRoot?.querySelector<LitAllocationSelect>('lit-allocation-select'); 69 let vmTrackerMul = this.vmTrackerProcessInput?.shadowRoot?.querySelector('.multipleSelect') as HTMLDivElement; 70 vmTrackerMul!.addEventListener('mousedown', () => { 71 if (SpRecordTrace.serialNumber === '') { 72 this.vmTrackerProcessInput!.processData = []; 73 this.vmTrackerProcessInput!.initData(); 74 } 75 }); 76 vmTrackerMul!.addEventListener('mouseup', () => { 77 if (SpRecordTrace.serialNumber === '') { 78 this.vmTrackerProcessInput!.processData = []; 79 this.vmTrackerProcessInput!.initData(); 80 } else { 81 Cmd.getProcess().then((processList) => { 82 this.vmTrackerProcessInput!.processData = processList; 83 this.vmTrackerProcessInput!.initData(); 84 }); 85 } 86 }); 87 this.disable(); 88 } 89 90 private unDisable(): void { 91 let configVal = this.shadowRoot?.querySelectorAll<HTMLElement>('.config'); 92 configVal!.forEach((configVal1) => { 93 configVal1.removeAttribute('disabled'); 94 }); 95 } 96 97 private disable(): void { 98 let configVal = this.shadowRoot?.querySelectorAll<HTMLElement>('.config'); 99 configVal!.forEach((configVal1) => { 100 if (configVal1.title !== 'Start VM Tracker Record') { 101 configVal1.setAttribute('disabled', ''); 102 } 103 }); 104 } 105 106 initHtml(): string { 107 return SpVmTrackerHtml; 108 } 109} 110