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 { StringUtil } from '../../../../../../../common/src/main/ets/util/StringUtil';
17
18/**
19 * Select the contact item component, which is responsible for displaying a single contact.
20 */
21@Component
22export default struct BatchSelectRecentItemView {
23  private onRecentItemClicked: Function;
24  @State private item: { [key: string]: any } = {};
25  private index: number;
26
27  build() {
28    Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Start }) {
29      Row() {
30        if (StringUtil.isEmpty(this.item.suffix)) {
31          Image($r('app.media.ic_user_portrait'))
32            .width($r('app.float.id_card_image_mid'))
33            .height($r('app.float.id_card_image_mid'))
34            .backgroundColor(this.item.portraitColor)
35            .borderRadius($r('app.float.id_card_image_mid'))
36            .objectFit(ImageFit.Contain)
37        } else {
38          Text(this.item.suffix.toUpperCase())
39            .fontSize(20)
40            .fontWeight(FontWeight.Bold)
41            .fontColor(Color.White)
42            .backgroundColor(this.item.portraitColor)
43            .height($r('app.float.id_card_image_mid'))
44            .width($r('app.float.id_card_image_mid'))
45            .textAlign(TextAlign.Center)
46            .borderRadius($r('app.float.id_card_image_mid'))
47        }
48      }
49      .width($r('app.float.id_card_image_mid'))
50      .height($r('app.float.id_card_image_mid'))
51      .margin({ left: $r('app.float.id_card_margin_max') })
52
53      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) {
54        Text(StringUtil.isEmpty(this.item.displayName) ? this.item.phoneNumber : this.item.displayName)
55          .fontColor($r('sys.color.ohos_id_color_text_primary'))
56          .fontSize($r('sys.float.ohos_id_text_size_body1'))
57          .fontWeight(FontWeight.Medium)
58          .margin({ left: $r('app.float.id_card_margin_xl'), bottom: $r('app.float.id_card_margin_sm') })
59
60        Row() {
61          Text(this.item.formattedNumber)
62            .fontColor($r('sys.color.ohos_id_color_text_tertiary'))
63            .fontSize($r('sys.float.ohos_id_text_size_body2'))
64            .fontWeight(FontWeight.Regular)
65            .visibility(StringUtil.isEmpty(this.item.formattedNumber) ? Visibility.None : Visibility.Visible)
66            .margin({ left: $r('app.float.id_card_margin_xl') })
67
68          Text(this.item.numberLocation)
69            .fontColor($r('sys.color.ohos_id_color_text_tertiary'))
70            .fontSize($r('sys.float.ohos_id_text_size_body2'))
71            .fontWeight(FontWeight.Regular)
72            .visibility(StringUtil.isEmpty(this.item.numberLocation) ? Visibility.None : Visibility.Visible)
73            .margin({ left: $r('app.float.id_card_margin_xl') })
74
75          if (StringUtil.isEmpty(this.item.displayName) && StringUtil.isEmpty(this.item.numberLocation)) {
76            Text($r('app.string.unknow_location'))
77              .fontColor($r('sys.color.ohos_id_color_text_tertiary'))
78              .fontSize($r('sys.float.ohos_id_text_size_body2'))
79              .fontWeight(FontWeight.Regular)
80              .margin({ left: $r('app.float.id_card_margin_xl') })
81          }
82        }
83      }
84      .flexGrow(1)
85      .height($r('app.float.id_item_height_max'))
86
87      Toggle({ type: ToggleType.Checkbox, isOn: this.item.checked })
88        .width($r('app.float.id_card_image_small'))
89        .height($r('app.float.id_card_image_small'))
90        .enabled(false)
91        .margin({ left: $r('app.float.id_card_margin_max'), right: $r('app.float.id_card_margin_max') })
92        .selectedColor($r('sys.color.ohos_id_color_connected'))
93
94    }
95    .height($r('app.float.id_item_height_max'))
96    .width('100%')
97    .onClick(() => {
98      this.onRecentItemClicked(this.index);
99    })
100  }
101}