1fb726d48Sopenharmony_ci/*
2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License.
5fb726d48Sopenharmony_ci * You may obtain a copy of the License at
6fb726d48Sopenharmony_ci *
7fb726d48Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fb726d48Sopenharmony_ci *
9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and
13fb726d48Sopenharmony_ci * limitations under the License.
14fb726d48Sopenharmony_ci */
15fb726d48Sopenharmony_ci
16fb726d48Sopenharmony_ciimport { BaseElement, element } from '../../../base-ui/BaseElement';
17fb726d48Sopenharmony_ciimport { LitCheckBox, LitCheckBoxChangeEvent } from '../../../base-ui/checkbox/LitCheckBox';
18fb726d48Sopenharmony_ci
19fb726d48Sopenharmony_ci@element('check-des-box')
20fb726d48Sopenharmony_ciexport class SpCheckDesBox extends BaseElement {
21fb726d48Sopenharmony_ci  private _checkBox: LitCheckBox | undefined;
22fb726d48Sopenharmony_ci  private _des: HTMLSpanElement | undefined;
23fb726d48Sopenharmony_ci
24fb726d48Sopenharmony_ci  static get observedAttributes(): string[] {
25fb726d48Sopenharmony_ci    return ['checked', 'value', 'des', 'disabled'];
26fb726d48Sopenharmony_ci  }
27fb726d48Sopenharmony_ci
28fb726d48Sopenharmony_ci  get disabled(): boolean {
29fb726d48Sopenharmony_ci    return this.getAttribute('disabled') !== null;
30fb726d48Sopenharmony_ci  }
31fb726d48Sopenharmony_ci
32fb726d48Sopenharmony_ci  set disabled(value) {
33fb726d48Sopenharmony_ci    if (value === null || !value) {
34fb726d48Sopenharmony_ci      this.removeAttribute('disabled');
35fb726d48Sopenharmony_ci    } else {
36fb726d48Sopenharmony_ci      this.setAttribute('disabled', '');
37fb726d48Sopenharmony_ci    }
38fb726d48Sopenharmony_ci  }
39fb726d48Sopenharmony_ci
40fb726d48Sopenharmony_ci  set des(des: string) {
41fb726d48Sopenharmony_ci    this.setAttribute('des', des);
42fb726d48Sopenharmony_ci  }
43fb726d48Sopenharmony_ci
44fb726d48Sopenharmony_ci  get value(): string {
45fb726d48Sopenharmony_ci    return this.getAttribute('value') || '';
46fb726d48Sopenharmony_ci  }
47fb726d48Sopenharmony_ci
48fb726d48Sopenharmony_ci  set value(value: string) {
49fb726d48Sopenharmony_ci    this.setAttribute('value', value);
50fb726d48Sopenharmony_ci    this._checkBox!.value = value;
51fb726d48Sopenharmony_ci  }
52fb726d48Sopenharmony_ci
53fb726d48Sopenharmony_ci  get checked(): boolean {
54fb726d48Sopenharmony_ci    return this.getAttribute('checked') !== null;
55fb726d48Sopenharmony_ci  }
56fb726d48Sopenharmony_ci
57fb726d48Sopenharmony_ci  set checked(checked: boolean) {
58fb726d48Sopenharmony_ci    if (checked) {
59fb726d48Sopenharmony_ci      this.setAttribute('checked', 'true');
60fb726d48Sopenharmony_ci      this._checkBox!.checked = true;
61fb726d48Sopenharmony_ci    } else {
62fb726d48Sopenharmony_ci      this.removeAttribute('checked');
63fb726d48Sopenharmony_ci      this._checkBox!.checked = false;
64fb726d48Sopenharmony_ci    }
65fb726d48Sopenharmony_ci  }
66fb726d48Sopenharmony_ci
67fb726d48Sopenharmony_ci  initElements(): void {
68fb726d48Sopenharmony_ci    this._checkBox = this.shadowRoot?.getElementById('checkBox') as LitCheckBox;
69fb726d48Sopenharmony_ci    this._des = this.shadowRoot?.getElementById('des') as HTMLSpanElement;
70fb726d48Sopenharmony_ci  }
71fb726d48Sopenharmony_ci
72fb726d48Sopenharmony_ci  initHtml(): string {
73fb726d48Sopenharmony_ci    return `
74fb726d48Sopenharmony_ci<style>
75fb726d48Sopenharmony_ci.check-des{
76fb726d48Sopenharmony_ci    opacity: 0.6;
77fb726d48Sopenharmony_ci    font-family: Helvetica;
78fb726d48Sopenharmony_ci    font-size: 1em;
79fb726d48Sopenharmony_ci    color: var(--dark-color,#000000);
80fb726d48Sopenharmony_ci    text-align: left;
81fb726d48Sopenharmony_ci    line-height: 20px;
82fb726d48Sopenharmony_ci    font-weight: 400;
83fb726d48Sopenharmony_ci}
84fb726d48Sopenharmony_cilit-check-box {
85fb726d48Sopenharmony_ci    margin-bottom: 10px;
86fb726d48Sopenharmony_ci}
87fb726d48Sopenharmony_ci#des-con{
88fb726d48Sopenharmony_ci  margin-left: 30px;
89fb726d48Sopenharmony_ci}
90fb726d48Sopenharmony_ci:host([disabled]){
91fb726d48Sopenharmony_ci  pointer-events: none;
92fb726d48Sopenharmony_ci}
93fb726d48Sopenharmony_ci</style>
94fb726d48Sopenharmony_ci<lit-check-box id="checkBox"></lit-check-box>
95fb726d48Sopenharmony_ci<div id="des-con">
96fb726d48Sopenharmony_ci    <span id="des" class="check-des"></span>
97fb726d48Sopenharmony_ci</div>`;
98fb726d48Sopenharmony_ci  }
99fb726d48Sopenharmony_ci
100fb726d48Sopenharmony_ci  public connectedCallback(): void {
101fb726d48Sopenharmony_ci    this._checkBox?.addEventListener('change', (ev: CustomEventInit<LitCheckBoxChangeEvent>): void => {
102fb726d48Sopenharmony_ci      let detail = ev.detail;
103fb726d48Sopenharmony_ci      this.checked = detail!.checked;
104fb726d48Sopenharmony_ci      this.dispatchEvent(new CustomEvent('onchange', { detail }));
105fb726d48Sopenharmony_ci    });
106fb726d48Sopenharmony_ci  }
107fb726d48Sopenharmony_ci
108fb726d48Sopenharmony_ci  attributeChangedCallback(name: string, oldValue: string, newValue: string): void {
109fb726d48Sopenharmony_ci    if (name === 'checked') {
110fb726d48Sopenharmony_ci      this._checkBox!.checked = newValue !== null;
111fb726d48Sopenharmony_ci    }
112fb726d48Sopenharmony_ci    if (name === 'value') {
113fb726d48Sopenharmony_ci      this._checkBox!.value = newValue;
114fb726d48Sopenharmony_ci    }
115fb726d48Sopenharmony_ci    if (name === 'des') {
116fb726d48Sopenharmony_ci      this._des!.textContent = newValue;
117fb726d48Sopenharmony_ci    }
118fb726d48Sopenharmony_ci  }
119fb726d48Sopenharmony_ci}
120fb726d48Sopenharmony_ci
121fb726d48Sopenharmony_ciexport interface checkDesBean {
122fb726d48Sopenharmony_ci  value: string;
123fb726d48Sopenharmony_ci  isSelect: boolean;
124fb726d48Sopenharmony_ci  des: string;
125fb726d48Sopenharmony_ci}
126