{"version":3,"file":"uofx-app-components-user-select.mjs","sources":["../../../projects/uofx-app-pack/user-select/src/user-select.interface.ts","../../../projects/uofx-app-pack/user-select/src/component/chip/chip.component.ts","../../../projects/uofx-app-pack/user-select/src/component/chip/chip.component.html","../../../projects/uofx-app-pack/user-select/src/user-select.service.ts","../../../projects/uofx-app-pack/user-select/src/logic/select-filter.logic.ts","../../../projects/uofx-app-pack/user-select/src/pipe/commuse-item-filter/commuse-item-filter.pipe.ts","../../../projects/uofx-app-pack/user-select/src/dialog/filter/user-select-filter.dialog.ts","../../../projects/uofx-app-pack/user-select/src/dialog/filter/user-select-filter.dialog.html","../../../projects/uofx-app-pack/user-select/src/pipe/user-text-only/user-text-only.pipe.ts","../../../projects/uofx-app-pack/user-select/src/dialog/view-more-users/view-more-users.dialog.ts","../../../projects/uofx-app-pack/user-select/src/dialog/view-more-users/view-more-users.dialog.html","../../../projects/uofx-app-pack/user-select/src/user-select-view/user-select-view.component.ts","../../../projects/uofx-app-pack/user-select/src/user-select-view/user-select-view.component.html","../../../projects/uofx-app-pack/user-select/src/user-select.component.ts","../../../projects/uofx-app-pack/user-select/src/user-select.component.html","../../../projects/uofx-app-pack/user-select/src/plugin-helper/user-set.plugin.service.ts","../../../projects/uofx-app-pack/user-select/src/plugin-helper/user-set.plugin.helper.ts","../../../projects/uofx-app-pack/user-select/src/user-select.module.ts","../../../projects/uofx-app-pack/user-select/uofx-app-components-user-select.ts"],"sourcesContent":["import {\r\n  UofxDeptInfoModel,\r\n  UofxJobFuncInfoModel,\r\n  UofxJobTitleInfoModel,\r\n  UofxUserInfoModel,\r\n} from '@uofx/app-components/avatar';\r\n\r\nimport { UofxPaginationRespModel } from '@uofx/app-components';\r\n\r\n/** 選人元件的類型 */\r\nexport enum UofxUserSetItemType {\r\n  /** 人員 */\r\n  Empl = 0,\r\n  /** 部門 */\r\n  Dept = 1,\r\n  /** 簽核層級 */\r\n  JobTitle = 2,\r\n  /** 職務 */\r\n  JobFunc = 3,\r\n  /** 部門+職級 */\r\n  DeptJobTitle = 4,\r\n  /** 部門+職務 */\r\n  DeptJobFunc = 5,\r\n  /** 部門主管 */\r\n  DeptSupervisor = 6,\r\n  /** 部門+人員 */\r\n  DeptEmployee = 7,\r\n  /** 我的常用 */\r\n  Commuse = 98,\r\n  /** 限定選人 */\r\n  Limit = 99,\r\n}\r\n\r\n/** 快篩的 Request Model */\r\nexport interface UofxSearchRequest {\r\n  /** 關鍵字 */\r\n  keyword: string;\r\n  /** 一頁幾筆 */\r\n  size: number;\r\n  /** 第幾頁 */\r\n  page: number;\r\n  /** 是否包含已停用 */\r\n  includeDisable: boolean;\r\n  /** 篩選類型 */\r\n  itemType: UofxUserSetItemType;\r\n}\r\n\r\n/** 選人元件查詢結果Modal */\r\nexport interface UofxUserSelectResModel {\r\n  /** 選人元件篩選結果 */\r\n  items?: Array<UofxUserSelectResExtendModel>;\r\n  /** 分頁資訊 */\r\n  pageInfo?: UofxPaginationRespModel;\r\n}\r\n\r\n/** 選人元件查詢結果Modal-職務的結果會多一層類別，會回傳jobFuncCategory */\r\nexport interface UofxUserSelectResExtendModel extends UofxUserSetModel {\r\n  /** 職務資訊(包含類別) */\r\n  jobFuncCategory?: UofxJobFuncTreeModel;\r\n}\r\n\r\n/** UserSet Model */\r\nexport interface UofxUserSetModel {\r\n  /** 選擇的類型 */\r\n  itemType: UofxUserSetItemType;\r\n  /** 部門資訊 */\r\n  deptItem?: UofxUserSetDeptLiteModel;\r\n  /** 人員資訊 */\r\n  emplItem?: UofxUserSetEmplLiteModel;\r\n  /** 簽核層級資訊 */\r\n  jobTitleItem?: UofxUserSetJobTitleLiteModel;\r\n  /** 職務資訊 */\r\n  jobFuncItem?: UofxUserSetJobFuncLiteModel;\r\n}\r\n\r\n/** 加入我的常用 Request Model */\r\nexport interface UofxUserSetCommuseModel {\r\n  /** 選人元件選取的常用清單 */\r\n  items: Array<UofxUserSetModel>;\r\n  /** 名稱 */\r\n  name: string;\r\n  /** ID */\r\n  id: string;\r\n  /** 是否已選取 */\r\n  isExist: boolean;\r\n}\r\n\r\n/** UserSet，部門資訊 */\r\nexport type UofxUserSetDeptLiteModel = UofxDeptInfoModel;\r\n\r\n/** UserSet，人員資訊 */\r\nexport type UofxUserSetEmplLiteModel = UofxUserInfoModel;\r\n\r\n/** UserSet，職務資訊 */\r\nexport type UofxUserSetJobFuncLiteModel = UofxJobFuncInfoModel;\r\n\r\n/** UserSet，職級資訊 */\r\nexport type UofxUserSetJobTitleLiteModel = UofxJobTitleInfoModel;\r\n\r\n/** 職務列表(包含職務類別)model */\r\nexport interface UofxJobFuncTreeModel {\r\n  /** 類別id */\r\n  id: string;\r\n  /** 類別名稱 */\r\n  category: string;\r\n  /** 職務列表 */\r\n  jobFunctions: Array<UofxJobFuncModel>;\r\n}\r\n\r\n/** 職務資訊  */\r\nexport interface UofxJobFuncModel {\r\n  /** 職務id */\r\n  id: string;\r\n  /** 公司別 */\r\n  corpId: string;\r\n  /** 職務類別代碼 */\r\n  categoryId: string;\r\n  /** 職務代號 */\r\n  code: string;\r\n  /** 職務名稱 */\r\n  name: string;\r\n  /** 是否啟用 */\r\n  enabled: boolean;\r\n  /** 順序 */\r\n  seq: number;\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UofxUserSetItemType, UofxUserSetModel } from '../../user-select.interface';\r\n\r\n@Component({\r\n  selector: 'uofx-user-select-chip',\r\n  templateUrl: './chip.component.html',\r\n  styleUrls: ['./chip.component.scss'],\r\n})\r\nexport class UofxUserSelectChipComponent {\r\n  /** 是否顯示刪除按鈕 */\r\n  @Input() isShowDelete = false;\r\n  /** Chip 顯示資料 */\r\n  @Input() chipData: UofxUserSetModel;\r\n  /** 是否顯示 account 或 code */\r\n  @Input() showDetails = false;\r\n  /** 是否顯示 avatar */\r\n  @Input() showAvatar: boolean = true;\r\n  /** 刪除事件 */\r\n  @Output() chipDelete = new EventEmitter<UofxUserSetModel>();\r\n\r\n  /** 選人類別enum */\r\n  UofxUserSetItemType = UofxUserSetItemType;\r\n\r\n  onDeleteClick(item: UofxUserSetModel) {\r\n    this.chipDelete.emit(item);\r\n  }\r\n}\r\n","<ng-container *ngIf=\"chipData\">\r\n  <div class=\"select-container\" *ngIf=\"!isShowDelete\">\r\n    <div class=\"select-info\">\r\n      <ng-container *ngTemplateOutlet=\"selectInfoTemplate\"> </ng-container>\r\n    </div>\r\n  </div>\r\n\r\n  <ion-chip *ngIf=\"isShowDelete\">\r\n    <ng-container *ngTemplateOutlet=\"selectInfoTemplate\"> </ng-container>\r\n    <uofx-icon\r\n      name=\"close-circle\"\r\n      [size]=\"22\"\r\n      (click)=\"onDeleteClick(chipData)\"\r\n      color=\"bk-600\"\r\n      class=\"text-22-fixed close-icon\"></uofx-icon>\r\n  </ion-chip>\r\n</ng-container>\r\n\r\n<ng-template #selectInfoTemplate>\r\n  <!-- 人員、部門人員、限定選人 -->\r\n  <ng-container\r\n    *ngIf=\"chipData.itemType === UofxUserSetItemType.Empl || chipData.itemType === UofxUserSetItemType.DeptEmployee\">\r\n    <uofx-avatar\r\n      *ngIf=\"showAvatar\"\r\n      [uofSrc]=\"chipData.emplItem.imageInfoUrl\"\r\n      [uofName]=\"chipData.emplItem.name\"\r\n      [uofSize]=\"20\"\r\n      class=\"margin-right-s\"></uofx-avatar>\r\n    <ion-label class=\"text-d-b1-m\">\r\n      {{ chipData.emplItem.department }}&ensp;{{ chipData.emplItem.name }}\r\n      @if (showDetails) {\r\n        &ensp;{{ chipData.emplItem.account }}\r\n      }\r\n    </ion-label>\r\n  </ng-container>\r\n\r\n  <!-- 部門 -->\r\n  <ng-container\r\n    *ngIf=\"chipData.itemType === UofxUserSetItemType.Dept || chipData.itemType === UofxUserSetItemType.DeptSupervisor\">\r\n    <div class=\"dept-avatar margin-right\">\r\n      <uofx-icon *ngIf=\"showAvatar\" name=\"u-department\" [size]=\"20\" color=\"x-bl11\"></uofx-icon>\r\n      <uofx-icon\r\n        *ngIf=\"showAvatar && chipData.deptItem.containsChildren\"\r\n        name=\"mi-add-circle\"\r\n        size=\"12\"\r\n        color=\"bl-500\"\r\n        class=\"children-badge\"></uofx-icon>\r\n    </div>\r\n    <ion-label class=\"text-d-b1-m\">\r\n      {{ chipData.deptItem.name }}\r\n      @if (chipData.deptItem.containsChildren) {\r\n        <ng-container *ngTemplateOutlet=\"tHasChildren\"> </ng-container>\r\n      }\r\n      @if (showDetails) {\r\n        &ensp;{{ chipData.deptItem.code }}\r\n      }\r\n    </ion-label>\r\n  </ng-container>\r\n\r\n  <!--職稱-->\r\n  <ng-container *ngIf=\"chipData.itemType === UofxUserSetItemType.JobTitle\">\r\n    <uofx-icon *ngIf=\"showAvatar\" name=\"u-jobtitle\" [size]=\"20\" color=\"x-p1\" class=\"margin-right-s\"></uofx-icon>\r\n    <ion-label class=\"text-d-b1-m\">{{ chipData.jobTitleItem.name }}</ion-label>\r\n  </ng-container>\r\n\r\n  <!-- 職務 -->\r\n  <ng-container *ngIf=\"chipData.itemType === UofxUserSetItemType.JobFunc\">\r\n    <uofx-icon *ngIf=\"showAvatar\" name=\"u-position\" [size]=\"20\" color=\"x-gn1\" class=\"margin-right-s\"></uofx-icon>\r\n    <ion-label class=\"text-d-b1-m\">{{ chipData.jobFuncItem.name }}</ion-label>\r\n  </ng-container>\r\n\r\n  <!-- 部門+職稱 -->\r\n  <ng-container *ngIf=\"chipData.itemType === UofxUserSetItemType.DeptJobTitle\">\r\n    <uofx-icon *ngIf=\"showAvatar\" name=\"u-position\" [size]=\"20\" color=\"x-gn1\" class=\"margin-right-s\"></uofx-icon>\r\n    <ion-label class=\"text-d-b1-m\">\r\n      {{ chipData.deptItem.name }}&ensp;\r\n      @if (chipData.deptItem.containsChildren) {\r\n        <ng-container *ngTemplateOutlet=\"tHasChildren\"> </ng-container>\r\n      }\r\n      {{ chipData.jobTitleItem.name }}\r\n    </ion-label>\r\n  </ng-container>\r\n\r\n  <!-- 部門+職務 -->\r\n  <ng-container *ngIf=\"chipData.itemType === UofxUserSetItemType.DeptJobFunc\">\r\n    <uofx-icon *ngIf=\"showAvatar\" name=\"u-position\" [size]=\"20\" color=\"x-gn1\" class=\"margin-right-s\"></uofx-icon>\r\n    <ion-label class=\"text-d-b1-m\">\r\n      {{ chipData.deptItem.name }}&ensp;\r\n      @if (chipData.deptItem.containsChildren) {\r\n        <ng-container *ngTemplateOutlet=\"tHasChildren\"> </ng-container>\r\n      }\r\n      {{ chipData.jobFuncItem.name }}\r\n    </ion-label>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n<!-- (含子部門) -->\r\n<ng-template #tHasChildren>\r\n  <span [translate]=\"'global.comm.user-select.contains-children'\"></span>\r\n</ng-template>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { UofxPaginationRespModel } from '@uofx/app-components';\r\nimport {\r\n  UofxSearchRequest,\r\n  UofxUserSelectResExtendModel,\r\n  UofxUserSelectResModel,\r\n  UofxUserSetCommuseModel,\r\n  UofxUserSetItemType,\r\n} from './user-select.interface';\r\n\r\n@Injectable()\r\nexport class UofxUserSelectService {\r\n  constructor(private http: HttpClient) {}\r\n\r\n  /**\r\n   * 選人元件快篩模式\r\n   * @param model UofxSearchRequest\r\n   * @param types UofxUserSetItemType[]\r\n   * @returns Array<UserSelectSearchModal>\r\n   */\r\n  public searchMulti(\r\n    model: UofxSearchRequest,\r\n    types?: UofxUserSetItemType,\r\n    userSetID?: string\r\n  ): Observable<UofxUserSelectResModel> {\r\n    if (types === UofxUserSetItemType.Limit)\r\n      return this.http.post<UofxUserSelectResModel>(`~/api/app/base/user/userset/searchempls/${userSetID}`, model);\r\n    else return this.http.post<UofxUserSelectResModel>(`~/api/app/base/user/userset/searchmulti`, model);\r\n  }\r\n\r\n  /**\r\n   * 職務選人元件快篩模式\r\n   * @param model UofxSearchRequest\r\n   * @param types UofxUserSetItemType[]\r\n   * @returns Array<UserSelectSearchModal>\r\n   */\r\n  public searchJubFun(model: UofxSearchRequest): Observable<UofxUserSelectResModel> {\r\n    return this.http\r\n      .post<Array<UofxUserSelectResExtendModel>>(`~/api/app/base/user/userset/searchjobfuncs`, model)\r\n      .pipe(\r\n        map((data) => {\r\n          /*TODO 目前職務不支援非同步載入，原因是考慮到職務會有類別載入的效果會不好，*/\r\n          /*TODO 但因為架構的關係Response modal要跟其他選人元件一樣，暫時也先給PageInfo，如果後續有調整樣式再一併調整modal*/\r\n          const resModel = <UofxUserSelectResModel>{\r\n            items: [],\r\n            pageInfo: new UofxPaginationRespModel(),\r\n          };\r\n\r\n          data.forEach((jobFun) => {\r\n            resModel.items.push(jobFun);\r\n          });\r\n          return resModel;\r\n        })\r\n      );\r\n  }\r\n\r\n  /** 取得常用清單 */\r\n  public gerCommuseList(): Observable<Array<UofxUserSetCommuseModel>> {\r\n    return this.http.get<Array<UofxUserSetCommuseModel>>(`~/api/app/base/user/userset/commonuse`);\r\n  }\r\n}\r\n","import { UofxUserSelectResExtendModel, UofxUserSetItemType, UofxUserSetModel } from '../user-select.interface';\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class UofxSelectFilterLogic {\r\n  /**\r\n   * 格式化查詢的結果，已選擇的項目會被排除\r\n   * @param userSelectList 要顯示在查詢結果的項目\r\n   * @param selectedType 目前選人元件的類型\r\n   * @param selectedItem 目前已選取的項目\r\n   */\r\n  formatSelected(\r\n    userSelectList: Array<UofxUserSelectResExtendModel>,\r\n    selectedType: UofxUserSetItemType,\r\n    selectedItem?: Array<UofxUserSetModel>\r\n  ) {\r\n    if (selectedType === UofxUserSetItemType.JobFunc) return this.excludeJobFunsItem(userSelectList, selectedItem);\r\n    else return this.excludeItem(userSelectList, selectedItem);\r\n  }\r\n\r\n  /**\r\n   * 排除已選取項目\r\n   * @param userSelectList 要顯示在查詢結果的項目\r\n   * @param selectedItem 目前已選取的項目\r\n   */\r\n  excludeItem(userSelectList: Array<UofxUserSelectResExtendModel>, selectedItem?: Array<UofxUserSetModel>) {\r\n    selectedItem?.forEach((item) => {\r\n      const index = userSelectList.findIndex((p) => this.isItemMatch(p, item));\r\n      if (index > -1) userSelectList.splice(index, 1);\r\n    });\r\n    return userSelectList;\r\n  }\r\n\r\n  /**\r\n   * 排除已選取項目(職務專用)\r\n   * @param userSelectList 要顯示在查詢結果的項目\r\n   * @param selectedItem 目前已選取的項目\r\n   */\r\n  excludeJobFunsItem(userSelectList: Array<UofxUserSelectResExtendModel>, selectedItem?: Array<UofxUserSetModel>) {\r\n    // 職務查詢結果model有兩層:類別、職務，要排除重複的是第二層的職務\r\n    return userSelectList.map((item) => ({\r\n      itemType: item.itemType,\r\n      jobFuncCategory: {\r\n        ...item.jobFuncCategory,\r\n        jobFunctions: item.jobFuncCategory.jobFunctions.filter(\r\n          (jobFun) => !selectedItem.some((p) => p.jobFuncItem?.id === jobFun.id)\r\n        ),\r\n      },\r\n    }));\r\n  }\r\n\r\n  /**\r\n   * 我的常用排除已選取的項目\r\n   * @param commuse 選取的常用項目\r\n   * @param selectedItem 目前已選取的項目\r\n   */\r\n  commuseExcludeItem(commuse: Array<UofxUserSelectResExtendModel>, selectedItem: Array<UofxUserSetModel>) {\r\n    const newItems = this.excludeItem([...commuse], selectedItem);\r\n    selectedItem.push(...newItems);\r\n    return selectedItem;\r\n  }\r\n\r\n  /**\r\n   * 檢查常用項目是否與已選取項目相同\r\n   * @param p 已選取的項目\r\n   * @param item 常用項目\r\n   * @returns 是否相同\r\n   */\r\n  private isItemMatch(p: UofxUserSetModel, item: UofxUserSelectResExtendModel): boolean {\r\n    if (p.itemType !== item.itemType) return false;\r\n    switch (item.itemType) {\r\n      case UofxUserSetItemType.Empl:\r\n        return p.emplItem.id === item.emplItem.id;\r\n      case UofxUserSetItemType.Dept:\r\n        return p.deptItem.id === item.deptItem.id && p.deptItem.containsChildren === item.deptItem.containsChildren;\r\n      case UofxUserSetItemType.JobTitle:\r\n        return p.jobTitleItem.id === item.jobTitleItem.id;\r\n      case UofxUserSetItemType.JobFunc:\r\n        return p.jobFuncItem.id === item.jobFuncItem.id;\r\n      case UofxUserSetItemType.DeptJobTitle:\r\n        return p.deptItem.id === item.deptItem.id && p.jobTitleItem.id === item.jobTitleItem.id;\r\n      case UofxUserSetItemType.DeptJobFunc:\r\n        return p.deptItem.id === item.deptItem.id && p.jobFuncItem.id === item.jobFuncItem.id;\r\n      case UofxUserSetItemType.DeptSupervisor:\r\n      case UofxUserSetItemType.DeptEmployee:\r\n        return p.emplItem.id === item.emplItem.id && p.deptItem.id === item.deptItem.id;\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { UofxUserSetCommuseModel } from '../../user-select.interface';\r\n\r\n@Pipe({\r\n  name: 'commusefilter',\r\n})\r\nexport class UofxCommuseItemFilterPipe implements PipeTransform {\r\n  transform(formList: Array<UofxUserSetCommuseModel>, keyword?: string): Array<UofxUserSetCommuseModel> {\r\n    if (!formList) return [];\r\n    if (keyword === undefined || keyword === '') return formList;\r\n    return formList.filter((i) => i.name.toUpperCase().includes(keyword.toUpperCase()));\r\n  }\r\n}\r\n","import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { AppCurrentUser, UofxPaginationReqModel } from '@uofx/app-components';\r\nimport { IUofxInfiniteScrollEvent } from '@uofx/app-components/infinite-scroll';\r\nimport { AlertController, IonInput, ModalController } from '@ionic/angular';\r\nimport { UofxI18NService } from '@uofx/core';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport { UofxSelectFilterLogic } from '../../logic/select-filter.logic';\r\nimport {\r\n  UofxJobFuncModel,\r\n  UofxSearchRequest,\r\n  UofxUserSelectResExtendModel,\r\n  UofxUserSelectResModel,\r\n  UofxUserSetCommuseModel,\r\n  UofxUserSetItemType,\r\n  UofxUserSetModel,\r\n} from '../../user-select.interface';\r\nimport { UofxUserSelectService } from '../../user-select.service';\r\n\r\n@Component({\r\n  selector: 'uofx-user-select-filter-dialog',\r\n  templateUrl: './user-select-filter.dialog.html',\r\n  styleUrls: ['./user-select-filter.dialog.scss'],\r\n})\r\nexport class UofxUserSelectFilterDialog implements OnInit {\r\n  @ViewChild('searchInput') searchInput: IonInput;\r\n\r\n  /** 選人元件類型，不指定類型的話為[任意選] */\r\n  @Input() types: Array<UofxUserSetItemType> = [];\r\n\r\n  /* UserSet ID，給限定選人使用 */\r\n  @Input() userSetId: string;\r\n\r\n  /** 預設已選取的項目 */\r\n  @Input() defaultSelect: Array<UofxUserSetModel> = [];\r\n\r\n  /** 是否要顯示 [我的常用] */\r\n  @Input() showCommonUse: boolean;\r\n\r\n  /** 是否為多選模式，預設 true */\r\n  @Input() multiple = true;\r\n\r\n  /** 是否限同部門人員 */\r\n  @Input() mustSameGroup = false;\r\n\r\n  /** 目前的選人元件類別 */\r\n  selectedType: UofxUserSetItemType = UofxUserSetItemType.DeptEmployee;\r\n\r\n  /** 選人快篩 Subject */\r\n  searchTerms = new Subject<string>();\r\n  /** 公司別代碼 */\r\n  corpId: string;\r\n\r\n  /** 查詢結果列表 */\r\n  resultList: Array<UofxUserSelectResExtendModel> = [];\r\n\r\n  /** [我的常用]清單 */\r\n  commuseList: Array<UofxUserSetCommuseModel> = [];\r\n\r\n  /** 查詢輸入的關鍵字 */\r\n  keyWord = '';\r\n\r\n  /** 查詢placeholder */\r\n  inputPlaceholder = '';\r\n\r\n  /** 輸入框是否為focus狀態 */\r\n  isInputFocus = false;\r\n\r\n  /** 顯示查詢提示 */\r\n  showSearchTip = true;\r\n\r\n  /** 選人類別enum */\r\n  UofxUserSetItemType = UofxUserSetItemType;\r\n\r\n  /** 是否正在讀取 */\r\n  isLoading = false;\r\n\r\n  /** 是否關閉非同步載入的效果 */\r\n  disabledInfinite = true;\r\n  /** 已選取的項目 */\r\n  selectedItem: Array<UofxUserSetModel> = [];\r\n\r\n  /** 計時器，用在項目已存在的提示只要顯示兩秒的效果 */\r\n  existTextTimer = null;\r\n\r\n  /** 查詢 Segment 列表 */\r\n  // *UKEY:\"global.comm.user-select.filter.segment.depEmpl-title\"\r\n  // *UKEY:\"global.comm.user-select.filter.segment.dept-title\"\r\n  // *UKEY:\"global.comm.user-select.filter.segment.jobtitle-title\"\r\n  // *UKEY:\"global.comm.user-select.filter.segment.jobfunc-title\"\r\n  // *UKEY:\"global.comm.user-select.filter.segment.comm-use\"\r\n\r\n  /** segment 清單 */\r\n  segmentList = [\r\n    { i18nTitle: 'global.comm.user-select.filter.segment.depEmpl-title', type: UofxUserSetItemType.DeptEmployee },\r\n    { i18nTitle: 'global.comm.user-select.filter.segment.dept-title', type: UofxUserSetItemType.Dept },\r\n    { i18nTitle: 'global.comm.user-select.filter.segment.jobtitle-title', type: UofxUserSetItemType.JobTitle },\r\n    { i18nTitle: 'global.comm.user-select.filter.segment.jobfunc-title', type: UofxUserSetItemType.JobFunc },\r\n  ];\r\n\r\n  /** segment-我的常用，會動態加入  */\r\n  segmentCommuse = { i18nTitle: 'global.comm.user-select.filter.segment.comm-use', type: UofxUserSetItemType.Commuse };\r\n\r\n  /** 分頁資訊 */\r\n  pageModel = <UofxPaginationReqModel>{\r\n    /** 排序欄位 */\r\n    order: 0,\r\n    /** 排序 */\r\n    by: 1,\r\n    /** 一頁幾筆，預設為 50 筆 */\r\n    pageSize: 50,\r\n    /** 第幾頁 */\r\n    pageNumber: 1,\r\n  };\r\n\r\n  /** 取得要顯示的選人Segment */\r\n  get userSelectSegment() {\r\n    // [我的常用]，預設是不顯示，是任意選或是可以展成人的才顯示\r\n    if (this.types.length === 0) {\r\n      return this.segmentList.concat(this.segmentCommuse);\r\n    }\r\n\r\n    const result = this.segmentList.filter((segment) => this.types.includes(segment.type));\r\n    return this.showCommonUse ? result.concat(this.segmentCommuse) : result;\r\n  }\r\n\r\n  constructor(\r\n    private injector: Injector,\r\n    private modalCtrl: ModalController,\r\n    public alertCtrl: AlertController,\r\n    private i18n: UofxI18NService,\r\n    private filterLogic: UofxSelectFilterLogic\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    // 用另一個參數來接選取結果，是要解決按左上[x]關閉modal時會把選取結果帶回去的問題，只有按確定才要帶選取內容回去。\r\n    this.selectedItem = this.defaultSelect;\r\n    this.setSearchType();\r\n    this.setInputPlaceholder();\r\n    this.loadSelectData(() => {\r\n      this.isLoading = false;\r\n    });\r\n  }\r\n\r\n  ionViewDidEnter() {\r\n    this.inputScrollToEnd();\r\n  }\r\n\r\n  /** 輸入框 blur 事件 */\r\n  onSearchInputBlur() {\r\n    this.isInputFocus = false;\r\n  }\r\n\r\n  /** 輸入況 focus 事件 */\r\n  onSearchInputFocus() {\r\n    this.isInputFocus = true;\r\n  }\r\n\r\n  /** 設定預設的選人類型 */\r\n  setSearchType() {\r\n    // 如果如果有設定UserSet ID，會顯示限定選人\r\n    if (this.userSetId) {\r\n      this.types = [UofxUserSetItemType.Limit];\r\n      this.selectedType = UofxUserSetItemType.Limit;\r\n      return;\r\n    }\r\n    // 設定一個以上的類別時，讓Segment顯示只存在segmentList的項目，而[限定選人]不會顯示在Segment上面\r\n    this.selectedType = this.userSelectSegment[0].type;\r\n  }\r\n\r\n  /** 設定查詢placeholder */\r\n  setInputPlaceholder() {\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.empl\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.empl.must-same-group\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.dept\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.jobtitle\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.jobfunc\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.limit\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.deptemployee\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.deptemployee.must-same-group\"\r\n    // *UKEY:\"global.comm.user-select.filter.input.placeholder.commuse\"\r\n\r\n    let key = UofxUserSetItemType[this.selectedType].toLowerCase();\r\n\r\n    // 限制同部門時，人員 和 部門人員 要加 (限同部門人員)\r\n    if (this.mustSameGroup && (key === 'empl' || key === 'deptemployee')) {\r\n      key += '.must-same-group';\r\n    }\r\n\r\n    this.inputPlaceholder = `global.comm.user-select.filter.input.placeholder.${key}`;\r\n  }\r\n\r\n  /** 選擇的是職務，格式要調整 */\r\n  onjobFuncItemSelect(jobFunc: UofxJobFuncModel) {\r\n    const selected = <UofxUserSetModel>{\r\n      itemType: UofxUserSetItemType.JobFunc,\r\n      jobFuncItem: jobFunc,\r\n    };\r\n    this.onItemListClick(selected);\r\n  }\r\n\r\n  /** 選取項目 */\r\n  onItemListClick(select: UofxUserSetModel) {\r\n    // 限定選人在有關鍵字的情況下清空字串會觸發ionChange事件，這樣會load兩次資料而造成畫面閃爍，\r\n    // 要在這裡判斷不然會被initParam重製而無法判斷。\r\n    const needLoad = this.keyWord === '';\r\n\r\n    this.addUserSelect(select);\r\n    this.initParam();\r\n\r\n    // 限定選人在原本就沒輸入關鍵字的情況不會觸發ionChange，所以要自己重load資料。\r\n    if (needLoad)\r\n      this.loadSelectData(() => {\r\n        this.isLoading = false;\r\n      });\r\n    // 輸入框移到最下面，避免選很多人時看不到佔位符\r\n    this.inputScrollToEnd();\r\n  }\r\n\r\n  /** 選取[我的常用] */\r\n  onCommuseClick(select: UofxUserSetCommuseModel) {\r\n    this.clearCommuseIsExist();\r\n    this.addCommuse(select);\r\n    this.searchInput.setFocus();\r\n    // 輸入框移到最下面，避免選很多人時看不到佔位符\r\n    this.inputScrollToEnd();\r\n  }\r\n\r\n  /** 輸入框可視內容移到最下面 */\r\n  inputScrollToEnd() {\r\n    const element = document.getElementById('inputDiv');\r\n    if (element) {\r\n      setTimeout(() => {\r\n        element.scrollTop = element.scrollHeight;\r\n        this.searchInput.setFocus();\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n  /** 輸入搜尋事件  */\r\n  onSearch() {\r\n    this.doRefresh(null);\r\n  }\r\n\r\n  /** 更新 */\r\n  doRefresh(ev) {\r\n    this.resultList = [];\r\n    this.pageModel.pageNumber = 1;\r\n    this.disabledInfinite = true;\r\n    this.getDataList(() => {\r\n      this.isLoading = false;\r\n      if (ev) ev.target.complete();\r\n    });\r\n  }\r\n\r\n  /** 初始化查詢參數 */\r\n  initParam() {\r\n    this.keyWord = '';\r\n    this.resultList = [];\r\n    this.commuseList = [];\r\n    this.showSearchTip = true;\r\n    this.pageModel.pageNumber = 1;\r\n  }\r\n\r\n  /** 新增選取名單 */\r\n  addUserSelect(select: UofxUserSetModel) {\r\n    if (this.multiple) this.addMultipleSelect(select);\r\n    // 單選模式 - 直接替換整個陣列\r\n    else this.selectedItem = [select];\r\n  }\r\n\r\n  /** 多選模式 - 新增選取名單 */\r\n  addMultipleSelect(select: UofxUserSetModel) {\r\n    // 不能超過100個項目\r\n    if (this.selectedItem.length >= 100) {\r\n      this.outNumberAlert();\r\n      return;\r\n    }\r\n    this.selectedItem.push(select);\r\n  }\r\n\r\n  /** 新增[我的常用]到選取結果 */\r\n  addCommuse(commuseList: UofxUserSetCommuseModel) {\r\n    const userSetList = commuseList.items;\r\n    // 不能選超過一百個項目\r\n    if (this.selectedItem.length + userSetList.length >= 100) {\r\n      this.outNumberAlert();\r\n      return;\r\n    }\r\n\r\n    const totalCount = userSetList.length + this.selectedItem.length;\r\n    // 去除重複的項目\r\n    const filter = this.filterLogic.commuseExcludeItem([...userSetList], [...this.selectedItem]);\r\n\r\n    // 預想是沒有重複的情況下，兩個陣列length的總和會等於去除重複後的數值\r\n    if (this.selectedItem.length !== 0 && filter.length !== totalCount) {\r\n      this.showCommuseIsExist(commuseList);\r\n    }\r\n\r\n    // 避免篩選結果跟選取一樣時，畫面會出現異動的效果\r\n    if (filter.length === this.selectedItem.length) return;\r\n    this.selectedItem = filter;\r\n  }\r\n\r\n  // *UKEY:\"global.comm.user-select.filter.select.out-number.message\"\r\n  /** 已達可選上限提示 */\r\n  async outNumberAlert() {\r\n    const alert = await this.alertCtrl.create({\r\n      header: this.i18n.trans('global.comm.user-select.filter.select.out-number.message', { count: 100 }),\r\n      buttons: [this.i18n.trans('global.comm.button.ok')],\r\n    });\r\n    await alert.present();\r\n  }\r\n\r\n  /** 顯示\"已加入\"而且只需顯示兩秒  */\r\n  showCommuseIsExist(commuseList: UofxUserSetCommuseModel) {\r\n    clearTimeout(this.existTextTimer);\r\n    this.existTextTimer = setTimeout(() => {\r\n      this.clearCommuseIsExist();\r\n      this.existTextTimer = null;\r\n    }, 2000);\r\n    commuseList.isExist = true;\r\n  }\r\n\r\n  /** 刪除選取的名單 */\r\n  onSelectDelete(userSet: UofxUserSetModel) {\r\n    const result = this.selectedItem.filter((select) => select !== userSet);\r\n    this.selectedItem = result;\r\n    this.doRefresh(null);\r\n  }\r\n\r\n  /** 變更查詢類別 */\r\n  onSelectTypeChange(type: number) {\r\n    // 點按的類別是同一個就不用做動作，不然查詢結果會被清空\r\n    if (this.selectedType === type) return;\r\n    this.selectedType = type;\r\n    this.setSearchTip();\r\n    if (type === UofxUserSetItemType.Commuse) this.loadCommuse();\r\n    this.initParam();\r\n    this.setInputPlaceholder();\r\n    this.searchInput.setFocus();\r\n  }\r\n\r\n  /** 取得清單 */\r\n  getDataList(callback?: () => void) {\r\n    if (this.selectedType === UofxUserSetItemType.Commuse) this.loadCommuse(callback);\r\n    else this.loadSelectData(callback);\r\n  }\r\n\r\n  /** 讀取選人元件要顯示的列表 */\r\n  loadSelectData(callback?: () => void) {\r\n    this.isLoading = true;\r\n    this._searchObservable().subscribe({\r\n      next: (res) => {\r\n        const data = res as UofxUserSelectResModel;\r\n        const items =\r\n          this.selectedType === UofxUserSetItemType.Dept && this.types.length === 0\r\n            ? // 任意選-部門tab，為每一筆資料再複製一份 containsChildren=true 的資料\r\n              this.createDeptChildData(data.items)\r\n            : data.items;\r\n        const formatData = this.filterLogic.formatSelected(items, this.selectedType, this.selectedItem);\r\n        this.searchResult(formatData);\r\n        this.disabledInfinite = data.items.length < this.pageModel.pageSize;\r\n      },\r\n      complete: () => {\r\n        if (callback) callback();\r\n        this.isLoading = false;\r\n      },\r\n    });\r\n  }\r\n\r\n  /** 建立部門的含子部門資料 */\r\n  createDeptChildData(list: Array<UofxUserSelectResExtendModel>) {\r\n    if (!list?.length) return [];\r\n    return list.flatMap((item) => {\r\n      // 建立包含子部門\r\n      const children: UofxUserSelectResExtendModel = {\r\n        ...item,\r\n        deptItem: {\r\n          ...item.deptItem,\r\n          containsChildren: true,\r\n        },\r\n      };\r\n      // 回傳原部門 + 含子部門\r\n      return [item, children];\r\n    });\r\n  }\r\n\r\n  /** 讀取[我的常用]資料 */\r\n  loadCommuse(callback?: () => void) {\r\n    this.isLoading = true;\r\n    this._searchObservable().subscribe({\r\n      next: (res) => {\r\n        this.commuseList = res as Array<UofxUserSetCommuseModel>;\r\n        this.clearCommuseIsExist();\r\n        this.setSearchTip();\r\n      },\r\n      complete: () => {\r\n        if (callback) callback();\r\n        this.isLoading = false;\r\n      },\r\n    });\r\n  }\r\n\r\n  /** 清除[我的常用]已存在的字詞 */\r\n  clearCommuseIsExist() {\r\n    if (this.commuseList && this.commuseList.length > 0) {\r\n      const result = this.commuseList.find((p) => p.isExist);\r\n      if (result) result.isExist = false;\r\n    }\r\n  }\r\n\r\n  /** @internal 建立查詢 Observable */\r\n  _searchObservable(): Observable<UofxUserSelectResModel | Array<UofxUserSetCommuseModel>> {\r\n    // 一般選人沒關鍵字就不查詢\r\n    if (\r\n      this.selectedType !== UofxUserSetItemType.Limit &&\r\n      this.selectedType !== UofxUserSetItemType.Commuse &&\r\n      !this.keyWord\r\n    )\r\n      return of(<UofxUserSelectResModel>{\r\n        items: [],\r\n        pageInfo: {\r\n          pageNumber: 0,\r\n        },\r\n      });\r\n\r\n    const request = <UofxSearchRequest>{\r\n      keyword: this.keyWord,\r\n      includeDisable: false,\r\n      size: this.pageModel.pageSize,\r\n      page: this.pageModel.pageNumber,\r\n      itemType: this.selectedType,\r\n    };\r\n    return this._apiObservable(request, this.injector);\r\n  }\r\n\r\n  /** @internal 取得 Service 的 Observable */\r\n  _apiObservable(searchReq: UofxSearchRequest, injector: Injector) {\r\n    if (this.selectedType === UofxUserSetItemType.JobFunc)\r\n      return injector.get(UofxUserSelectService).searchJubFun(searchReq);\r\n    else if (this.selectedType === UofxUserSetItemType.Commuse)\r\n      return injector.get(UofxUserSelectService).gerCommuseList();\r\n    else return injector.get(UofxUserSelectService).searchMulti(searchReq, this.selectedType, this.userSetId);\r\n  }\r\n\r\n  /** 非同步載入資料 */\r\n  doInifite(ev: IUofxInfiniteScrollEvent) {\r\n    this.pageModel.pageNumber++;\r\n    this.loadSelectData(() => {\r\n      ev.complete();\r\n    });\r\n  }\r\n\r\n  /** 設定查詢結果 */\r\n  searchResult(result: Array<UofxUserSelectResExtendModel>) {\r\n    if (result && result.length > 0) this.resultList.push(...result);\r\n\r\n    this.setSearchTip();\r\n  }\r\n\r\n  /** 設定查詢提示 */\r\n  setSearchTip() {\r\n    if (this.selectedType === UofxUserSetItemType.Limit) this.showSearchTip = false;\r\n    else if (this.selectedType === UofxUserSetItemType.Commuse)\r\n      this.showSearchTip = !this.keyWord && this.commuseList.length === 0;\r\n    // 關鍵字清空、也沒有查詢結果時顯示查詢提示\r\n    else this.showSearchTip = !this.keyWord && this.resultList.length === 0;\r\n  }\r\n\r\n  /** 送出 */\r\n  onOkClick() {\r\n    this.modalCtrl.dismiss(this.selectedItem);\r\n  }\r\n}\r\n","<uofx-modal-header>\r\n  <ion-title>\r\n    <!-- 選擇 -->\r\n    <span [translate]=\"'global.comm.user-select.filter.title'\"></span>\r\n    <!-- 限選一項時出現: ( {{數量}} / 1 ) -->\r\n    <span *ngIf=\"!multiple\">\r\n      ( <span class=\"text-bl-700\">{{ selectedItem.length }}</span> / 1 )</span\r\n    >\r\n  </ion-title>\r\n</uofx-modal-header>\r\n<div class=\"uofx-user-select-filter bg-white box-shadow-down\">\r\n  <div class=\"uofx-user-select-wrapper\">\r\n    <!-- 已選取的項目 -->\r\n    <div id=\"inputDiv\" class=\"uofx-user-selected uofx-input\" [ngClass]=\"{ 'filter-focus': this.isInputFocus }\">\r\n      <div class=\"uofx-user-search-chip\">\r\n        <uofx-user-select-chip\r\n          *ngFor=\"let item of selectedItem\"\r\n          [chipData]=\"item\"\r\n          [isShowDelete]=\"true\"\r\n          (chipDelete)=\"onSelectDelete(item)\">\r\n        </uofx-user-select-chip>\r\n      </div>\r\n      <!-- 快篩輸入框 -->\r\n      <div class=\"uofx-user-search-input\">\r\n        <ion-input\r\n          #searchInput\r\n          debounce=\"500\"\r\n          [placeholder]=\"inputPlaceholder | translate\"\r\n          [(ngModel)]=\"keyWord\"\r\n          (ionInput)=\"onSearch()\">\r\n        </ion-input>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <!-- 任意選Segment -->\r\n  <div *ngIf=\"userSelectSegment.length > 1\">\r\n    <ion-segment mode=\"md\" [value]=\"selectedType\" [scrollable]=\"userSelectSegment.length > 4 || showCommonUse\">\r\n      <ion-segment-button\r\n        *ngFor=\"let segment of userSelectSegment\"\r\n        [ngClass]=\"{ scrollable: userSelectSegment.length > 4 || showCommonUse }\"\r\n        [value]=\"segment.type\"\r\n        (click)=\"onSelectTypeChange(segment.type)\">\r\n        <ion-label [translate]=\"segment.i18nTitle\"></ion-label>\r\n      </ion-segment-button>\r\n    </ion-segment>\r\n  </div>\r\n</div>\r\n<ion-content [fullscreen]=\"true\">\r\n  <!-- refresher -->\r\n  <ion-refresher slot=\"fixed\" (ionRefresh)=\"doRefresh($event)\">\r\n    <ion-refresher-content></ion-refresher-content>\r\n  </ion-refresher>\r\n  <uofx-infinite-scroll\r\n    (infinite)=\"doInifite($event)\"\r\n    [isLoading]=\"isLoading\"\r\n    [itemAmount]=\"searchResult.length\"\r\n    [stopInfinite]=\"disabledInfinite\">\r\n    <!-- 查詢結果列表 -->\r\n    <div class=\"user-select-result-content\">\r\n      <ion-list class=\"uofx-list small\" [lines]=\"'full'\">\r\n        <ng-container [ngSwitch]=\"selectedType\">\r\n          <!--職務-->\r\n          <ng-container *ngSwitchCase=\"UofxUserSetItemType.JobFunc\">\r\n            <ng-container *ngIf=\"resultList.length !== 0; else TipTemplate\">\r\n              <ion-item-group *ngFor=\"let result of resultList\">\r\n                <ion-item-divider class=\"text-2-b1-r bk-gr-200\">\r\n                  <ion-label>{{ result.jobFuncCategory.category }} </ion-label>\r\n                </ion-item-divider>\r\n                <ion-item\r\n                  *ngFor=\"let jobFun of result.jobFuncCategory.jobFunctions\"\r\n                  (click)=\"onjobFuncItemSelect(jobFun)\">\r\n                  <!--調整let-data的格式，加入參數itemType-->\r\n                  <ng-container\r\n                    *ngTemplateOutlet=\"\r\n                      userSetTemplate;\r\n                      context: { $implicit: { jobFuncItem: jobFun, itemType: result.itemType } }\r\n                    \">\r\n                  </ng-container>\r\n                </ion-item>\r\n              </ion-item-group>\r\n            </ng-container>\r\n          </ng-container>\r\n          <ng-container *ngSwitchCase=\"UofxUserSetItemType.Commuse\">\r\n            <ng-container *ngIf=\"commuseList | commusefilter: keyWord as filterList\">\r\n              <ng-container *ngIf=\"filterList.length !== 0; else TipTemplate\">\r\n                <ion-item *ngFor=\"let commuse of filterList\" (click)=\"onCommuseClick(commuse)\">\r\n                  <!--調整let-data的格式，加入參數itemType 跟 isExist-->\r\n                  <ng-container\r\n                    *ngTemplateOutlet=\"\r\n                      userSetTemplate;\r\n                      context: { $implicit: { commuse: commuse, itemType: UofxUserSetItemType.Commuse } }\r\n                    \">\r\n                  </ng-container>\r\n                </ion-item>\r\n              </ng-container>\r\n            </ng-container>\r\n          </ng-container>\r\n          <ng-container *ngSwitchDefault>\r\n            <ng-container *ngIf=\"resultList.length !== 0; else TipTemplate\">\r\n              <ion-item *ngFor=\"let result of resultList\" (click)=\"onItemListClick(result)\">\r\n                <ng-container *ngTemplateOutlet=\"userSetTemplate; context: { $implicit: result }\"> </ng-container>\r\n              </ion-item>\r\n            </ng-container>\r\n          </ng-container>\r\n        </ng-container>\r\n      </ion-list>\r\n    </div>\r\n  </uofx-infinite-scroll>\r\n</ion-content>\r\n<uofx-modal-footer (buttonClick)=\"onOkClick()\"></uofx-modal-footer>\r\n\r\n<!-- 查詢提示 Template -->\r\n<ng-template #TipTemplate>\r\n  <div class=\"search-empty\">\r\n    <ng-container *ngIf=\"showSearchTip; else emptyElseTemplate\">\r\n      <!-- 查無結果的提示 -->\r\n      <uofx-empty-status>\r\n        <ion-text\r\n          [hidden]=\"selectedType === UofxUserSetItemType.Commuse\"\r\n          uofx-empty-status-description\r\n          [translate]=\"'global.comm.user-select.filter.search.tip'\">\r\n        </ion-text>\r\n        <ion-text\r\n          [hidden]=\"selectedType !== UofxUserSetItemType.Commuse\"\r\n          uofx-empty-status-description\r\n          [translate]=\"'global.comm.user-select.filter.commuse-empty.tip'\">\r\n        </ion-text>\r\n      </uofx-empty-status>\r\n    </ng-container>\r\n    <ng-template #emptyElseTemplate>\r\n      <!-- 查詢提示 -->\r\n      <uofx-empty-status [hidden]=\"isLoading\">\r\n        <img uofx-empty-status-image src=\"./assets/img/u-state-empty-u-not-found.svg\" />\r\n        <ion-text uofx-empty-status-title [translate]=\"'global.comm.empty-status.search-notfound'\"> </ion-text>\r\n        <ion-text uofx-empty-status-description [translate]=\"'global.bpm.comm.search-empty-description'\">\r\n        </ion-text>\r\n      </uofx-empty-status>\r\n    </ng-template>\r\n  </div>\r\n</ng-template>\r\n\r\n<!-- UserSet 資訊 Template -->\r\n<ng-template #userSetTemplate let-data>\r\n  <!-- 人員、限定選人、部門+人員 -->\r\n  <ng-container\r\n    *ngIf=\"\r\n      data.itemType === UofxUserSetItemType.Empl ||\r\n      data.itemType === UofxUserSetItemType.DeptEmployee ||\r\n      data.itemType === UofxUserSetItemType.Limit\r\n    \">\r\n    <uofx-avatar\r\n      [uofSrc]=\"data['emplItem']?.imageInfoUrl\"\r\n      [uofName]=\"data['emplItem']?.name\"\r\n      [uofSize]=\"40\"></uofx-avatar>\r\n    <ion-label>\r\n      <h1>{{ data.emplItem.department }}&ensp;{{ data.emplItem.name }}</h1>\r\n      <p>\r\n        {{ data.emplItem.account\r\n        }}<span\r\n          *ngIf=\"!data.emplItem.isMainDept\"\r\n          class=\"margin-left\"\r\n          [translate]=\"'global.comm.user-select.branch-dept'\"></span>\r\n      </p>\r\n    </ion-label>\r\n  </ng-container>\r\n  <!-- 部門 -->\r\n  <ng-container *ngIf=\"data.itemType === UofxUserSetItemType.Dept\">\r\n    <div class=\"icon-wrapper\">\r\n      <div class=\"dept-avatar\">\r\n        <uofx-icon name=\"u-department\" size=\"25\" color=\"x-bl11\" class=\"no-margin\"> </uofx-icon>\r\n        <uofx-icon\r\n          *ngIf=\"data.deptItem.containsChildren\"\r\n          name=\"mi-add-circle\"\r\n          size=\"12\"\r\n          color=\"bl-500\"\r\n          class=\"children-badge\"></uofx-icon>\r\n      </div>\r\n    </div>\r\n    <ion-label>\r\n      {{ data.deptItem.name }}\r\n      @if (data.deptItem.containsChildren) {\r\n        <span [translate]=\"'global.comm.user-select.contains-children'\"></span>\r\n      }\r\n    </ion-label>\r\n  </ng-container>\r\n  <!--職級-->\r\n  <ng-container *ngIf=\"data.itemType === UofxUserSetItemType.JobTitle\">\r\n    <div class=\"icon-wrapper\">\r\n      <uofx-icon name=\"u-jobtitle\" size=\"25\" color=\"x-p1\"></uofx-icon>\r\n    </div>\r\n    <ion-label>{{ data.jobTitleItem.name }}</ion-label>\r\n  </ng-container>\r\n  <!-- 職務 -->\r\n  <ng-container *ngIf=\"data.itemType === UofxUserSetItemType.JobFunc\">\r\n    <div class=\"icon-wrapper\">\r\n      <uofx-icon name=\"u-position\" size=\"25\" color=\"x-gn1\"></uofx-icon>\r\n    </div>\r\n    <ion-label>{{ data.jobFuncItem.name }}</ion-label>\r\n  </ng-container>\r\n  <!-- 我的常用 -->\r\n  <ng-container *ngIf=\"data.itemType === UofxUserSetItemType.Commuse\">\r\n    <div class=\"icon-wrapper\">\r\n      <uofx-icon name=\"heart-outline\" size=\"25\" color=\"bk-1000\"></uofx-icon>\r\n    </div>\r\n    <ion-label>{{ data.commuse.name }}</ion-label>\r\n    <ion-label\r\n      *ngIf=\"data.commuse.isExist\"\r\n      class=\"commuse-exist\"\r\n      slot=\"end\"\r\n      [translate]=\"'global.comm.user-select.comm-use.exist'\"></ion-label>\r\n  </ng-container>\r\n</ng-template>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { UofxUserSetDeptLiteModel, UofxUserSetItemType, UofxUserSetModel } from '../../user-select.interface';\r\n\r\nimport { UofxI18NService } from '@uofx/core';\r\n\r\n@Pipe({\r\n  name: 'userTextOnly',\r\n})\r\nexport class UofxUserTextOnlyPipe implements PipeTransform {\r\n  constructor(private i18n: UofxI18NService) {}\r\n\r\n  /** 取得部門名稱 */\r\n  private getDeptName(deptItem: UofxUserSetDeptLiteModel): string {\r\n    if (!deptItem) return '';\r\n    const containsChildrenText = this.i18n.trans('global.comm.user-select.contains-children');\r\n    return deptItem.containsChildren ? `${deptItem.name}${containsChildrenText}` : deptItem.name;\r\n  }\r\n\r\n  transform(userList: Array<UofxUserSetModel>): string {\r\n    if (!userList || userList.length === 0) return '';\r\n    const usetText = [];\r\n    userList.forEach((user) => {\r\n      switch (user.itemType) {\r\n        case UofxUserSetItemType.Empl:\r\n        case UofxUserSetItemType.DeptEmployee:\r\n          usetText.push(`${user.emplItem.department} ${user.emplItem.name}`);\r\n          break;\r\n        case UofxUserSetItemType.Dept:\r\n        case UofxUserSetItemType.DeptSupervisor:\r\n          usetText.push(this.getDeptName(user.deptItem));\r\n          break;\r\n        case UofxUserSetItemType.JobTitle:\r\n          usetText.push(user.jobTitleItem.name);\r\n          break;\r\n        case UofxUserSetItemType.JobFunc:\r\n          usetText.push(user.jobFuncItem.name);\r\n          break;\r\n        case UofxUserSetItemType.DeptJobTitle:\r\n          usetText.push(`${this.getDeptName(user.deptItem)} ${user.jobTitleItem.name}`);\r\n          break;\r\n        case UofxUserSetItemType.DeptJobFunc:\r\n          usetText.push(`${this.getDeptName(user.deptItem)} ${user.jobFuncItem.name}`);\r\n          break;\r\n      }\r\n    });\r\n\r\n    return usetText.join(',');\r\n  }\r\n}\r\n","import { AfterViewInit, Component, ElementRef, Input, OnInit, QueryList, ViewChildren } from '@angular/core';\r\n\r\nimport { UofxUserSetModel } from '../../user-select.interface';\r\n\r\n@Component({\r\n  selector: 'uofx-user-select-view-more-users-dialog',\r\n  templateUrl: './view-more-users.dialog.html',\r\n  styleUrls: ['./view-more-users.dialog.scss'],\r\n})\r\nexport class UofxUserSelectViewMoreUsersDialog implements OnInit, AfterViewInit {\r\n  /**\r\n   * chip 的元素，用來當作搜尋的索引\r\n   * 使用 { read: ElementRef } 取得元素內的文字內容\r\n   */\r\n  @ViewChildren('userChip', { read: ElementRef }) userChips: QueryList<ElementRef>;\r\n  /** 所有項目 */\r\n  @Input() userSetModel: Array<UofxUserSetModel> = [];\r\n  /** 關鍵字 */\r\n  keyword = '';\r\n  /** 過濾後要顯示的項目 */\r\n  filteredUsers: Array<UofxUserSetModel> = [];\r\n  /** 每個項目對應的搜尋文字 */\r\n  searchTexts: string[] = [];\r\n\r\n  ngOnInit() {\r\n    this.filteredUsers = this.userSetModel;\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (this.userSetModel.length === 0) return;\r\n    this.searchTexts = this.userChips.map((ref) => ref.nativeElement.textContent.trim().toLowerCase());\r\n  }\r\n\r\n  /** 輸入搜尋關鍵字 */\r\n  onSearchKeyChange() {\r\n    const keyword = this.keyword.trim().toLowerCase();\r\n    if (!keyword) {\r\n      this.filteredUsers = this.userSetModel;\r\n      return;\r\n    }\r\n    this.filteredUsers = this.userSetModel.filter((_, i) => this.searchTexts[i]?.includes(keyword) ?? false);\r\n  }\r\n}\r\n","<!-- 查看所有項目 -->\r\n<uofx-modal-header [title]=\"'global.comm.user-select.view-more-users.title' | translate\"> </uofx-modal-header>\r\n\r\n<ion-content fullscreen>\r\n  <div class=\"view-more-users-content\">\r\n    <!-- 搜尋 -->\r\n    <ion-searchbar\r\n      [(ngModel)]=\"keyword\"\r\n      [placeholder]=\"'global.comm.search' | translate\"\r\n      show-clear-button=\"never\"\r\n      [debounce]=\"500\"\r\n      (ionInput)=\"onSearchKeyChange()\"></ion-searchbar>\r\n    <div class=\"scroll-area flex-1\">\r\n      @if (filteredUsers.length > 0) {\r\n        <!-- 項目列表 -->\r\n        @for (item of filteredUsers; track item) {\r\n          <ion-item [lines]=\"'full'\">\r\n            <uofx-user-select-chip #userChip [chipData]=\"item\" [showDetails]=\"true\"></uofx-user-select-chip>\r\n          </ion-item>\r\n        }\r\n      } @else {\r\n        <uofx-empty-status>\r\n          <img uofx-empty-status-image src=\"./assets/img/u-state-empty-u-not-found.svg\" />\r\n          <!-- 噢喔！找不到任何資料 -->\r\n          <ion-text uofx-empty-status-title [translate]=\"'global.comm.empty-status.search-notfound'\"> </ion-text>\r\n          <!-- 換個關鍵字再試試吧 -->\r\n          <ion-text uofx-empty-status-description [translate]=\"'global.bpm.comm.search-empty-description'\"> </ion-text>\r\n        </uofx-empty-status>\r\n      }\r\n    </div>\r\n  </div>\r\n</ion-content>\r\n","import { Component, Input } from '@angular/core';\r\nimport { UofxUserSetEmplLiteModel, UofxUserSetItemType, UofxUserSetModel } from '../user-select.interface';\r\nimport { ModalController } from '@ionic/angular';\r\nimport { UofxUserSelectViewMoreUsersDialog } from '../dialog/view-more-users/view-more-users.dialog';\r\n\r\n@Component({\r\n  selector: 'uofx-user-select-view',\r\n  templateUrl: './user-select-view.component.html',\r\n  styleUrls: ['./user-select-view.component.scss'],\r\n})\r\nexport class UofxUserSelectViewComponent {\r\n  /** 顯示模式 */\r\n  @Input('displayMode') displayMode: DisplayMode = DisplayMode.Default;\r\n  /** 傳入的來源是否為userset lite */\r\n  @Input('isLite') isLite = false;\r\n  /** 主要資料 */\r\n  @Input('userSet')\r\n  set userSet(data: Array<UofxUserSetModel> | Array<UofxUserSetEmplLiteModel>) {\r\n    // 現況傳入lite目前只有人員類型\r\n    if (this.isLite) {\r\n      this.userSetModel = (data as Array<UofxUserSetEmplLiteModel>).map(\r\n        (item) =>\r\n          <UofxUserSetModel>{\r\n            itemType: UofxUserSetItemType.Empl,\r\n            emplItem: item,\r\n          }\r\n      );\r\n    } else {\r\n      this.userSetModel = data ? (data as Array<UofxUserSetModel>).filter((item) => item) : [];\r\n    }\r\n  }\r\n  userSetModel: Array<UofxUserSetModel> = [];\r\n  /** 顯示模式列舉 */\r\n  displayModeEnum = DisplayMode;\r\n\r\n  constructor(private modalCtrl: ModalController) {}\r\n\r\n  /** 點擊其他幾人 */\r\n  async onMoreClick() {\r\n    const modal = await this.modalCtrl.create({\r\n      component: UofxUserSelectViewMoreUsersDialog,\r\n      presentingElement: document.getElementById('ion-router-outlet-content'),\r\n      componentProps: {\r\n        userSetModel: this.userSetModel,\r\n      },\r\n    });\r\n    await modal.present();\r\n  }\r\n}\r\n\r\n/** 顯示模式 */\r\nexport enum DisplayMode {\r\n  /** 預設全部顯示 */\r\n  Default = 'default',\r\n  /** 和其他幾個 */\r\n  More = 'more',\r\n  /** 垂直全部顯示 */\r\n  Vertical = 'vertical',\r\n}\r\n","@switch (displayMode) {\r\n  @case (displayModeEnum.More) {\r\n    <!-- 和其他幾人 -->\r\n    <span class=\"d-flex align-items-center\">\r\n      <uofx-user-select-chip [chipData]=\"userSetModel[0]\"></uofx-user-select-chip>\r\n      @if (userSetModel.length > 1) {\r\n        <span\r\n          class=\"margin-left-s text-underline\"\r\n          [translate]=\"'global.proj.pack.avatar.totalcount'\"\r\n          [translateParams]=\"{ count: userSetModel.length - 1 }\"\r\n          (click)=\"onMoreClick()\"></span>\r\n      }\r\n    </span>\r\n  }\r\n\r\n  @case (displayModeEnum.Vertical) {\r\n    <!-- 垂直全部顯示 -->\r\n    <div class=\"d-flex flex-column\">\r\n      @for (item of userSetModel; track item; let isLast = $last) {\r\n        <div [ngClass]=\"{ 'margin-bottom-s': !isLast }\">\r\n          <uofx-user-select-chip [chipData]=\"item\"></uofx-user-select-chip>\r\n        </div>\r\n      }\r\n    </div>\r\n  }\r\n\r\n  @case (displayModeEnum.Default) {\r\n    <!-- 預設全部顯示 -->\r\n    @for (item of userSetModel; track item; let isLast = $last) {\r\n      <div [ngClass]=\"{ 'margin-bottom': !isLast }\">\r\n        <span class=\"d-flex\">\r\n          <uofx-user-select-chip [chipData]=\"item\"></uofx-user-select-chip>\r\n          @if (!isLast) {\r\n            <span class=\"d-flex align-items-center\">,</span>\r\n          }\r\n        </span>\r\n      </div>\r\n    }\r\n  }\r\n}\r\n","import { ChangeDetectorRef, Component, HostBinding, Input, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { UofxUserSetItemType, UofxUserSetModel } from './user-select.interface';\r\n\r\nimport { ModalController } from '@ionic/angular';\r\nimport { UofxUserSelectFilterDialog } from './dialog/filter/user-select-filter.dialog';\r\nimport { deepCopy } from '@uofx/core';\r\n\r\n@Component({\r\n  selector: 'uofx-user-select',\r\n  templateUrl: './user-select.component.html',\r\n  styleUrls: ['./user-select.component.scss'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => UofxUserSelectComponent),\r\n      multi: true,\r\n    },\r\n  ],\r\n})\r\nexport class UofxUserSelectComponent implements ControlValueAccessor {\r\n  @HostBinding('style.width') width = '100%';\r\n\r\n  /** 選人元件類型，不指定為全部類型 */\r\n  @Input() types: Array<UofxUserSetItemType>;\r\n\r\n  /* UserSet ID，給限定選人使用 */\r\n  @Input() userSetId: string;\r\n\r\n  /** 傳入的公司別Id\r\n   * @deprecated corpId 參數已不再使用\r\n   */\r\n  @Input() corpId: string;\r\n\r\n  /** disabled模式，只會顯示選取項目不能編輯，並呈現灰色區塊給使用者 */\r\n  @Input() isDisabled = false;\r\n\r\n  // *UKEY:\"global.comm.user-select.placeholder\"\r\n  /** 選擇人員PlaceHolder */\r\n  @Input() placeHolder = 'global.comm.user-select.placeholder';\r\n\r\n  /** 是否要顯示 [我的常用] */\r\n  @Input() showCommonUse: boolean;\r\n\r\n  /** 是否為多選模式，預設 true */\r\n  @Input() multiple = true;\r\n\r\n  /** 是否限同部門人員 */\r\n  @Input() mustSameGroup = false;\r\n\r\n  /** 選取的項目 */\r\n  selectedItem: Array<UofxUserSetModel> = [];\r\n\r\n  /** 選人類別enum */\r\n  UofxUserSetItemType = UofxUserSetItemType;\r\n\r\n  constructor(\r\n    private modalCtrl: ModalController,\r\n    private cdr: ChangeDetectorRef\r\n  ) {}\r\n\r\n  /** 變更事件 */\r\n  // eslint-disable-next-line @typescript-eslint/ban-types\r\n  _propagateChange: (value) => {};\r\n\r\n  /** 點按選人元件 */\r\n  onSelectClick() {\r\n    this.createSelectFilterModal();\r\n  }\r\n\r\n  /** 建立選人查詢Modal */\r\n  async createSelectFilterModal() {\r\n    const modal = await this.modalCtrl.create({\r\n      component: UofxUserSelectFilterDialog,\r\n      presentingElement: document.getElementById('ion-router-outlet-content'),\r\n      componentProps: {\r\n        types: this.types ? this.types : [],\r\n        defaultSelect: this.selectedItem ? [...this.selectedItem] : [],\r\n        userSetId: this.userSetId,\r\n        showCommonUse: this.showCommonUse,\r\n        multiple: this.multiple,\r\n        mustSameGroup: this.mustSameGroup,\r\n      },\r\n    });\r\n\r\n    modal.onWillDismiss().then((res) => {\r\n      if (!res.data) return;\r\n      this.selectedItem = res.data;\r\n      if (this._propagateChange) this._propagateChange(deepCopy(this.selectedItem));\r\n      this.cdr.detectChanges();\r\n    });\r\n\r\n    await modal.present();\r\n  }\r\n\r\n  writeValue(obj: any): void {\r\n    if (!this._verifyNgModel(obj)) {\r\n      this.selectedItem = [];\r\n      return;\r\n    }\r\n    this.selectedItem = obj;\r\n  }\r\n  registerOnChange(fn: any) {\r\n    this._propagateChange = fn;\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n  registerOnTouched(fn: any) {}\r\n\r\n  setDisabledState?(isDisabled: boolean): void {\r\n    this.isDisabled = isDisabled;\r\n  }\r\n\r\n  /** 判斷 ngModel 是否為 Array */\r\n  _verifyNgModel(obj: any) {\r\n    if (obj === undefined || obj === null) return false;\r\n    if (!(obj instanceof Array)) return false;\r\n    if (!this._isUofxUserSetModel(obj[0])) return false;\r\n\r\n    return true;\r\n  }\r\n\r\n  /**  是否為 UserSet Model */\r\n  _isUofxUserSetModel(model: any) {\r\n    if (!model) return false;\r\n    if (model.itemType === undefined) return false;\r\n    if (model.itemType === UofxUserSetItemType.Empl && model.emplItem === undefined) return false;\r\n    if (model.itemType === UofxUserSetItemType.Dept && model.deptItem === undefined) return false;\r\n    if (model.itemType === UofxUserSetItemType.JobTitle && model.jobTitleItem === undefined) return false;\r\n    if (model.itemType === UofxUserSetItemType.JobFunc && model.jobFuncItem === undefined) return false;\r\n    if (\r\n      model.itemType === UofxUserSetItemType.DeptJobTitle &&\r\n      (model.jobTitleItem === undefined || model.deptItem === undefined)\r\n    )\r\n      return false;\r\n    if (\r\n      model.itemType === UofxUserSetItemType.DeptJobFunc &&\r\n      (model.jobFuncItem === undefined || model.deptItem === undefined)\r\n    )\r\n      return false;\r\n\r\n    return true;\r\n  }\r\n}\r\n","<div class=\"uofx-user-selected uofx-input result-list\" (click)=\"onSelectClick()\" [ngClass]=\"{ disabled: isDisabled }\">\r\n  <!-- 沒有選擇任何人時地顯示 -->\r\n  <ng-container *ngIf=\"selectedItem.length === 0\">\r\n    <span class=\"placeholder\" [translate]=\"placeHolder\"></span>\r\n  </ng-container>\r\n  <!-- 已選擇人員 -->\r\n  <ng-container *ngFor=\"let item of selectedItem; let i = index\">\r\n    <uofx-user-select-chip [attr.select-separate]=\"i !== selectedItem.length - 1\" [chipData]=\"item\">\r\n    </uofx-user-select-chip>\r\n  </ng-container>\r\n</div>\r\n","import { UofxPluginBeforeUserSetModel, UofxPluginBeforeUserSetResModel } from './user-set.plugin.interface';\r\n\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs';\r\n\r\n/** 外掛模組 - 用來取得選人元件相關資訊 */\r\n@Injectable()\r\nexport class UofxPluginUserSetService {\r\n  private readonly API_VER = '1.0';\r\n\r\n  constructor(private http: HttpClient) {}\r\n\r\n  /**\r\n   * 取得選人元件 model\r\n   *\r\n   * @param {UofxPluginBeforeUserSetModel} model 選人元件轉換前model\r\n   * @return {*}  {UofxUserSetModel} 選人元件轉換後model\r\n   * @memberof UofxPluginUserSetService\r\n   */\r\n  public getUserSelectModel(model: UofxPluginBeforeUserSetModel) {\r\n    const url = `~/api/plugin/convert/v${this.API_VER}/org/userset`;\r\n    return this.http.post<UofxPluginBeforeUserSetResModel>(url, model).pipe(map((res) => res.items));\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  UofxPluginBeforeUserSetModel,\r\n  UofxPluginBeforeUserSetEmplModel,\r\n  UofxPluginBeforeUserSetDeptModel,\r\n  UofxPluginBeforeUserSetJobTitleModel,\r\n  UofxPluginBeforeUserSetDeptJobTitleModel,\r\n  UofxPluginBeforeUserSetDeptJobFuncModel,\r\n  UofxPluginBeforeUserSetDeptSupervisorModel,\r\n  UofxPluginBeforeUserSetDeptEmplModel,\r\n  UofxPluginBeforeUserSetJobFuncModel,\r\n} from './user-set.plugin.interface';\r\nimport { UofxUserSetItemType } from '../user-select.interface';\r\nimport { UofxPluginUserSetService } from './user-set.plugin.service';\r\nimport { UofxConsole } from '@uofx/core';\r\n\r\ntype UofxPluginUserSetTypeDataMap = {\r\n  [UofxUserSetItemType.Empl]: Array<string>;\r\n  [UofxUserSetItemType.Dept]: Array<string>;\r\n  [UofxUserSetItemType.JobTitle]: Array<string>;\r\n  [UofxUserSetItemType.JobFunc]: Array<string>;\r\n  [UofxUserSetItemType.DeptJobTitle]: Array<{ deptCode: string; jobTitleCode: string }>;\r\n  [UofxUserSetItemType.DeptJobFunc]: Array<{ deptCode: string; jobFuncCode: string }>;\r\n  [UofxUserSetItemType.DeptSupervisor]: Array<string>;\r\n  [UofxUserSetItemType.DeptEmployee]: Array<{ deptCode: string; account: string }>;\r\n};\r\n\r\n/** 外掛模組 - 用來取得選人元件相關資訊 */\r\n@Injectable()\r\nexport class UofxUserSetPluginHelper {\r\n  constructor(private service: UofxPluginUserSetService) {}\r\n  /**\r\n   * 任意選，取得選人元件model\r\n   *\r\n   * @param {UofxPluginBeforeUserSetModel} model 選人元件轉換前model\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  public getUserSet(model: UofxPluginBeforeUserSetModel) {\r\n    return this.service.getUserSelectModel(model);\r\n  }\r\n\r\n  /**\r\n   * 指定類型，取得選人元件model\r\n   *\r\n   * @param {UofxUserSetItemType} type 選人元件類型\r\n   * @example\r\n   *   this.pluginHelper.getUserSetByType(UofxUserSetItemType.Empl, ['John', 'Kim']);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.Dept, ['HR', 'Finance']);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.JobTitle, ['Manager', 'Staff']);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.JobFunc, ['Developer', 'Designer']);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.DeptJobTitle, [\r\n         { deptCode: 'HR', jobTitleCode: 'Manager' },\r\n         { deptCode: 'Finance', jobTitleCode: 'Staff' },\r\n       ]);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.DeptJobFunc, [\r\n         { deptCode: 'HR', jobFuncCode: 'Developer' },\r\n         { deptCode: 'Finance', jobFuncCode: 'Designer' },\r\n       ]);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.DeptSupervisor, ['HR', 'Finance']);\r\n       this.pluginHelper.getUserSetByType(UofxUserSetItemType.DeptEmployee, [\r\n         { deptCode: 'HR', account: 'john' },\r\n         { deptCode: 'Finance', account: 'kim' },\r\n       ]);\r\n   * @param {*} data 依類型填入相對應的資料\r\n   * @return {*} {UofxUserSetModel} 選人元件model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  public getUserSetByType<T extends keyof UofxPluginUserSetTypeDataMap>(\r\n    type: T,\r\n    data: UofxPluginUserSetTypeDataMap[T]\r\n  ) {\r\n    let beforeModel: UofxPluginBeforeUserSetModel;\r\n    switch (type) {\r\n      case UofxUserSetItemType.Empl:\r\n        beforeModel = this._getEmplModel(data as Array<string>);\r\n        break;\r\n      case UofxUserSetItemType.Dept:\r\n        beforeModel = this._getDeptModel(data as Array<string>);\r\n        break;\r\n      case UofxUserSetItemType.JobTitle:\r\n        beforeModel = this._getJobTitleModel(data as Array<string>);\r\n        break;\r\n      case UofxUserSetItemType.JobFunc:\r\n        beforeModel = this._getJobFuncModel(data as Array<string>);\r\n        break;\r\n      case UofxUserSetItemType.DeptJobTitle:\r\n        beforeModel = this._getDeptJobTitleModel(data as Array<{ deptCode: string; jobTitleCode: string }>);\r\n        break;\r\n      case UofxUserSetItemType.DeptJobFunc:\r\n        beforeModel = this._getDeptJobFuncModel(data as Array<{ deptCode: string; jobFuncCode: string }>);\r\n        break;\r\n      case UofxUserSetItemType.DeptSupervisor:\r\n        beforeModel = this._getDeptSupervisorModel(data as Array<string>);\r\n        break;\r\n      case UofxUserSetItemType.DeptEmployee:\r\n        beforeModel = this._getDeptEmplModel(data as Array<{ deptCode: string; account: string }>);\r\n        break;\r\n      default:\r\n        UofxConsole.log('此類型不支援:', type);\r\n    }\r\n    return this.service.getUserSelectModel(beforeModel);\r\n  }\r\n  /**\r\n   * @private 傳入人員帳號陣列，取得選人元件轉換前{人員} model\r\n   *\r\n   * @param {Array<string>} accounts 人員帳號\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getEmplModel(accounts: Array<string>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: accounts.map(\r\n        (account) =>\r\n          <UofxPluginBeforeUserSetEmplModel>{\r\n            itemType: UofxUserSetItemType.Empl,\r\n            emplItem: { account },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入部門代號陣列，取得選人元件轉換前{部門} model\r\n   *\r\n   * @param {Array<string>} deptCodes 部門代號\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getDeptModel(deptCodes: Array<string>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: deptCodes.map(\r\n        (code) =>\r\n          <UofxPluginBeforeUserSetDeptModel>{\r\n            itemType: UofxUserSetItemType.Dept,\r\n            deptItem: { code },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入職稱代號陣列，取得選人元件轉換前{職稱} model\r\n   *\r\n   * @param {Array<string>} jobTitleCodes 職稱代號\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getJobTitleModel(jobTitleCodes: Array<string>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: jobTitleCodes.map(\r\n        (code) =>\r\n          <UofxPluginBeforeUserSetJobTitleModel>{\r\n            itemType: UofxUserSetItemType.JobTitle,\r\n            jobTitleItem: { code },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入職務代號陣列，取得選人元件轉換前{職務} model\r\n   *\r\n   * @param {Array<string>} jobFuncCodes 職務代號\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getJobFuncModel(jobFuncCodes: Array<string>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: jobFuncCodes.map(\r\n        (code) =>\r\n          <UofxPluginBeforeUserSetJobFuncModel>{\r\n            itemType: UofxUserSetItemType.JobFunc,\r\n            jobFuncItem: { code },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入部門代號與職稱代號陣列，取得選人元件轉換前{部門+職稱} model\r\n   *\r\n   * @param {Array<{ deptCode: string; jobTitleCode: string }>} items 部門與職稱代號陣列\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxPluginApiService\r\n   */\r\n  private _getDeptJobTitleModel(\r\n    items: Array<{ deptCode: string; jobTitleCode: string }>\r\n  ): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: items.map(\r\n        (item) =>\r\n          <UofxPluginBeforeUserSetDeptJobTitleModel>{\r\n            itemType: UofxUserSetItemType.DeptJobTitle,\r\n            deptItem: { code: item.deptCode },\r\n            jobTitleItem: { code: item.jobTitleCode },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入部門代號與職務代號陣列，取得選人元件轉換前{部門+職務} model\r\n   *\r\n   * @param {Array<{ deptCode: string; jobFuncCode: string }>} items 部門與職務代號陣列\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getDeptJobFuncModel(items: Array<{ deptCode: string; jobFuncCode: string }>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: items.map(\r\n        (item) =>\r\n          <UofxPluginBeforeUserSetDeptJobFuncModel>{\r\n            itemType: UofxUserSetItemType.DeptJobFunc,\r\n            deptItem: { code: item.deptCode },\r\n            jobFuncItem: { code: item.jobFuncCode },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入部門代號陣列，取得選人元件轉換前{部門主管} model\r\n   *\r\n   * @param {Array<string>} deptCodes 部門代號\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getDeptSupervisorModel(deptCodes: Array<string>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: deptCodes.map(\r\n        (code) =>\r\n          <UofxPluginBeforeUserSetDeptSupervisorModel>{\r\n            itemType: UofxUserSetItemType.DeptSupervisor,\r\n            deptItem: { code },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @private 傳入部門代號與人員帳號陣列，取得選人元件轉換前{部門+人員} model\r\n   *\r\n   * @param {Array<{ deptCode: string; account: string }>} items 部門與人員帳號陣列\r\n   * @return {*}  {UofxPluginBeforeUserSetModel} 選人元件轉換前model\r\n   * @memberof UofxUserSetPluginHelper\r\n   */\r\n  private _getDeptEmplModel(items: Array<{ deptCode: string; account: string }>): UofxPluginBeforeUserSetModel {\r\n    return {\r\n      items: items.map(\r\n        (item) =>\r\n          <UofxPluginBeforeUserSetDeptEmplModel>{\r\n            itemType: UofxUserSetItemType.DeptEmployee,\r\n            deptItem: { code: item.deptCode },\r\n            emplItem: { account: item.account },\r\n          }\r\n      ),\r\n    };\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { NgModule } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { UofxAvatarModule } from '@uofx/app-components/avatar';\r\nimport { UofxCommuseItemFilterPipe } from './pipe/commuse-item-filter/commuse-item-filter.pipe';\r\nimport { UofxEmptyStatusModule } from '@uofx/app-components/empty';\r\nimport { UofxIconModule } from '@uofx/app-components/icon';\r\nimport { UofxInfiniteScrollModule } from '@uofx/app-components/infinite-scroll';\r\nimport { UofxModalModule } from '@uofx/app-components/modal';\r\nimport { UofxPluginUserSetService } from './plugin-helper/user-set.plugin.service';\r\nimport { UofxSelectFilterLogic } from './logic/select-filter.logic';\r\nimport { UofxSkeletonModule } from '@uofx/app-components/skeleton';\r\nimport { UofxUserSelectChipComponent } from './component/chip/chip.component';\r\nimport { UofxUserSelectComponent } from './user-select.component';\r\nimport { UofxUserSelectFilterDialog } from './dialog/filter/user-select-filter.dialog';\r\nimport { UofxUserSelectService } from './user-select.service';\r\nimport { UofxUserSelectViewComponent } from './user-select-view/user-select-view.component';\r\nimport { UofxUserSelectViewMoreUsersDialog } from './dialog/view-more-users/view-more-users.dialog';\r\nimport { UofxUserSetPluginHelper } from './plugin-helper/user-set.plugin.helper';\r\nimport { UofxUserTextOnlyPipe } from './pipe/user-text-only/user-text-only.pipe';\r\n\r\nconst DIALOGS = [UofxUserSelectFilterDialog, UofxUserSelectViewMoreUsersDialog];\r\n\r\nconst COMPONENTS = [UofxUserSelectChipComponent, UofxUserSelectComponent, UofxUserSelectViewComponent];\r\n\r\nconst PIPES = [UofxCommuseItemFilterPipe, UofxUserTextOnlyPipe];\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    TranslateModule.forChild(),\r\n\r\n    IonicModule,\r\n\r\n    UofxAvatarModule,\r\n    UofxEmptyStatusModule,\r\n    UofxIconModule,\r\n    UofxInfiniteScrollModule,\r\n    UofxModalModule,\r\n    UofxSkeletonModule,\r\n  ],\r\n  exports: [...COMPONENTS, ...PIPES],\r\n  declarations: [...COMPONENTS, ...PIPES, ...DIALOGS],\r\n  providers: [UofxSelectFilterLogic, UofxUserSelectService, UofxPluginUserSetService, UofxUserSetPluginHelper],\r\n})\r\nexport class UofxUserSelectModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4","i2","i3.UofxSelectFilterLogic","i5","i6","i7","i9","i12.UofxUserSelectChipComponent","i13.UofxCommuseItemFilterPipe","i6.UofxUserSelectChipComponent","i4.UofxUserSelectChipComponent","map","i1.UofxPluginUserSetService"],"mappings":"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"}