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'; 25import { LitSelectV } from '../../../base-ui/select/LitSelectV'; 26 27@element('sp-vm-tracker') 28export class SpVmTracker extends BaseElement { 29 private vmTrackerProcessInput: LitSelectV | undefined | null; 30 31 set startSamp(start: boolean) { 32 if (start) { 33 this.setAttribute('startSamp', ''); 34 } else { 35 this.removeAttribute('startSamp'); 36 let input = this.vmTrackerProcessInput?.shadowRoot?.querySelector<HTMLInputElement>('#singleInput'); 37 input!.value = ''; 38 } 39 } 40 41 get process(): string { 42 if (this.vmTrackerProcessInput!.value.length > 0) { 43 let result = this.vmTrackerProcessInput!.value.match(/\((.+?)\)/g); 44 if (result) { 45 return result.toString().replace('(', '').replace(')', ''); 46 } else { 47 return this.vmTrackerProcessInput!.value; 48 } 49 } 50 return ''; 51 } 52 53 get startSamp(): boolean { 54 return this.hasAttribute('startSamp'); 55 } 56 57 initElements(): void { 58 let vmTrackerSwitch = this.shadowRoot?.querySelector('lit-switch') as LitSwitch; 59 vmTrackerSwitch.addEventListener('change', (event: CustomEventInit<LitSwitchChangeEvent>) => { 60 let detail = event.detail; 61 if (detail!.checked) { 62 this.startSamp = true; 63 this.unDisable(); 64 } else { 65 this.startSamp = false; 66 this.disable(); 67 } 68 }); 69 this.vmTrackerProcessInput = this.shadowRoot?.querySelector<LitSelectV>('lit-select-v'); 70 let vmTrackerMul = this.vmTrackerProcessInput?.shadowRoot?.querySelector('input') as HTMLDivElement; 71 vmTrackerMul!.addEventListener('mousedown', () => { 72 if (this.startSamp && (SpRecordTrace.serialNumber === '')) { 73 this.vmTrackerProcessInput!.dataSource([], ''); 74 } 75 }); 76 vmTrackerMul!.addEventListener('mouseup', () => { 77 if (this.startSamp) { 78 if (SpRecordTrace.serialNumber === '') { 79 this.vmTrackerProcessInput!.dataSource([], ''); 80 } else { 81 Cmd.getProcess().then((processList) => { 82 if (processList.length > 0) { 83 this.vmTrackerProcessInput!.dataSource(processList, '', true); 84 } else { 85 this.vmTrackerProcessInput!.dataSource([], ''); 86 } 87 }); 88 } 89 vmTrackerMul!.removeAttribute('readonly'); 90 } else { 91 vmTrackerMul!.setAttribute('readonly', 'readonly'); 92 return; 93 } 94 }); 95 this.disable(); 96 } 97 98 private unDisable(): void { 99 let configVal = this.shadowRoot?.querySelectorAll<HTMLElement>('.config'); 100 configVal!.forEach((configVal1) => { 101 configVal1.removeAttribute('disabled'); 102 }); 103 } 104 105 private disable(): void { 106 let configVal = this.shadowRoot?.querySelectorAll<HTMLElement>('.config'); 107 configVal!.forEach((configVal1) => { 108 if (configVal1.title !== 'Start VM Tracker Record') { 109 configVal1.setAttribute('disabled', ''); 110 } 111 }); 112 } 113 114 initHtml(): string { 115 return SpVmTrackerHtml; 116 } 117} 118