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