16e80583aSopenharmony_ci/**
26e80583aSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
36e80583aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
46e80583aSopenharmony_ci * you may not use this file except in compliance with the License.
56e80583aSopenharmony_ci * You may obtain a copy of the License at
66e80583aSopenharmony_ci *
76e80583aSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
86e80583aSopenharmony_ci *
96e80583aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
106e80583aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
116e80583aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
126e80583aSopenharmony_ci * See the License for the specific language governing permissions and
136e80583aSopenharmony_ci * limitations under the License.
146e80583aSopenharmony_ci */
156e80583aSopenharmony_ci
166e80583aSopenharmony_ciimport { Log } from '../utils/Log';
176e80583aSopenharmony_ciimport { AppBubble } from './AppBubble';
186e80583aSopenharmony_ciimport { AppItemInfo } from '../bean/AppItemInfo';
196e80583aSopenharmony_ciimport { AppGridStyleConfig } from '../layoutconfig/AppGridStyleConfig';
206e80583aSopenharmony_ciimport { MenuInfo } from '../bean';
216e80583aSopenharmony_ci
226e80583aSopenharmony_ciconst TAG = 'AppGrid';
236e80583aSopenharmony_ci
246e80583aSopenharmony_ci@Component
256e80583aSopenharmony_ciexport struct AppGrid {
266e80583aSopenharmony_ci  @Link appGridList: Array<AppItemInfo>;
276e80583aSopenharmony_ci  @Link appGridStyleConfig: AppGridStyleConfig;
286e80583aSopenharmony_ci  onItemClick: Function = (event: ClickEvent, item: AppItemInfo) => {};
296e80583aSopenharmony_ci  buildMenu: Function = (item: AppItemInfo): MenuInfo[] => [];
306e80583aSopenharmony_ci  @State isScroll: boolean = false;
316e80583aSopenharmony_ci
326e80583aSopenharmony_ci  aboutToDisappear(): void {
336e80583aSopenharmony_ci  }
346e80583aSopenharmony_ci
356e80583aSopenharmony_ci  private getColumnsTemplate() {
366e80583aSopenharmony_ci    let columnsTemplate = '';
376e80583aSopenharmony_ci    for (let i = 0; i < this.appGridStyleConfig.mColumns; i++) {
386e80583aSopenharmony_ci      columnsTemplate += ' 1fr';
396e80583aSopenharmony_ci    }
406e80583aSopenharmony_ci    return columnsTemplate;
416e80583aSopenharmony_ci  }
426e80583aSopenharmony_ci
436e80583aSopenharmony_ci  private getRowsTemplate() {
446e80583aSopenharmony_ci    let rowsTemplate = '';
456e80583aSopenharmony_ci    if (this.isScroll) {
466e80583aSopenharmony_ci      return rowsTemplate;
476e80583aSopenharmony_ci    }
486e80583aSopenharmony_ci    for (let i = 0; i < this.appGridStyleConfig.mRows; i++) {
496e80583aSopenharmony_ci      rowsTemplate += ' 1fr';
506e80583aSopenharmony_ci    }
516e80583aSopenharmony_ci    return rowsTemplate;
526e80583aSopenharmony_ci  }
536e80583aSopenharmony_ci
546e80583aSopenharmony_ci  build() {
556e80583aSopenharmony_ci    Grid() {
566e80583aSopenharmony_ci      ForEach(this.appGridList, (item: AppItemInfo) => {
576e80583aSopenharmony_ci        GridItem() {
586e80583aSopenharmony_ci          Column() {
596e80583aSopenharmony_ci            AppBubble({
606e80583aSopenharmony_ci              iconSize: this.appGridStyleConfig.mIconSize,
616e80583aSopenharmony_ci              nameSize: this.appGridStyleConfig.mNameSize,
626e80583aSopenharmony_ci              nameFontColor: this.appGridStyleConfig.mNameFontColor,
636e80583aSopenharmony_ci              nameHeight: this.appGridStyleConfig.mNameHeight,
646e80583aSopenharmony_ci              appName: item.appName,
656e80583aSopenharmony_ci              bundleName: item.bundleName,
666e80583aSopenharmony_ci              moduleName: item.moduleName,
676e80583aSopenharmony_ci              abilityName: item.abilityName,
686e80583aSopenharmony_ci              appIconId: item.appIconId,
696e80583aSopenharmony_ci              appLabelId: item.appLabelId,
706e80583aSopenharmony_ci              badgeNumber: item.badgeNumber,
716e80583aSopenharmony_ci              menuInfo: this.buildMenu(item),
726e80583aSopenharmony_ci              nameLines: this.appGridStyleConfig.mNameLines,
736e80583aSopenharmony_ci              mPaddingTop: this.appGridStyleConfig.mIconMarginVertical,
746e80583aSopenharmony_ci              dragStart: () => {}
756e80583aSopenharmony_ci            })
766e80583aSopenharmony_ci          }
776e80583aSopenharmony_ci          .onClick((event: ClickEvent) => {
786e80583aSopenharmony_ci            this.onItemClick(event, item);
796e80583aSopenharmony_ci          })
806e80583aSopenharmony_ci          .onMouse((event: MouseEvent) => {
816e80583aSopenharmony_ci            Log.showInfo(TAG, `onMouse MouseType: ${event.button}`);
826e80583aSopenharmony_ci            if (event.button == MouseButton.Right) {
836e80583aSopenharmony_ci              event.stopPropagation();
846e80583aSopenharmony_ci            }
856e80583aSopenharmony_ci          })
866e80583aSopenharmony_ci        }
876e80583aSopenharmony_ci        .width(this.appGridStyleConfig.mAppItemSize)
886e80583aSopenharmony_ci        .height(this.appGridStyleConfig.mAppItemSize)
896e80583aSopenharmony_ci        .transition({ scale: { x: 0.5, y: 0.5 } })
906e80583aSopenharmony_ci      }, (item: AppItemInfo) => JSON.stringify(item))
916e80583aSopenharmony_ci    }
926e80583aSopenharmony_ci    .columnsTemplate(this.getColumnsTemplate())
936e80583aSopenharmony_ci    .rowsTemplate(this.getRowsTemplate())
946e80583aSopenharmony_ci    .columnsGap(this.appGridStyleConfig.mColumnsGap)
956e80583aSopenharmony_ci    .rowsGap(this.appGridStyleConfig.mRowsGap)
966e80583aSopenharmony_ci  }
976e80583aSopenharmony_ci}