{"version":3,"file":"linid-dm-directory-manager-client-core.mjs","sources":["../../../../../packages/libs/client-core/src/lib/shared/interfaces/data.interface.ts","../../../../../packages/libs/client-core/src/lib/shared/interfaces/ui.interface.ts","../../../../../packages/libs/client-core/src/lib/shared/interfaces/configs.interface.ts","../../../../../packages/libs/client-core/src/lib/shared/states/error/error.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/resources.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/data-detail.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/configs.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/jstable.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/data-table.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/search.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/directives/color-search-letters.directive.ts","../../../../../packages/libs/client-core/src/lib/shared/directives/disable-control.directive.ts","../../../../../packages/libs/client-core/src/lib/shared/directives/flex-grow-fit-content.directive.ts","../../../../../packages/libs/client-core/src/lib/shared/directives/infinite-scroll.directive.ts","../../../../../packages/libs/client-core/src/lib/shared/directives/omit-chars.directive.ts","../../../../../packages/libs/client-core/src/lib/shared/directives/unfocusable.directive.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/augment-global-types.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/custom-rxjs-operators.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/custom-validators.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/data-list.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/data-tree.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/ellipsis-menu.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/form.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/generic-array.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/helpers/ui.helper.ts","../../../../../packages/libs/client-core/src/lib/shared/interfaces/form.interface.ts","../../../../../packages/libs/client-core/src/lib/shared/interfaces/resources-types.interface.ts","../../../../../packages/libs/client-core/src/lib/shared/interfaces/routing.interface.ts","../../../../../packages/libs/client-core/src/lib/shared/pipes/type-casting.ts","../../../../../packages/libs/client-core/src/lib/shared/services/env.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/configs.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/interactions.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/data.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/env.service.provider.ts","../../../../../packages/libs/client-core/src/lib/shared/states/configs/configs.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/error/error.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/resources-types/resources-types.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/services/errors-handler.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/form.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/resources-types.service.ts","../../../../../packages/libs/client-core/src/lib/shared/services/mat-paginator-intl.service.ts","../../../../../packages/libs/client-core/src/lib/shared/shared.module.ts","../../../../../packages/libs/client-core/src/lib/shared/states/external-links/external-links.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/header/header.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/home/home.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/logout-dialog/logout-dialog.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/ui/ui.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/user/user.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/configs/configs.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/data/data.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/data/data.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/external-links/external-links.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/header/header.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/home/home.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/logout-dialog/logout-dialog.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/resources-types/resources-types.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/routing/routing.actions.ts","../../../../../packages/libs/client-core/src/lib/shared/states/routing/routing.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/ui/ui.state.ts","../../../../../packages/libs/client-core/src/lib/shared/states/user/user.state.ts","../../../../../packages/libs/client-core/src/lib/shared/utils/animations/fade-animations.ts","../../../../../packages/libs/client-core/src/lib/shared/utils/index.ts","../../../../../packages/libs/client-core/src/lib/shared/public-api.ts","../../../../../packages/libs/client-core/src/lib/shared/index.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/core/injection-tokens.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/auth/auth.service.interface.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/services/routing.service.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/app.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/app.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/homepage.guard.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/resources.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/data-detail/data-detail.guard.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/login/login.guard.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/resource-page.guard.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/app.guard.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/auth/auth-oidc.service.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/auth/auth.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/aot.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/data-list.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/data-tree.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/form.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/search.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/services/data.actions-handler.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/services/form.service.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/services/interceptor.service.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/services/sidenav.service.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/core/core.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/app.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/configs.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/custom-url-serializer.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/data-detail.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/data-table.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/guards.helper.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/helpers/index.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/interfaces/data.interface.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/interfaces/resources-types.interface.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/interfaces/ui.interface.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/interfaces/index.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/shared/services/index.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/header/header.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/header/header.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/header/logout-dialog.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/homepage.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/homepage.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/homepage.module.ts","../../../../../packages/libs/client-core/src/lib/ui/generic-array-header/generic-array-header.component.ts","../../../../../packages/libs/client-core/src/lib/ui/generic-array-header/generic-array-header.component.html","../../../../../packages/libs/client-core/src/lib/ui/loading-spinner/loading-spinner.component.ts","../../../../../packages/libs/client-core/src/lib/ui/loading-spinner/loading-spinner.component.html","../../../../../packages/libs/client-core/src/lib/feature/generic-array/generic-array.component.ts","../../../../../packages/libs/client-core/src/lib/feature/generic-array/generic-array.component.html","../../../../../packages/libs/client-core/src/lib/feature/generic-list/generic-list.component.ts","../../../../../packages/libs/client-core/src/lib/feature/generic-list/generic-list.component.html","../../../../../packages/libs/client-core/src/lib/feature/generic-tree/generic-tree.component.ts","../../../../../packages/libs/client-core/src/lib/feature/generic-tree/generic-tree.component.html","../../../../../packages/libs/client-core/src/lib/feature/search-bar/search-bar.component.ts","../../../../../packages/libs/client-core/src/lib/feature/search-bar/search-bar.component.html","../../../../../packages/libs/client-core/src/lib/feature/confirm-dialog/confirm-dialog.component.ts","../../../../../packages/libs/client-core/src/lib/feature/confirm-dialog/confirm-dialog.component.html","../../../../../packages/libs/client-core/src/lib/feature/ellipsis-menu/ellipsis-menu.component.ts","../../../../../packages/libs/client-core/src/lib/feature/ellipsis-menu/ellipsis-menu.component.html","../../../../../packages/libs/client-core/src/lib/feature/data-detail-array-attributes/data-detail-array-attributes.component.ts","../../../../../packages/libs/client-core/src/lib/feature/data-detail-array-attributes/data-detail-array-attributes.component.html","../../../../../packages/libs/client-core/src/lib/feature/generic-form/generic-form.component.ts","../../../../../packages/libs/client-core/src/lib/feature/generic-form/generic-form.component.html","../../../../../packages/libs/client-core/src/lib/feature/add-edit-generic-form-dialog/add-edit-generic-form-dialog.component.ts","../../../../../packages/libs/client-core/src/lib/feature/add-edit-generic-form-dialog/add-edit-generic-form-dialog.component.html","../../../../../packages/libs/client-core/src/lib/feature/data-detail-edit-button/data-detail-edit-button.component.ts","../../../../../packages/libs/client-core/src/lib/feature/data-detail-edit-button/data-detail-edit-button.component.html","../../../../../packages/libs/client-core/src/lib/ui/data-detail-header/data-detail-header.component.ts","../../../../../packages/libs/client-core/src/lib/ui/data-detail-header/data-detail-header.component.html","../../../../../packages/libs/client-core/src/lib/ui/data-detail-simple-attributes/data-detail-simple-attributes.component.ts","../../../../../packages/libs/client-core/src/lib/ui/data-detail-simple-attributes/data-detail-simple-attributes.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/data-detail/data-detail.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/data-detail/data-detail.component.html","../../../../../packages/libs/client-core/src/lib/feature/advanced-search/advanced-search.component.ts","../../../../../packages/libs/client-core/src/lib/feature/advanced-search/advanced-search.component.html","../../../../../packages/libs/client-core/src/lib/feature/generic-data-header/generic-data-header.component.ts","../../../../../packages/libs/client-core/src/lib/feature/generic-data-header/generic-data-header.component.html","../../../../../packages/libs/client-core/src/lib/ui/not-found-404/not-found-404.component.ts","../../../../../packages/libs/client-core/src/lib/ui/not-found-404/not-found-404.component.html","../../../../../packages/libs/client-core/src/lib/ui/ui.module.ts","../../../../../packages/libs/client-core/src/lib/ui/public-api.ts","../../../../../packages/libs/client-core/src/lib/ui/index.ts","../../../../../packages/libs/client-core/src/lib/feature/feature.module.ts","../../../../../packages/libs/client-core/src/lib/feature/public-api.ts","../../../../../packages/libs/client-core/src/lib/feature/index.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/data-detail/data-detail.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/array-data/array-data.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/array-data/array-data.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/list-data/list-data.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/list-data/list-data.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/tree-data/tree-data.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/tree-data/tree-data.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/resource-page.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/resource-page.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/homepage/resource-page/resource-page.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/login/login.component.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/login/login.component.html","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/login/login-routing.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/app/features/login/login.module.ts","../../../../../packages/libs/client-core/src/lib/dm-core/public-api.ts","../../../../../packages/libs/client-core/src/lib/dm-core/index.ts","../../../../../packages/libs/client-core/src/lib/client-core.module.ts","../../../../../packages/libs/client-core/src/lib/public-api.ts","../../../../../packages/libs/client-core/src/index.ts","../../../../../packages/libs/client-core/src/linid-dm-directory-manager-client-core.ts"],"sourcesContent":["/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport {\n  IArrayAccessibility,\n  IArrayAttributeUpdateParams,\n  IAttribute,\n  IConfig,\n  IGetDataListParams,\n} from './configs.interface';\nimport { FormFieldsExtendedSingleTypes } from './form.interface';\nimport { IAdvancedSearchChip } from './ui.interface';\nimport { MatDialogRef } from '@angular/material/dialog';\n\nexport interface IData {\n  schemas: string[];\n  totalResults: number;\n  itemsPerPage: number;\n  startIndex: number;\n  Resources: any[];\n}\n\nexport type FormDataValueTypes = string | string[] | boolean | ILink | ILink[];\n\nexport interface IFormData extends Partial<IAttribute> {\n  dataValue: FormDataValueTypes;\n}\n\nexport interface ILink {\n  id: string;\n  label: string;\n  value?: FormFieldsExtendedSingleTypes;\n  canBeRead?: boolean;\n  parentId?: string;\n  parentLabel?: string;\n  parentCanBeRead?: boolean;\n}\n\nexport interface IScimProperties {\n  schemas: string[];\n}\n\nexport enum EComponentName {\n  array = 'array',\n  input = 'input',\n  inputChipsAutocomplete = 'input-chips-autocomplete',\n  autocomplete = 'autocomplete',\n  select = 'select',\n  textarea = 'textarea',\n  datepicker = 'datepicker',\n  slideToggle = 'slide-toggle',\n  imgInput = 'img-input',\n  fileInput = 'file-input',\n}\n\nexport interface IDataItem {\n  ids: IEntryIds;\n  name: string;\n  link: string;\n  canDelete: boolean;\n}\n\nexport interface IDataNode {\n  ids: IEntryIds;\n  name: string;\n  children?: IDataNode[];\n  link: string;\n  type: string;\n  childrenType: string;\n  canDelete: boolean;\n  levelForPadding: number;\n  parentIdForDisplay: string;\n  parentIds: IEntryIds;\n}\n\nexport interface IEntryIds {\n  id: string;\n  externalId: string;\n}\n\nexport interface IErrorDetail {\n  handledError: Error | HttpErrorResponse;\n  userActionOnError: EUserAction;\n}\n\nexport enum EUserAction {\n  TREE_ADD = 'treeAdd',\n  TREE_GET = 'treeGet',\n  TREE_DELETE = 'treeDelete',\n  TREE_UPDATE = 'treeUpdate',\n  TREE_MOVE_NODE = 'moveNode',\n  ARRAY_GET = 'arrayGet',\n  ARRAY_ADD = 'arrayAdd',\n  ARRAY_DELETE = 'arrayDelete',\n  ARRAY_SEARCH = 'arraySearch',\n  LIST_ADD = 'listAdd',\n  LIST_GET = 'listGet',\n  LIST_DELETE = 'listDelete',\n  LIST_UPDATE = 'listUpdate',\n  DETAIL_GET = 'detailGet',\n  DETAIL_GET_ARRAY = 'detailGetArray',\n  DETAIL_EDIT = 'detailEdit',\n  DETAIL_PATCH = 'detailPatch',\n  DETAIL_UPDATE_ARRAY = 'detailUpdateArray',\n  DETAIL_UPDATE_OTHER_RESOURCE = 'detailUpdateOtherResource',\n}\n\nexport interface IAdvancedSearchValues {\n  searchForm: string;\n  advancedSearchChips: IAdvancedSearchChip[];\n}\n\nexport interface IPersistentUiData extends IAdvancedSearchValues {\n  filterValue: string;\n  expandedTreeNodesUuids: string[];\n}\n\nexport interface IUiEntryIds extends IEntryIds {\n  label: string;\n}\n\nexport interface IDeleteSingleEntry {\n  entry: IUiEntryIds;\n  dialogRef?: MatDialogRef<unknown>;\n}\n\nexport interface IGenericArrayColumn {\n  id: string;\n  label?: string;\n  isBackendLinkObject?: boolean;\n  width?: string;\n  type?: string;\n}\n\nexport interface IDataTableRow {\n  [id: string]:\n    | any\n    | IDataTableCellElement[]\n    | IClickableDataTableCellElement[];\n}\n\nexport interface IDataSourceRow extends IDataTableRow {\n  isRowEditable: boolean;\n  selectionIds: IUiEntryIds;\n}\nexport interface IDataTableCellElement {\n  id: string;\n  value: string;\n  isClickable: boolean;\n}\n\nexport interface IClickableDataTableCellElement extends IDataTableCellElement {\n  routerLinkValue: string;\n}\n\nexport interface IArrayAttributeDoingRequest {\n  idField: string;\n  attributeConfig: IAttribute;\n  getDataListParams: IGetDataListParams;\n  updateArrayAttributeParams: IArrayAttributeUpdateParams;\n  data: any[];\n}\n\nexport interface IEditableArrayProperties {\n  selectedEntryExternalId?: string;\n  selectedEntryParentExternalId?: string;\n}\n\nexport interface IAssignArrayViewProperties {\n  columns: IGenericArrayColumn[];\n  displayedColumns: string[];\n  name: string;\n  icon: string;\n  resourceTypeConfig: IConfig;\n  accessibility: IArrayAccessibility;\n  noFilterResult: string;\n}\n\nexport interface IRequestsProperties {\n  resourceTypeId: string;\n  valueForFilterRegex: string;\n  filtersRegex: string;\n}\n\nexport type ActionsTypes =\n  | IAddActionOnList\n  | IDeleteActionOnList\n  | IUpdateActionOnList\n  | IAddActionOnTree\n  | IDeleteActionOnTree\n  | IUpdateActionOnTree\n  | IMoveNodeActionOnTree;\n\nexport interface IActionOnList<T> {\n  actionType: T;\n}\n\nexport type IAddActionOnList = IActionOnList<EUserAction.LIST_ADD>;\n\nexport type IDeleteActionOnList = IActionOnList<EUserAction.LIST_DELETE>;\n\nexport type IUpdateActionOnList = IActionOnList<EUserAction.LIST_UPDATE>;\n\nexport interface IActionOnTree<T> {\n  actionType: T;\n  triggerNodeId: string;\n}\n\nexport interface IAddActionOnTree extends IActionOnTree<EUserAction.TREE_ADD> {\n  addedNode: IDataNode;\n  isAddingDifferentTypeChild?: boolean;\n}\n\nexport interface IDeleteActionOnTree\n  extends IActionOnTree<EUserAction.TREE_DELETE> {\n  removedNodesIds: string[];\n  hasRemovedSelectedNode: boolean;\n}\n\nexport interface IUpdateActionOnTree\n  extends IActionOnTree<EUserAction.TREE_UPDATE> {\n  newNodeName?: string;\n  newNodeExternalId?: string;\n}\n\nexport interface IMoveNodeActionOnTree\n  extends IActionOnTree<EUserAction.TREE_MOVE_NODE> {\n  destinationNode: IDataNode;\n  hasMovedSelectedNode: boolean;\n}\n\nexport interface IFlatDataNode extends IDataNode {\n  expandable: boolean;\n  level: number;\n}\n\nexport interface IDataNodeIdsFields {\n  ids: IEntryIds;\n  name: string;\n  parentId: string;\n}\n\nexport enum EScimOperator {\n  EQ = 'eq',\n  NE = 'ne',\n  CO = 'co',\n  SW = 'sw',\n  EW = 'ew',\n  PR = 'pr',\n  GT = 'gt',\n  GE = 'ge',\n  LT = 'lt',\n  LE = 'le',\n}\n\nexport type DetailDataValueTypes =\n  | string\n  | boolean\n  | string[]\n  | IDataDetailResource\n  | IDataDetailResource[];\n\nexport interface IDataDetailResource {\n  id: string;\n  value: string;\n  isClickable: boolean;\n}\n\nexport interface IDataDetail {\n  id: string;\n  isVisible: boolean;\n  isBackendLinkObject: boolean;\n  isExternalLink: boolean;\n  isMultiple: boolean;\n  componentName: string;\n  icon: string;\n  label: {\n    long: string;\n    short: string;\n  };\n  dataValue: DetailDataValueTypes;\n  booleanDisplayedValue?: string;\n}\n\nexport const CHECK_ATTRIBUTE_PRESENCE = 'CHECK_ATTRIBUTE_PRESENCE';\n\nexport interface IClickableDataDetailResource extends IDataDetailResource {\n  routerLinkValue: string;\n}\n\nexport interface IEditSingleDataSourceRow {\n  row: IDataSourceRow;\n  dialogRef?: MatDialogRef<unknown>;\n}\n\nexport interface IDeleteMultipleEntries {\n  entries: IUiEntryIds[];\n  dialogRef?: MatDialogRef<unknown>;\n}\n\nexport interface IEditMultipleDataSourceRow {\n  rows: IDataSourceRow[];\n  dialogRef?: MatDialogRef<unknown>;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { IBtnLabel } from './configs.interface';\nimport {\n  IDataItem,\n  IDataNode,\n  IDataSourceRow,\n  ILink,\n  IUiEntryIds,\n} from './data.interface';\nimport { FormFieldsExtendedSingleTypes } from './form.interface';\n\nexport interface IAdvancedSearchChip {\n  modelRef: string;\n  displayedContent: string;\n  value: string | boolean | ILink;\n  associatedFieldId?: string;\n}\n\nexport enum EUIComponent {\n  DATA_DETAIL = 'data-detail',\n  ARRAY_DATA = 'array-data',\n  LIST_DATA = 'list-data',\n  TREE_DATA = 'tree-data',\n}\n\nexport enum EEllipsisMenuActions {\n  ADD = 'add',\n  ADD_CHILDREN = 'addChildren',\n  DELETE = 'delete',\n  DELETE_CHILD = 'deleteChild',\n  DELETE_CHILDREN = 'deleteChildren',\n  SINGLE_DELETE = 'singleDelete',\n  MULTIPLE_DELETE = 'multipleDelete',\n  SINGLE_UNASSIGN = 'singleUnassign',\n  MULTIPLE_UNASSIGN = 'multipleUnassign',\n  SINGLE_REASSIGN = 'singleReassign',\n  MULTIPLE_REASSIGN = 'multipleReassign',\n  SINGLE_EDIT = 'singleEdit',\n  MULTIPLE_EDIT = 'multipleEdit',\n  EXPORT = 'export',\n  MOVE_NODE = 'moveNode',\n}\n\nexport enum EUpdateOperations {\n  ADD = 'add',\n  REMOVE = 'remove',\n  EDIT = 'edit',\n}\n\nexport interface IAssignElements {\n  selectedElements: (IDataSourceRow | IDataNode)[];\n  formValues?: { [id: string]: FormFieldsExtendedSingleTypes };\n}\n\nexport interface IMoveElements {\n  selectedNode: IDataNode;\n  selectedItem: IDataItem;\n  selectedElementsUiIds: IUiEntryIds[];\n  dialogRef?: MatDialogRef<unknown>;\n}\n\nexport enum ETreeSelectMode {\n  SINGLE = 'single',\n  MULTIPLE = 'multiple',\n}\n\nexport interface IMoveDataNode {\n  destinationNode: IDataNode;\n  dialogRef?: MatDialogRef<unknown>;\n}\n\nexport type ScreenSize =\n  | ''\n  | 'xs'\n  | 'sm'\n  | 'md'\n  | 'lg'\n  | 'xl'\n  | 'lt-sm'\n  | 'lt-md'\n  | 'lt-lg'\n  | 'lt-xl'\n  | 'gt-xs'\n  | 'gt-sm'\n  | 'gt-md'\n  | 'gt-lg';\n\nexport interface IEllipsisBtn extends IBtnLabel {\n  canBeDisabled: boolean;\n}\n\nexport interface IEllipsisMenuOptions {\n  canDelete?: boolean;\n  canMove?: boolean;\n  canCreateChild?: boolean;\n  isForRow?: boolean;\n}\n\nexport interface IEllipsisMenu {\n  [btnId: string]: IEllipsisBtn;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { ISelectOption } from './form.interface';\n\n/**\n * This is the interface of the object retrieves from config rest endpoint.\n * Each id is an LDAP type, associated to the configuration retrieves from backend configuration file.\n */\nexport interface IConfigs\n  extends ICurrentUser,\n    IExternalLinks,\n    IHomepageDetail,\n    IHeaderDetail,\n    IGenericErrorMessages,\n    IGenericAccessibility,\n    ILogoutDialogDetail {\n  [id: string]:\n    | IConfig\n    | ICurrentUserConfig\n    | IExternalLinksConfig\n    | IHomepageConfig\n    | IHeaderConfig\n    | ILogoutDialogConfig\n    | IGenericErrorMessagesConfig\n    | IGenericAccessibilityConfig;\n}\n\nexport interface IExternalLinks {\n  externalLinks?: IExternalLinksConfig;\n}\n\nexport interface IHomepageDetail {\n  home: IHomepageConfig;\n}\n\nexport interface IHeaderDetail {\n  header: IHeaderConfig;\n}\n\nexport interface ICurrentUser {\n  currentUser: ICurrentUserConfig;\n}\n\nexport interface IGenericErrorMessages {\n  genericErrorMessages: IGenericErrorMessagesConfig;\n}\n\ninterface IGenericAccessibility {\n  genericAccessibility: IGenericAccessibilityConfig;\n}\n\nexport interface IGenericAccessibilityConfig {\n  advancedSearch: IAdvancedSearchAccessibility;\n  form: IFormAccessibility;\n  filter: IFilterAccessibility;\n  array: IArrayGenericAccessibility;\n  searchBar: ISearchBarAccessibility;\n  detailHeader: IDetailHeaderAccessibility;\n  notFound: INotFoundAccessibility;\n}\n\nexport interface IFormAccessibility {\n  requiredFieldsMsg: string;\n  requiredFieldsTitle: string;\n  searchBtn: IBtnDetail;\n  cancelBtn: IBtnDetail;\n  createBtn: IBtnDetail;\n  saveEditBtn: IBtnDetail;\n}\n\nexport interface IFilterAccessibility {\n  label: string;\n  clearSearch: string;\n}\n\nexport interface ISearchBarAccessibility extends IFilterAccessibility {\n  hint: string;\n}\n\nexport interface IAdvancedSearchAccessibility extends ISearchBarAccessibility {\n  activatedSearchHint: string;\n  displayAdvancedSearchMenu: string;\n}\n\nexport interface IArrayGenericAccessibility {\n  actionsColumnLabel: string;\n  actionsColumn: string;\n  actionsMenu: string;\n  selectColumn: string;\n  selectRow: string;\n  singleSelection: string;\n  singleSelectionLabel: string;\n  singleDeselectionLabel: string;\n  multipleSelection: string;\n  multipleSelectionLabel: string;\n  multipleDeselectionLabel: string;\n  columnHeader: string;\n  cell: string;\n}\n\nexport interface IDetailHeaderAccessibility {\n  backBtnAriaLabel: string;\n}\n\nexport interface INotFoundAccessibility {\n  notFoundLogoAlt: string;\n  notFoundDetailmsg: string;\n}\n\nexport interface IBtnDetail {\n  ariaLabel: string;\n  label: string;\n  progressLabel?: string;\n}\n\nexport interface ILogoutDialogDetail {\n  logoutDialog: ILogoutDialogConfig;\n}\n\nexport interface ILogoutDialogConfig {\n  title: string;\n  content: string;\n  logoutBtn: IBtnDetail;\n  cancelBtn: IBtnDetail;\n}\n\nexport enum EResourceComponent {\n  ARRAY = 'array',\n  LIST = 'list',\n  TREE = 'tree',\n}\n\nexport interface IProps {\n  columns?: IColumn[];\n  parent?: string;\n  filterOnExternalId?: boolean;\n}\n\nexport interface ITitle {\n  title: string;\n  placeholder?: string;\n  noSearchResult?: string;\n  noFilterResult?: string;\n  fieldForTitle?: string;\n}\n\nexport interface INotification {\n  successNotification?: string;\n  successNotificationMoreThan1?: string;\n  successNotificationMoreThan3?: string;\n}\n\nexport interface IBtnLabel extends ITitle, INotification {\n  btnLabel: string;\n  icon?: string;\n  dialogConfirmBtn?: string;\n  dialogCancelBtn?: string;\n  dialogPreviousStepBtn?: string;\n  dialogNextStepBtn?: string;\n  dialogMoveToRootBtn?: string;\n  dialogMoveToAnotherEntryBtn?: string;\n}\n\ninterface ISearchActionLabels {\n  noResult: string;\n}\n\nexport interface ISearchAction {\n  filter: ISearchActionLabels;\n  advancedSearch?: ISearchActionLabels;\n}\n\nexport interface IPrimitiveActions {\n  add?: IBtnLabel;\n  addChildren?: IBtnLabel;\n  edit: IBtnLabel;\n  noSelectedElement?: ITitle;\n  delete?: IBtnLabel;\n  deleteChild?: IBtnLabel;\n  deleteChildren?: IBtnLabel;\n  singleDelete?: IBtnLabel;\n  moveNode?: IBtnLabel;\n  multipleDelete?: IBtnLabel;\n  export?: IBtnLabel;\n  validate?: IBtnLabel;\n  decline?: IBtnLabel;\n  search?: ISearchAction;\n}\n\nexport interface IAttributeActions {\n  assign?: IBtnLabel;\n  singleReassign?: IBtnLabel;\n  multipleReassign?: IBtnLabel;\n  singleUnassign?: IBtnLabel;\n  multipleUnassign?: IBtnLabel;\n  singleEdit?: IBtnLabel;\n  multipleEdit?: IBtnLabel;\n  singleDelete?: IBtnLabel;\n  multipleDelete?: IBtnLabel;\n  export?: IBtnLabel;\n  search?: ISearchAction;\n}\n\nexport interface IAllAttributesActions {\n  [id: string]: IAttributeActions;\n}\n\nexport interface IActions {\n  primitives: IPrimitiveActions;\n  attributes: IAllAttributesActions;\n}\n\nexport interface IAccessibility {\n  array?: IArrayAccessibility;\n  tree?: ITreeAccessibility;\n}\n\nexport interface ITreeAccessibility {\n  test: string;\n}\n\nexport interface IConfig {\n  level?: number;\n  icon?: string;\n  path?: string;\n  label: string;\n  component?: EResourceComponent;\n  hasAdvancedSearch?: boolean;\n  props?: IProps;\n  actions?: IActions;\n  accessibility?: IAccessibility;\n  attributes?: IAttribute[];\n  canCreate?: boolean;\n}\n\nexport interface ISelectProps {\n  options: ISelectOption[];\n}\n\n/**\n * This is the interface of a LDAP type attribute configuration\n */\nexport interface IAttribute {\n  /** Attribute id */\n  modelRef: string;\n  getValuesParams?: IRequestParams;\n  getDataListParams?: IGetDataListParams;\n  updateArrayAttributeParams?: IArrayAttributeUpdateParams;\n  /** Allow to know if the attribute can be use to retrieve data detail */\n  keyForDetail?: boolean;\n  isDetailTitle?: boolean;\n  props: {\n    isMultiple: boolean;\n    isSearchable: boolean;\n    isVisible: boolean;\n    scimParentAttribute?: string;\n    isUsingDataFromBackend?: boolean;\n    isAddedAttributeArray?: boolean;\n    isMandatory?: boolean;\n    isEditable?: boolean;\n    isTreeNodeName?: boolean;\n    isListItemName?: boolean;\n    isInCreateForm?: boolean;\n    isNotVisibleWhenFalse?: boolean;\n    isNotEditableWhenTrue?: boolean;\n    isBackendLinkObject?: boolean;\n    isSentOnUpdate?: boolean;\n    isConcatWithPreviousValue?: boolean;\n    isExternalLink?: boolean;\n    canLabelContainSlash?: boolean;\n  };\n  /** Properties for the associated form field */\n  value: {\n    /** Properties for the form field label */\n    label: {\n      id: string;\n      props: any;\n      value: ILabelValues;\n    };\n    /** Properties for the form field control */\n    field: {\n      id: string;\n      componentName: string;\n      props: {\n        disabled: boolean;\n        required: boolean;\n        placeholder?: string;\n        type?: string;\n        min?: number;\n        maxlength?: number;\n        columns?: IColumn[];\n        accessibility?: IArrayAccessibility;\n        keyForSquash?: string;\n        displayedValue?: { true: string; false: string };\n        convertToString?: boolean;\n        trueConditionValue?: string;\n        falseConditionValue?: string;\n        emptyArrayPlaceholder?: string;\n        addOnBlur?: boolean;\n        removable?: boolean;\n        autocomplete?: string;\n        isInteger?: boolean;\n        linkedToFields?: string[];\n        format?: string[];\n        invalidCharacters?: string[];\n        validCharacters?: string[];\n        regexValidator?: string;\n        regexInput?: string;\n      };\n      nestedComponent?: {\n        id: string;\n        props?: INestedComponentProps;\n      };\n      selectOption?: {\n        id: string;\n        props?: ISelectProps;\n      };\n    };\n    icon: {\n      id: string;\n      props?: any;\n      value: string;\n    };\n    hint: {\n      id: string;\n      props?: any;\n      value: string;\n    };\n    error: {\n      id: string;\n      props?: any;\n      value: {\n        required: string;\n        incorrect?: string;\n        email?: string;\n        isNotAValidDate?: string;\n        isNotInteger?: string;\n        isNotValidFormat?: string;\n        pattern?: string;\n        min?: string;\n      };\n    };\n  };\n}\n\nexport interface IRequestParams {\n  requestTarget: string;\n  requestResourceTypeId: string;\n}\n\nexport interface IGetDataListParams extends IRequestParams {\n  regexFilter: string;\n  fieldForRegexValue?: string;\n  fieldForUpdate?: string;\n}\n\nexport interface IEditParams {\n  columnId: string;\n  props: {\n    type: string;\n    label: string;\n    min?: number;\n    isInteger?: boolean;\n    invalidCharacters?: string[];\n  };\n}\n\nexport interface IArrayAttributeUpdateActionParams {\n  assign?: IAssignParams;\n  reassign?: IReassignParams;\n  edit?: IEditParams;\n}\n\nexport interface IReassignParams {\n  resourceTypeComponent: EResourceComponent;\n}\n\nexport interface IArrayAttributeUpdateParams\n  extends IArrayAttributeUpdateActionParams {\n  updateAffectAnotherResourceType?: boolean;\n  patchOperationsParams?: IPatchOperationsParams;\n  selectionColumnId?: string;\n}\n\nexport interface IPatchOperationsParams {\n  add: string;\n  remove: string;\n}\n\nexport interface ILabelValues {\n  short: string;\n  long: string;\n  onCreate?: string;\n  addNew?: string;\n  edit?: string;\n  remove?: string;\n}\n\nexport interface IColumn {\n  id: string;\n  width: string;\n  label?: string;\n  isBackendLinkObject?: boolean;\n  type?: string;\n  keyForDetail?: boolean;\n  idForSearch?: string;\n}\n\nexport interface IArrayAccessibility {\n  table: string;\n  headerRow: string;\n  row: string;\n  emptyArrayPlaceholder?: string;\n}\n\nexport interface INestedComponentProps {\n  options: {\n    [resourceTypeId: string]: {\n      valuesField: string;\n      optionsField: string[];\n    };\n  };\n  limit: number;\n  offset: number;\n}\n\nexport interface IAssignParams {\n  requestedResourceTypeId?: string;\n  assignedResourceTypeId?: string;\n  resourceTypeComponent: EResourceComponent;\n  fieldForUpdate?: string;\n  isMultipleStepsAssign?: boolean;\n  nbSteps?: number;\n  browseBtnsLabels?: {\n    previous: string;\n    next: string;\n  };\n}\n\nexport interface IGenericErrorMessagesConfig {\n  errorRouteMsg: string;\n  unavailableHomepageMsg: string;\n  notFoundTabTitle: string;\n  noInternetConnection: string;\n  unreachableServer: string;\n  notFound: string;\n  missingKeyForDetail: string;\n}\n\nexport interface ICurrentUserConfig {\n  id: string;\n  userName: string;\n  displayName: string;\n  photo?: string;\n  canAssignOrMove: string[];\n}\n\nexport interface IExternalLink {\n  label: string;\n  link: string;\n  icon: string;\n  ariaLabel: string;\n}\n\nexport interface IExternalLinksConfig {\n  userGuide: IExternalLink;\n  rgaaChart: IExternalLink;\n}\n\nexport interface IHeaderLogoBtn {\n  path: string;\n  alt: string;\n  ariaLabel: string;\n  label?: string;\n}\n\nexport interface IHeaderLogo {\n  path: string;\n  alt: string;\n}\n\nexport interface ISidenavBtn {\n  ariaControls: string;\n  ariaLabel: {\n    collapsed: string;\n    expanded: string;\n  };\n}\n\nexport interface IAccountDiv {\n  labelPrefix: string;\n  ariaLabelPrefix: string;\n  altPrefix: string;\n}\n\nexport interface ITabProps {\n  title: string;\n}\n\nexport interface IHeaderConfig {\n  logoBtn: IHeaderLogoBtn;\n  logo: IHeaderLogo;\n  logo1: IHeaderLogo;\n  sidenavBtn: ISidenavBtn;\n  accountDiv: IAccountDiv;\n  profileBtn: IBtnDetail;\n  logoutBtn: IBtnDetail;\n  tab?: ITabProps;\n}\n\nexport interface IHomepageConfig {\n  tabTitle: string;\n  title: string;\n  subtitle: string;\n  linagoraLogoAlt: string;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { IGenericErrorMessagesConfig } from '../../interfaces/configs.interface';\nimport { EUserAction } from '../../interfaces/data.interface';\n\nexport class IsHandlingError {\n  static readonly type = '[Error] Is handling error';\n  constructor(public readonly payload: boolean) {}\n}\n\nexport class SetErrorDetail {\n  static readonly type = '[Error] Set error detail';\n  constructor(\n    public readonly payload: {\n      error: Error | HttpErrorResponse;\n      userActionOnError: EUserAction;\n    }\n  ) {}\n}\n\nexport class ResetErrorDetail {\n  static readonly type = '[Error] Reset error detail';\n  constructor() {}\n}\n\nexport class ResetLastError {\n  static readonly type = '[Error] Reset last error';\n  constructor() {}\n}\n\nexport class SetGenericErrorMessages {\n  static readonly type = '[Error] Set generic error messages';\n  constructor(public readonly payload: IGenericErrorMessagesConfig) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport {\n  EResourceComponent,\n  IAttribute,\n  IColumn,\n  IConfig,\n} from '../interfaces/configs.interface';\nimport {\n  EComponentName,\n  EUserAction,\n  IData,\n  IFormData,\n} from '../interfaces/data.interface';\nimport {\n  IClickableCellsEndpoints,\n  IResourceType,\n  IResourceTypeRequestDetail,\n} from '../interfaces/resources-types.interface';\nimport { EUpdateOperations } from '../interfaces/ui.interface';\nimport { DataService } from '../services/data.service';\nimport { JsTable } from './jstable.helper';\nimport { getSearchRequestScimBody } from './search.helper';\n\nexport function getRouterLinkValue(\n  endpoint: string,\n  label: string,\n  parentEndpoint: string = null,\n  parentLabel: string = null\n): string {\n  let link = '/home/';\n  if (!!parentEndpoint) {\n    link = link.concat(\n      parentEndpoint,\n      '/',\n      cleanLabel(parentLabel, false),\n      '/'\n    );\n  }\n  link = link.concat(endpoint, '/', cleanLabel(label, parentEndpoint != null));\n  return link;\n}\n\nfunction cleanLabel(label: string, isChildResourceType: boolean): string {\n  let cleanedLabel = label\n    .toLocaleLowerCase()\n    .replace(/\\s\\/\\s/g, '/')\n    .trim();\n  return isChildResourceType ? encodeURIComponent(cleanedLabel) : cleanedLabel;\n}\n\nexport function getResponseAttributesIds(\n  resourceTypeConfig: IConfig = null,\n  resourceTypeId: string = null,\n  fieldConfig: IFormData | IAttribute = null\n): string[] {\n  if (resourceTypeConfig !== null) {\n    if (resourceTypeConfig.component === EResourceComponent.ARRAY) {\n      return resourceTypeConfig.props.columns.map(\n        (column: IColumn) => column.id\n      );\n    } else if (resourceTypeConfig.component === EResourceComponent.TREE) {\n      return resourceTypeConfig.attributes.reduce(\n        (acc, currAttribute) =>\n          currAttribute.props.isTreeNodeName\n            ? [...acc, currAttribute.modelRef]\n            : acc,\n        []\n      );\n    }\n  } else if (fieldConfig !== null) {\n    if (fieldConfig.value.field.componentName === EComponentName.array) {\n      return fieldConfig.value.field.props.columns.map(\n        (column: IColumn) => column.id\n      );\n    } else {\n      let attributesIds: string[] = [];\n      if (!!fieldConfig.value.field.nestedComponent) {\n        const resourceTypeOptions: {\n          valuesField: string;\n          optionsField: string[];\n        } =\n          fieldConfig.value.field.nestedComponent.props.options[resourceTypeId];\n        attributesIds = [\n          ...new Set<string>([\n            resourceTypeOptions.valuesField,\n            ...resourceTypeOptions.optionsField,\n          ]),\n        ];\n      }\n      return attributesIds;\n    }\n  }\n}\n\nexport function getClickableCellsEndpoints(\n  resourcesTypes: JsTable<IResourceType>,\n  configsIds: string[],\n  selectedResourceTypeConfig: IConfig\n): JsTable<string> {\n  const byId =\n    selectedResourceTypeConfig.component === EResourceComponent.ARRAY\n      ? selectedResourceTypeConfig?.props?.columns.reduce(\n          (acc, column) =>\n            column.isBackendLinkObject &&\n            resourcesTypes.allIds.includes(column.type) &&\n            configsIds.includes(column.type)\n              ? {\n                  ...acc,\n                  [column.id]: resourcesTypes.byId[column.type].endpoint,\n                }\n              : acc,\n          {} as IClickableCellsEndpoints\n        )\n      : {};\n  return {\n    byId,\n    allIds: Object.keys(byId),\n  };\n}\n\nexport function toScimPropertiesPatch(\n  path: string[],\n  ids: string[],\n  operation: string\n): any {\n  const operations: {\n    op: string;\n    path: string;\n    value?: string;\n  }[] = ids.map((id, index) =>\n    Object.assign(\n      {},\n      {\n        op: operation,\n        path: path[index],\n      },\n      operation !== EUpdateOperations.REMOVE\n        ? {\n            value: id,\n          }\n        : {}\n    )\n  );\n  return {\n    schemas: ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],\n    Operations: operations,\n  };\n}\n\nexport function getRequestsDetails(\n  selectedResourceTypeId: string,\n  configs: JsTable<IConfig>,\n  resourcesTypes: JsTable<IResourceType>,\n  lastResourceTypeId?: string\n): IResourceTypeRequestDetail[] {\n  const requestDetail: IResourceTypeRequestDetail[] = [\n    {\n      endpoint: resourcesTypes.byId[selectedResourceTypeId].endpoint,\n      resourceTypeId: selectedResourceTypeId,\n    },\n  ];\n  const childId: string = configs.allIds.find(\n    (resourceTypeId: string) =>\n      configs.byId[resourceTypeId].props?.parent === selectedResourceTypeId\n  );\n\n  if (selectedResourceTypeId !== lastResourceTypeId && !!childId) {\n    requestDetail.push(...getRequestsDetails(childId, configs, resourcesTypes));\n  }\n  return requestDetail;\n}\n\nexport function getUserActionOnResourceRequest(\n  resourceComponent: EResourceComponent\n): EUserAction {\n  let userAction: EUserAction;\n  switch (resourceComponent) {\n    case EResourceComponent.ARRAY:\n      userAction = EUserAction.ARRAY_GET;\n      break;\n    case EResourceComponent.TREE:\n      userAction = EUserAction.TREE_GET;\n      break;\n    case EResourceComponent.LIST:\n      userAction = EUserAction.LIST_GET;\n      break;\n    default:\n      break;\n  }\n  return userAction;\n}\n\nexport function resourceRequest(\n  filterScim: string,\n  requestDetail: IResourceTypeRequestDetail,\n  responseAttributesIds: string[],\n  dataService: DataService\n): Observable<IData | HttpResponse<IData> | HttpErrorResponse> {\n  if (!!filterScim) {\n    return dataService.search(\n      requestDetail.endpoint,\n      filterScim,\n      true,\n      getSearchRequestScimBody(responseAttributesIds)\n    );\n  } else {\n    return dataService.getDataList(requestDetail.endpoint, {\n      attributes: responseAttributesIds,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Store } from '@ngxs/store';\nimport _ from 'lodash';\nimport { Observable, catchError } from 'rxjs';\nimport { setActionsTitlesVariables } from '../helpers/configs.helper';\nimport {\n  DataViewProperties,\n  canDeleteEntries,\n  getViewPropertiesArrayAttribute,\n} from '../helpers/data-table.helper';\nimport { JsTable } from '../helpers/jstable.helper';\nimport {\n  IActions,\n  IArrayAttributeUpdateParams,\n  IAttribute,\n  IAttributeActions,\n  IColumn,\n  IConfig,\n  IGetDataListParams,\n} from '../interfaces/configs.interface';\nimport {\n  EUserAction,\n  IArrayAttributeDoingRequest,\n  IClickableDataDetailResource,\n  IData,\n  IDataDetailResource,\n  IDataNode,\n  IDataSourceRow,\n  IDataTableRow,\n  IEditableArrayProperties,\n  IGenericArrayColumn,\n  ILink,\n  IRequestsProperties,\n  IUiEntryIds,\n} from '../interfaces/data.interface';\nimport { FormFieldsExtendedSingleTypes } from '../interfaces/form.interface';\nimport { IResourceType } from '../interfaces/resources-types.interface';\nimport { IAssignElements, IMoveElements } from '../interfaces/ui.interface';\nimport { DataService } from '../services/data.service';\nimport { ErrorsHandlerService } from '../services/errors-handler.service';\nimport * as Error from '../states/error/error.actions';\nimport {\n  getResponseAttributesIds,\n  getRouterLinkValue,\n} from './resources.helper';\n\nexport class DisplayedDetailArray {\n  public attributeId: string;\n  public isEditableArray: boolean;\n  public label: string;\n  public icon: string;\n  public emptyArrayPlaceholder: string;\n  public viewProperties: DataViewProperties;\n  public actions: IAttributeActions;\n  public resourceTypeConfig: IConfig;\n  public typesLabels: string;\n  public selectedElementsUiIds: IUiEntryIds[];\n  public succeededElements: (IUiEntryIds | IDataSourceRow | IDataNode)[];\n  public failedElements404: (IUiEntryIds | IDataSourceRow | IDataNode)[];\n  public endpoint: string;\n  public updateParams: IArrayAttributeUpdateParams;\n  public initialSource: any[];\n  public associatedData: {\n    [attributeId: string]: IData;\n  };\n  public requestsParams: IGetDataListParams;\n  public updateAffectAnotherResourceType: boolean;\n  public fieldForUpdate: string;\n  public canDeleteEntries = false;\n\n  constructor(\n    selectedResourceTypeId: string,\n    configs: JsTable<IConfig>,\n    attributeAsArray: IArrayAttributeDoingRequest,\n    resourceTypeId: string[]\n  );\n  constructor(\n    selectedResourceTypeId: string,\n    configs: JsTable<IConfig>,\n    attributeAsArray: IArrayAttributeDoingRequest,\n    resourcesTypesIds: string[],\n    dataResourcesAsFlatArray: any[] | IDataTableRow[]\n  );\n  constructor(\n    selectedResourceTypeId: string,\n    configs: JsTable<IConfig>,\n    attributeAsArray: IArrayAttributeDoingRequest,\n    resourcesTypesIds: string[],\n    dataResourcesAsFlatArray: any[] | IDataTableRow[],\n    editableArrayProperties: IEditableArrayProperties\n  );\n  constructor(\n    selectedResourceTypeId: string,\n    configs: JsTable<IConfig>,\n    attributeAsArray: IArrayAttributeDoingRequest,\n    resourcesTypesIds: string[],\n    dataResourcesAsFlatArray: any[] | IDataTableRow[],\n    editableArrayProperties: IEditableArrayProperties,\n    isEditableAttribute: boolean\n  );\n  constructor(\n    selectedResourceTypeId: string,\n    configs: JsTable<IConfig>,\n    attributeAsArray: IArrayAttributeDoingRequest,\n    resourcesTypesIds: string[],\n    dataResourcesAsFlatArray?: any[] | IDataTableRow[],\n    editableArrayProperties?: IEditableArrayProperties,\n    isEditableAttribute?: boolean\n  ) {\n    const attributeConfig: IAttribute = configs.byId[\n      selectedResourceTypeId\n    ].attributes.find(\n      (attribute) => attribute.modelRef === attributeAsArray.idField\n    );\n\n    const arrayResourceTypeId: string =\n      attributeAsArray.getDataListParams?.requestResourceTypeId;\n\n    const isClickableRow = !!attributeAsArray.getDataListParams;\n\n    const attributeViewProperties: DataViewProperties = new DataViewProperties(\n      getViewPropertiesArrayAttribute(attributeConfig, isClickableRow)\n    );\n\n    let actions: IActions = configs.byId[selectedResourceTypeId].actions;\n    this.actions = {\n      search: actions.attributes[attributeAsArray.idField].search,\n    };\n\n    attributeViewProperties.setDataSource(\n      new MatTableDataSource(dataResourcesAsFlatArray)\n    );\n\n    this.attributeId = attributeAsArray.idField;\n    this.initialSource = dataResourcesAsFlatArray || [];\n    this.requestsParams = attributeAsArray.getDataListParams;\n\n    this.isEditableArray =\n      attributeConfig.props.isEditable &&\n      (isEditableAttribute || attributeConfig.props.isAddedAttributeArray);\n\n    this.label = attributeConfig.value.label.value.long;\n    this.emptyArrayPlaceholder =\n      attributeConfig.value.field.props.emptyArrayPlaceholder;\n    this.viewProperties = attributeViewProperties;\n    this.icon = attributeConfig.value.icon.value;\n\n    if (arrayResourceTypeId) {\n      this.icon = configs.byId[arrayResourceTypeId].icon;\n      if (isClickableRow) {\n        this.endpoint = attributeAsArray.getDataListParams?.requestTarget;\n      }\n    }\n    if (this.isEditableArray) {\n      this.selectedElementsUiIds = [];\n      this.succeededElements = [];\n      this.failedElements404 = [];\n      this.updateAffectAnotherResourceType =\n        attributeConfig.updateArrayAttributeParams\n          ?.updateAffectAnotherResourceType || false;\n      this.fieldForUpdate = attributeConfig.getDataListParams.fieldForUpdate;\n      this.updateParams = attributeAsArray.updateArrayAttributeParams;\n      this.actions = {\n        ...this.actions,\n        ...setActionsTitlesVariables(\n          [\n            editableArrayProperties.selectedEntryExternalId,\n            editableArrayProperties.selectedEntryParentExternalId,\n          ],\n          actions.attributes[attributeAsArray.idField]\n        ),\n      };\n      this.canDeleteEntries = canDeleteEntries(\n        this.actions,\n        dataResourcesAsFlatArray?.some(\n          (row: any | IDataTableRow) => row.meta?.isDeletable\n        )\n      );\n    }\n\n    this.resourceTypeConfig = configs.byId[arrayResourceTypeId];\n\n    this.typesLabels =\n      resourcesTypesIds.length > 1\n        ? this.label\n        : configs.byId[resourcesTypesIds[0]].label;\n  }\n}\n\n//TODO Adapat this method for IClickableDataTableCellElement with more than two columns\nexport function convertDataNodeToDataSourceRow(\n  node: IDataNode,\n  columns: IGenericArrayColumn[],\n  resourceTypes: JsTable<IResourceType>,\n  isClickable = true\n): IDataSourceRow {\n  const columnsResourcesTypesIds: string[] = _.intersection(\n    columns.map((column: IGenericArrayColumn) => column.id),\n    resourceTypes.allIds\n  );\n  return columnsResourcesTypesIds.reduce(\n    (acc, columnId, index) => ({\n      ...acc,\n      [columnId]: [\n        {\n          id:\n            index === 0 && columnsResourcesTypesIds.length > 1\n              ? node.parentIds.id\n              : node.ids.id,\n          value:\n            index === 0 && columnsResourcesTypesIds.length > 1\n              ? node.parentIds.externalId\n              : node.ids.externalId,\n          isClickable,\n          routerLinkValue: getRouterLinkValue(\n            resourceTypes.byId[columnsResourcesTypesIds[index]].endpoint,\n            node.ids.externalId,\n            index > 0\n              ? resourceTypes.byId[columnsResourcesTypesIds[index - 1]].endpoint\n              : null,\n            index > 0 ? node.parentIds.externalId : null\n          ),\n        },\n      ],\n    }),\n    {\n      selectionIds: { ...node.ids, label: node.name },\n      isRowEditable: false,\n    }\n  );\n}\n\nexport function getArrayAttributeDoingRequestsDetail(\n  attributeConfig: IAttribute,\n  data: any[]\n): IArrayAttributeDoingRequest {\n  return {\n    idField: attributeConfig.modelRef,\n    attributeConfig,\n    getDataListParams: attributeConfig.getDataListParams || null,\n    updateArrayAttributeParams:\n      attributeConfig.updateArrayAttributeParams || null,\n    data,\n  };\n}\n\nexport function getArrayAttributeResourcesTypesIds(\n  attributeConfig: IAttribute\n): string[] {\n  let resourceTypesIds: string[];\n  if ('getDataListParams' in attributeConfig) {\n    resourceTypesIds = [\n      attributeConfig.getDataListParams.requestResourceTypeId,\n    ];\n  } else {\n    resourceTypesIds = attributeConfig.value.field.props.columns.reduce(\n      (acc, column: IColumn) => (column.type ? [...acc, column.type] : acc),\n      []\n    );\n  }\n  return resourceTypesIds;\n}\n\nexport function getAttributeValues(\n  requestsProperties: IRequestsProperties,\n  dataService: DataService,\n  errorsHandlerService: ErrorsHandlerService,\n  attributeDoingRequestsDetails: IArrayAttributeDoingRequest,\n  store: Store,\n  attributeConfig: IAttribute\n): Observable<IData | Error | HttpErrorResponse> {\n  let responseAttributesIds = getResponseAttributesIds(\n    null,\n    requestsProperties.resourceTypeId,\n    attributeConfig\n  );\n  return dataService\n    .getDataListWithParameteredFilter(\n      attributeDoingRequestsDetails.getDataListParams.requestTarget,\n      requestsProperties.valueForFilterRegex,\n      requestsProperties.filtersRegex,\n      responseAttributesIds,\n      attributeDoingRequestsDetails.updateArrayAttributeParams\n        ?.updateAffectAnotherResourceType\n    )\n    .pipe(\n      catchError((err) => {\n        store.dispatch([\n          new Error.SetErrorDetail({\n            error: err,\n            userActionOnError: EUserAction.DETAIL_GET_ARRAY,\n          }),\n          new Error.IsHandlingError(true),\n        ]);\n        return errorsHandlerService.handleError(err);\n      })\n    );\n}\n\nexport function getElementId(\n  selectedElement: IUiEntryIds | IDataSourceRow | IDataNode\n): string {\n  if (isDataNode(selectedElement)) {\n    return (selectedElement as IDataNode).ids.id;\n  } else if (\n    'selectionIds' in selectedElement &&\n    selectedElement.selectionIds\n  ) {\n    return selectedElement.selectionIds.id;\n  } else {\n    return (selectedElement as IUiEntryIds).id;\n  }\n}\nexport function getDataSourceRowsWithAssociatedValue(\n  rows: IDataSourceRow[],\n  updateActionsParams: IArrayAttributeUpdateParams,\n  associatedValue: { [id: string]: FormFieldsExtendedSingleTypes }\n): IDataSourceRow[] {\n  return rows.map((row: IDataSourceRow) => ({\n    ...row,\n    [updateActionsParams.edit.columnId]: associatedValue[getElementId(row)],\n  }));\n}\n\nexport function isDataNode(element: any): boolean {\n  if (typeof element !== 'object') {\n    return false;\n  }\n\n  const nbFields: number = Object.keys(element).length;\n\n  const hasRequiredProperties =\n    'ids' in element &&\n    'name' in element &&\n    'link' in element &&\n    'type' in element &&\n    'childrenType' in element &&\n    'canDelete' in element &&\n    'levelForPadding' in element &&\n    'parentIdForDisplay' in element &&\n    'parentIds' in element &&\n    'expandable' in element &&\n    'canDelete' in element;\n\n  const hasAllIDataNodeProperties: boolean =\n    hasRequiredProperties && 'children' in element;\n\n  return (\n    (hasRequiredProperties && nbFields === 11) ||\n    (hasAllIDataNodeProperties && nbFields === 12)\n  );\n}\n\nexport function getElementExternalId(\n  selectedElement: IUiEntryIds | IDataSourceRow | IDataNode\n): string {\n  if (isDataNode(selectedElement)) {\n    return (selectedElement as IDataNode).ids.externalId;\n  } else if (\n    'selectionIds' in selectedElement &&\n    selectedElement.selectionIds\n  ) {\n    return selectedElement.selectionIds.externalId;\n  } else {\n    return (selectedElement as IUiEntryIds).externalId;\n  }\n}\n\nexport function getNotSelectedRows(\n  dataSource: IDataSourceRow[],\n  selectedElementsIds: string[]\n): IDataSourceRow[] {\n  return dataSource.filter(\n    (row: IDataSourceRow) => !selectedElementsIds.includes(row.selectionIds.id)\n  );\n}\n\nexport function getSelectedElements(\n  event: IMoveElements | IUiEntryIds[] | IAssignElements | IDataSourceRow[]\n): (IUiEntryIds | IDataSourceRow | IDataNode)[] {\n  if ('selectedElementsUiIds' in event && !!event.selectedElementsUiIds) {\n    return event.selectedElementsUiIds;\n  } else if ('selectedElements' in event && !!event.selectedElements) {\n    return event.selectedElements;\n  } else {\n    return event as IUiEntryIds[] | IDataSourceRow[];\n  }\n}\n\nexport function getElementLabel(\n  selectedElement: IUiEntryIds | IDataSourceRow | IDataNode\n): string {\n  if (isDataNode(selectedElement)) {\n    return (selectedElement as IDataNode).name;\n  } else if (\n    'selectionIds' in selectedElement &&\n    selectedElement.selectionIds\n  ) {\n    return selectedElement.selectionIds.label;\n  } else {\n    return (selectedElement as IUiEntryIds).label;\n  }\n}\n\nexport function setRequestsProperties(\n  attributeDoingRequests: IArrayAttributeDoingRequest,\n  selectedEntryId: string\n): IRequestsProperties {\n  let resourceTypeId =\n    attributeDoingRequests.getDataListParams.requestResourceTypeId;\n  let valueForFilterRegex: string = '\"' + selectedEntryId + '\"';\n  let filtersRegex = attributeDoingRequests.getDataListParams.regexFilter;\n  return {\n    resourceTypeId,\n    valueForFilterRegex,\n    filtersRegex,\n  };\n}\n\nexport function getElementIds(\n  selectedElement: IUiEntryIds | IDataSourceRow | IDataNode\n): IUiEntryIds {\n  return {\n    id: getElementId(selectedElement),\n    externalId: getElementExternalId(selectedElement),\n    label: getElementLabel(selectedElement),\n  };\n}\n\nfunction convertLinkToDataDetailResource(\n  data: ILink,\n  endpoint: string,\n  isAuthorizedEndpoint: boolean\n): IDataDetailResource | IClickableDataDetailResource {\n  let dataDetailResource: IDataDetailResource = {\n    id: data.id,\n    value: data.label,\n    isClickable: data.canBeRead && isAuthorizedEndpoint,\n  };\n  let clickableDataDetailResource: IClickableDataDetailResource = {\n    ...dataDetailResource,\n    routerLinkValue: getRouterLinkValue(endpoint, data.label),\n  };\n  return dataDetailResource.isClickable\n    ? clickableDataDetailResource\n    : dataDetailResource;\n}\n\nexport function setLinkAttributeResource(\n  data: ILink | ILink[],\n  endpoint: string,\n  authorizedEndpoints: string[]\n):\n  | IDataDetailResource\n  | IClickableDataDetailResource\n  | (IDataDetailResource | IClickableDataDetailResource)[] {\n  const isAuthorizedEndpoint: boolean = authorizedEndpoints.includes(endpoint);\n  if (Array.isArray(data)) {\n    return data.map((link: ILink) =>\n      convertLinkToDataDetailResource(link, endpoint, isAuthorizedEndpoint)\n    );\n  } else {\n    return convertLinkToDataDetailResource(\n      data,\n      endpoint,\n      isAuthorizedEndpoint\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  EResourceComponent,\n  IAttribute,\n  IAttributeActions,\n  IBtnLabel,\n  IConfig,\n} from '../interfaces/configs.interface';\nimport {\n  IDataNode,\n  IDataSourceRow,\n  IEntryIds,\n  IUiEntryIds,\n} from '../interfaces/data.interface';\nimport { IResourceType } from '../interfaces/resources-types.interface';\nimport { IResourceTypeRoutesRegExp } from '../interfaces/routing.interface';\nimport { EUpdateOperations } from '../interfaces/ui.interface';\nimport { getElementLabel } from './data-detail.helper';\nimport { JsTable } from './jstable.helper';\n\nexport function setActionsTitlesVariables(\n  values: string[],\n  actions: IAttributeActions\n): IAttributeActions {\n  const updatedActions: IAttributeActions = { ...actions };\n  for (const key in actions) {\n    if (\n      Object.prototype.hasOwnProperty.call(actions, key) &&\n      actions[key].title != null\n    ) {\n      updatedActions[key] = setActionTitleVariables(values, actions[key], key);\n    }\n  }\n  return updatedActions;\n}\n\nexport function setActionTitleVariables(\n  values: string[],\n  action: IBtnLabel,\n  actionId: string\n): IBtnLabel {\n  const updatedAction: IBtnLabel = { ...action };\n  const containMatchingRegex: RegExpMatchArray =\n    action.title.match(/\\$[0-9]+/g);\n  if (!!containMatchingRegex && containMatchingRegex.length > 0) {\n    containMatchingRegex.forEach((_: any, index: number) => {\n      const titleCurrentVariableIndex: number = index + 1;\n      let newValue = '';\n      if (actionId === 'export') {\n        newValue =\n          values[index].charAt(0).toLocaleUpperCase() + values[index].slice(1);\n      } else {\n        newValue = values[index];\n      }\n      updatedAction.title = updatedAction.title.replace(\n        '$' + titleCurrentVariableIndex,\n        newValue\n      );\n    });\n  }\n  return updatedAction;\n}\n\nexport function getActionType(\n  succeededElements: (IEntryIds | IDataSourceRow | IDataNode)[],\n  actions: IAttributeActions,\n  operationsTypes: string[]\n): IBtnLabel {\n  const reassignOperations: string[] = [\n    EUpdateOperations.REMOVE,\n    EUpdateOperations.ADD,\n  ];\n  const isMultiple: boolean = succeededElements.length > 1;\n  let btnLabel: IBtnLabel;\n  if (\n    reassignOperations.every((operationType: string) =>\n      operationsTypes.includes(operationType)\n    )\n  ) {\n    btnLabel = isMultiple ? actions.multipleReassign : actions.singleReassign;\n  } else if (operationsTypes.length === 1) {\n    switch (operationsTypes[0]) {\n      case EUpdateOperations.REMOVE:\n        btnLabel = isMultiple\n          ? actions.multipleUnassign ?? actions.multipleDelete\n          : actions.singleUnassign ?? actions.singleDelete;\n        break;\n      case EUpdateOperations.ADD:\n        btnLabel = actions.assign;\n        break;\n      case EUpdateOperations.EDIT:\n        btnLabel = isMultiple ? actions.multipleEdit : actions.singleEdit;\n        break;\n      default:\n        break;\n    }\n  }\n  return btnLabel;\n}\n\nexport function getScimParentsAndChildren(attributes: IAttribute[]): {\n  [id: string]: string[];\n} {\n  return attributes.reduce(\n    (acc, attribute) => {\n      if (\n        attribute.props.scimParentAttribute &&\n        attribute.props.scimParentAttribute !== null\n      ) {\n        const scimParentId: string = attribute.props.scimParentAttribute;\n        return {\n          ...acc,\n          [scimParentId]:\n            acc[scimParentId] &&\n            acc[scimParentId] !== null &&\n            acc[scimParentId].length > 0\n              ? [...acc[scimParentId], attribute.modelRef]\n              : [attribute.modelRef],\n        };\n      }\n      return acc;\n    },\n    {} as { [id: string]: string[] }\n  );\n}\n\nexport function getSucceededNotifications(\n  succeededElements: (IUiEntryIds | IDataSourceRow | IDataNode)[],\n  action: IBtnLabel\n): string {\n  let message = '';\n  let notificationVariableValue: string = null;\n  if (succeededElements.length === 1) {\n    notificationVariableValue = getElementLabel(succeededElements[0]);\n    message = action.successNotification.replace(\n      '$1',\n      notificationVariableValue\n    );\n  } else if (succeededElements.length > 1 && succeededElements.length < 4) {\n    notificationVariableValue = succeededElements\n      .map((element: IUiEntryIds | IDataSourceRow | IDataNode) =>\n        getElementLabel(element)\n      )\n      .join(', ');\n    message = action.successNotificationMoreThan1.replace(\n      '$1',\n      notificationVariableValue\n    );\n  } else if (succeededElements.length > 3) {\n    notificationVariableValue = succeededElements.length.toString();\n    message = action.successNotificationMoreThan3.replace(\n      '$1',\n      notificationVariableValue\n    );\n  }\n  return message;\n}\n\nexport function getUserInterfaceRoutesRegexp(\n  resourcesTypes: JsTable<IResourceType>,\n  configs: JsTable<IConfig>\n): {\n  [id: string]: IResourceTypeRoutesRegExp;\n} {\n  return configs.allIds\n    .filter(\n      (id: string) =>\n        'level' in configs.byId[id] && resourcesTypes.allIds.includes(id)\n    )\n    .reduce(\n      (acc, resourceTypeId) => {\n        let urlFirstPart = '^/home/';\n        let detailPathRegExp: RegExp;\n        const resourceTypeConfig: IConfig = configs.byId[resourceTypeId];\n        const resourceTypeProps: IResourceType =\n          resourcesTypes.byId[resourceTypeId];\n        if (resourceTypeConfig.level === 0) {\n          const resourceTypeHasChildren = configs.allIds.some(\n            (id: string) => configs.byId[id].props?.parent === resourceTypeId\n          );\n          const resourcePathRegExp = new RegExp(\n            urlFirstPart.concat(`${resourceTypeProps.endpoint}$`)\n          );\n          if (\n            resourceTypeConfig.component === EResourceComponent.ARRAY ||\n            resourceTypeConfig.component === EResourceComponent.LIST ||\n            (resourceTypeConfig.component === EResourceComponent.TREE &&\n              resourceTypeHasChildren)\n          ) {\n            detailPathRegExp = new RegExp(\n              urlFirstPart.concat(`${resourceTypeProps.endpoint}/[^/]*$`)\n            );\n          } else {\n            detailPathRegExp = new RegExp(\n              urlFirstPart.concat(`${resourceTypeProps.endpoint}/.*$`)\n            );\n          }\n          acc = {\n            ...acc,\n            [resourceTypeId]: {\n              resourcePathRegExp,\n              detailPathRegExp,\n            },\n          };\n        } else {\n          const allParentsResourcesTypesIds =\n            getResourcesTypesIdsByRelationship(\n              resourceTypeId,\n              configs\n            ).reverse();\n          detailPathRegExp = new RegExp(\n            allParentsResourcesTypesIds.reduce(\n              (accBis, id) =>\n                accBis\n                  .concat(`${resourcesTypes.byId[id].endpoint}/[^/]*`)\n                  .concat(resourceTypeId === id ? '$' : '/'),\n              urlFirstPart\n            )\n          );\n          acc = {\n            ...acc,\n            [resourceTypeId]: {\n              resourcePathRegExp: null,\n              detailPathRegExp,\n            },\n          };\n        }\n        return acc;\n      },\n      {} as {\n        [resourceTypeId: string]: IResourceTypeRoutesRegExp;\n      }\n    );\n}\n\nfunction getResourcesTypesIdsByRelationship(\n  resourceTypeId: string,\n  configs: JsTable<IConfig>\n): string[] {\n  let resourcesTypesIds = [resourceTypeId];\n  const parentResourceTypeId = configs.byId[resourceTypeId].props?.parent;\n  if (!!parentResourceTypeId) {\n    resourcesTypesIds.push(\n      ...getResourcesTypesIdsByRelationship(parentResourceTypeId, configs)\n    );\n  }\n  return resourcesTypesIds;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport interface JsTable<I> {\n  readonly byId: { readonly [id: string]: I };\n  readonly allIds: string[];\n}\n\nexport function emptyJsTable<I>(): JsTable<I> {\n  return {\n    byId: {},\n    allIds: [],\n  };\n}\n\nexport function toJsTable<I>(obj: { [id: string]: I }): JsTable<I> {\n  const allIds: string[] = Object.keys(obj);\n\n  const byId: { [id: string]: I } = {};\n\n  allIds.forEach((id) => {\n    byId[id] = Object.assign({}, obj[id]);\n  });\n\n  return { byId, allIds };\n}\n\n/**\n * This merge value into table.byId[id]\n */\nexport function updateById<I, M extends JsTable<I> = JsTable<I>>(\n  table: M,\n  id: string,\n  value: Partial<I>\n): M {\n  return Object.assign({}, table, {\n    byId: {\n      ...table.byId,\n      [id]: Object.assign({}, table.byId[id], value),\n    },\n  });\n}\n\n/**\n * This put value in table.byId[id] and adds id to allIds.\n */\nexport function putById<I, M extends JsTable<I> = JsTable<I>>(\n  table: M,\n  id: string,\n  value: Partial<I>,\n  initializer: () => I\n): M {\n  return Object.assign({}, table, {\n    allIds: table.byId[id]\n      ? [...Array.from(new Set([...table.allIds, id]))]\n      : [...table.allIds, id],\n    byId: {\n      ...table.byId,\n      [id]: Object.assign(\n        {},\n        table.byId[id] ? table.byId[id] : initializer(),\n        value\n      ),\n    },\n  });\n}\n\n/**\n * This merges all the elements of toMerge.byId\n * into table.byId elements and toMerge.allIds into table.allIds.\n * And also ensure elements are fully initialised.\n */\nexport function mergeInto<I, M extends JsTable<I>>(\n  table: M,\n  toMerge: JsTable<I>\n): M {\n  return Object.assign({}, table, {\n    allIds: [...Array.from(new Set([...table.allIds, ...toMerge.allIds]))],\n    byId: toMerge.allIds.reduce(\n      (acc, id) => ({\n        ...acc,\n        [id]: Object.assign({}, acc[id], toMerge.byId[id]),\n      }),\n      table.byId\n    ),\n  });\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { _isNumberValue } from '@angular/cdk/coercion';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport _ from 'lodash';\nimport {\n  IArrayAccessibility,\n  IArrayAttributeUpdateParams,\n  IAttribute,\n  IAttributeActions,\n  IColumn,\n  IConfig,\n  IPrimitiveActions,\n} from '../interfaces/configs.interface';\nimport {\n  EComponentName,\n  IClickableDataTableCellElement,\n  IData,\n  IDataSourceRow,\n  IDataTableCellElement,\n  IDataTableRow,\n  IGenericArrayColumn,\n  ILink,\n  IUiEntryIds,\n} from '../interfaces/data.interface';\nimport { IResourceType } from '../interfaces/resources-types.interface';\nimport { EEllipsisMenuActions } from '../interfaces/ui.interface';\nimport { getScimParentsAndChildren } from './configs.helper';\nimport { JsTable, emptyJsTable } from './jstable.helper';\nimport { getRouterLinkValue } from './resources.helper';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function isLinkObject(attributeValue: any): boolean {\n  if (typeof attributeValue !== 'object') {\n    return false;\n  }\n\n  // There are multiple constants because some fields are optionnals in ILink interface\n  const twoProps = 'id' in attributeValue && 'label' in attributeValue;\n  const threeProps = twoProps && 'canBeRead' in attributeValue;\n  const fourProps = threeProps && 'value' in attributeValue;\n  const fiveProps =\n    threeProps &&\n    'parentId' in attributeValue &&\n    'parentLabel' in attributeValue;\n  const sixProps = fiveProps && 'parentCanBeRead' in attributeValue;\n\n  const nbFields: number = Object.keys(attributeValue).length;\n\n  const isSimpleLink =\n    (nbFields === 2 && twoProps) ||\n    (nbFields === 3 && threeProps) ||\n    (nbFields === 4 && fourProps);\n\n  const isParentLink =\n    (nbFields === 5 && fiveProps) || (nbFields === 6 && sixProps);\n\n  return isSimpleLink || isParentLink;\n}\n\nexport function escapeBackSlash(value: string): string {\n  return value.replace(/\\\\/g, '\\\\\\\\');\n}\n\nexport class DataViewProperties {\n  private dataSource: MatTableDataSource<any>;\n  private columns: IGenericArrayColumn[];\n  private displayedColumns: string[];\n  private isClickableRow: boolean;\n  private accessibility: IArrayAccessibility;\n\n  constructor(object?: DataViewProperties) {\n    this.dataSource =\n      object && object.dataSource\n        ? object.dataSource\n        : new MatTableDataSource<any>();\n    this.columns = object && object.columns ? object.columns : [];\n    this.displayedColumns =\n      object && object.displayedColumns ? object.displayedColumns : [];\n    this.isClickableRow =\n      object && object.isClickableRow ? object.isClickableRow : null;\n    this.accessibility =\n      object && object.accessibility ? object.accessibility : null;\n  }\n\n  getDataSource(): MatTableDataSource<any> {\n    return this.dataSource;\n  }\n\n  setDataSource(dataSource: MatTableDataSource<any>): void {\n    this.dataSource = dataSource;\n  }\n\n  getColumns(): IGenericArrayColumn[] {\n    return this.columns;\n  }\n\n  setColumns(columns: IGenericArrayColumn[]): void {\n    this.columns = columns;\n  }\n\n  getDisplayedColumns(): string[] {\n    return this.displayedColumns;\n  }\n\n  setDisplayedColumns(displayedColumns: string[]): void {\n    this.displayedColumns = displayedColumns;\n  }\n\n  getIsClickableRow(): boolean {\n    return this.isClickableRow;\n  }\n\n  setIsClickableRow(isClickableRow: boolean): void {\n    this.isClickableRow = isClickableRow;\n  }\n\n  getAccessibility(): IArrayAccessibility {\n    return this.accessibility;\n  }\n\n  setAccessibility(accessibility: IArrayAccessibility): void {\n    this.accessibility = accessibility;\n  }\n}\n\nexport function getViewPropertiesArrayAttribute(\n  attributeConfig: IAttribute,\n  isClickableRow = true\n): DataViewProperties {\n  let dataViewProperties = new DataViewProperties();\n  let displayedColumns: string[] = [];\n  let columns: IGenericArrayColumn[] = [];\n  const propsFieldAttribute = attributeConfig.value.field.props;\n\n  if (propsFieldAttribute) {\n    if (!!propsFieldAttribute.columns) {\n      propsFieldAttribute.columns.forEach((column: IColumn) => {\n        displayedColumns.push(column.id);\n        columns.push({\n          id: column.id,\n          label: column.label,\n          isBackendLinkObject: column.isBackendLinkObject,\n          width: column.width,\n          type: column.type,\n        });\n      });\n      dataViewProperties.setDisplayedColumns(displayedColumns);\n      dataViewProperties.setColumns(columns);\n    }\n    if (!!propsFieldAttribute.accessibility) {\n      dataViewProperties.setAccessibility(propsFieldAttribute.accessibility);\n    }\n    dataViewProperties.setIsClickableRow(isClickableRow);\n  }\n  return dataViewProperties;\n}\n\nexport function canDeleteEntries(\n  actions: IPrimitiveActions | IAttributeActions,\n  hasOneDeletableEntry: boolean\n): boolean {\n  const isDeleteActionAvailable: boolean =\n    actions && EEllipsisMenuActions.MULTIPLE_DELETE in actions;\n  return isDeleteActionAvailable && hasOneDeletableEntry;\n}\n\nexport function getRowId(\n  row: IDataTableRow,\n  selectionColumnId: string\n): string {\n  if (row.selectionIds) {\n    return row.selectionIds.id;\n  } else {\n    if (selectionColumnId) {\n      if (isDataTableCellElement(row[selectionColumnId])) {\n        return row[selectionColumnId].id;\n      } else if (isArrayOfDataTableCellElements(row[selectionColumnId])) {\n        return row[selectionColumnId][0].id;\n      } else {\n        return row[selectionColumnId];\n      }\n    } else {\n      return row.id;\n    }\n  }\n}\n\nfunction getRowExternalId(\n  row: IDataSourceRow,\n  columnIdForPatchOperation: string\n): string {\n  if (row.selectionIds) {\n    return row.selectionIds.externalId;\n  } else {\n    if (columnIdForPatchOperation) {\n      if (isDataTableCellElement(row[columnIdForPatchOperation])) {\n        return row[columnIdForPatchOperation].value;\n      } else if (\n        isArrayOfDataTableCellElements(row[columnIdForPatchOperation])\n      ) {\n        return row[columnIdForPatchOperation][0].value;\n      } else {\n        return row[columnIdForPatchOperation];\n      }\n    } else {\n      return row.externalId;\n    }\n  }\n}\n\nexport function convertDataSourceRowToLinkObject(\n  row: IDataSourceRow,\n  columnForId: string,\n  updateActionsParams: IArrayAttributeUpdateParams\n): ILink {\n  let linkObject: ILink = {\n    id: getRowId(row, columnForId),\n    label: getRowExternalId(row, columnForId),\n  };\n\n  if (updateActionsParams.edit) {\n    linkObject = {\n      ...linkObject,\n      value: row[updateActionsParams.edit.columnId],\n    };\n  }\n\n  return linkObject;\n}\n\nexport function isDataTableCellElement(cellValue): boolean {\n  if (typeof cellValue !== 'object') {\n    return false;\n  }\n  const nbFields: number = Object.keys(cellValue).length;\n  const hasDataTableCellElementProps: boolean =\n    'id' in cellValue && 'value' in cellValue && 'isClickable' in cellValue;\n  return (nbFields === 3 || nbFields == 4) && hasDataTableCellElementProps;\n}\n\nexport function isArrayOfDataTableCellElements(cellValue: any): boolean {\n  return (\n    Array.isArray(cellValue) &&\n    cellValue.length > 0 &&\n    cellValue.every((value: any) => isDataTableCellElement(value))\n  );\n}\n\nexport function getDataSourceArrayUsingDataFromBackend(\n  data: ILink[],\n  columnIds: string[],\n  resourcesTypesIds: string[],\n  resourcesTypes: JsTable<IResourceType>,\n  squashColumnId: string\n): IDataTableRow[] {\n  const dataSource: IDataTableRow[] = data.map((link: ILink) =>\n    columnIds.reduce(\n      (acc, columnId, index) => {\n        let parentEndpoint: string = null;\n        let endpoint: string = null;\n        if (resourcesTypes.allIds.includes(columnId)) {\n          endpoint = resourcesTypes.byId[columnId].endpoint;\n          if (index > 0) {\n            const parentResourceTypeId: string = resourcesTypesIds[index - 1];\n            if (resourcesTypes.allIds.includes(parentResourceTypeId)) {\n              parentEndpoint =\n                resourcesTypes.byId[parentResourceTypeId].endpoint;\n            }\n          }\n        }\n        if (index === 0 && resourcesTypesIds.length > 1) {\n          acc[columnId].push(\n            convertParentLinkToDataTableCellElement(link, endpoint)\n          );\n        } else if ('value' in link && index > 0) {\n          acc = { ...acc, [columnId]: link.value };\n        } else {\n          acc[columnId].push(\n            convertLinkToDataTableCellElement(link, endpoint, parentEndpoint)\n          );\n        }\n        return acc;\n      },\n      resourcesTypesIds.reduce(\n        (acc, currResourceTypeId) => ({\n          ...acc,\n          [currResourceTypeId]: [],\n        }),\n        {}\n      )\n    )\n  );\n  return squashColumnId\n    ? squashArrayRows(dataSource, squashColumnId, resourcesTypesIds)\n    : dataSource;\n}\n\nexport function squashArrayRows(\n  dataSource: IDataTableRow[],\n  squashColumnId: string,\n  columnIds: string[]\n): IDataTableRow[] {\n  const squashedArray: IDataTableRow[] = [];\n  if (dataSource.length > 0) {\n    const handledIdsValues: number[] = [];\n    const remainingColumnsIds: string[] = columnIds.filter(\n      (id: string) => id !== squashColumnId\n    );\n    const allParentColumnValues: {\n      index: number;\n      value: string;\n    }[] = dataSource.map((row: IDataTableRow, index: number) => ({\n      index,\n      value: row[squashColumnId][0].value,\n    }));\n    dataSource.forEach((row: IDataTableRow, rowIndex: number) => {\n      if (!handledIdsValues.includes(rowIndex)) {\n        const occurencesIndexes: number[] = allParentColumnValues\n          .filter(\n            (elt: { index: number; value: string }) =>\n              elt.value === row[squashColumnId][0].value\n          )\n          .map(\n            (occurence: { index: number; value: string }) => occurence.index\n          );\n        if (occurencesIndexes.length > 0) {\n          squashedArray.push({\n            [squashColumnId]: row[squashColumnId],\n            ...remainingColumnsIds.reduce(\n              (acc, columnId) => ({\n                ...acc,\n                [columnId]: occurencesIndexes\n                  .reduce(\n                    (acc, index) => acc.concat(dataSource[index][columnId]),\n                    []\n                  )\n                  .sort((a: IDataTableCellElement, b: IDataTableCellElement) =>\n                    a.value\n                      .toLocaleUpperCase()\n                      .localeCompare(b.value.toLocaleUpperCase())\n                  ),\n              }),\n              {} as { [id: string]: IDataTableCellElement[] }\n            ),\n          });\n          handledIdsValues.push(...occurencesIndexes);\n        } else {\n          handledIdsValues.push(rowIndex);\n          squashedArray.push(row);\n        }\n      }\n    });\n  }\n  return squashedArray.sort((a: IDataSourceRow, b: IDataSourceRow) =>\n    (a[squashColumnId] as IDataTableCellElement[])[0].value\n      .toLocaleUpperCase()\n      .localeCompare(\n        (\n          b[squashColumnId] as IDataTableCellElement[]\n        )[0].value.toLocaleUpperCase()\n      )\n  );\n}\n\nfunction convertLinkToDataTableCellElement(\n  attributeValue: ILink,\n  endpoint: string,\n  parentEndpoint: string = null\n): IDataTableCellElement | IClickableDataTableCellElement {\n  let cellElement: IDataTableCellElement = {\n    id: attributeValue.id,\n    value: attributeValue.label,\n    isClickable: attributeValue.canBeRead,\n  };\n\n  let clickableCellElement: IClickableDataTableCellElement;\n  if (attributeValue.canBeRead) {\n    clickableCellElement = {\n      ...cellElement,\n      routerLinkValue: getRouterLinkValue(\n        endpoint,\n        attributeValue.label,\n        parentEndpoint,\n        attributeValue.parentLabel\n      ),\n    };\n    return clickableCellElement;\n  }\n  return cellElement;\n}\n\nfunction convertParentLinkToDataTableCellElement(\n  attributeValue: ILink,\n  endpoint: string\n): IDataTableCellElement | IClickableDataTableCellElement {\n  let cellElement: IDataTableCellElement = {\n    id: attributeValue.parentId,\n    value: attributeValue.parentLabel,\n    isClickable: attributeValue.parentCanBeRead,\n  };\n\n  let clickableCellElement: IClickableDataTableCellElement;\n  if (attributeValue.parentCanBeRead) {\n    clickableCellElement = {\n      ...cellElement,\n      routerLinkValue: getRouterLinkValue(endpoint, attributeValue.parentLabel),\n    };\n    return clickableCellElement;\n  }\n  return cellElement;\n}\n\nexport function getDataSourceForGenericArray(\n  data: IData,\n  selectedResourceTypeConfig: IConfig,\n  clickableCellsEndpoints: JsTable<string> = emptyJsTable(),\n  onlyEditableResources = false\n): any[] {\n  let flatResources: any[] = [];\n  if (!!(data && data.Resources)) {\n    data.Resources.forEach((dataResource: any) => {\n      if (\n        dataResource.meta.isDeletable ||\n        dataResource.meta.isModifiable ||\n        !onlyEditableResources\n      ) {\n        flatResources.push(\n          getDataEntryForGenericArray(\n            dataResource,\n            selectedResourceTypeConfig,\n            clickableCellsEndpoints\n          )\n        );\n      }\n    });\n  }\n  return flatResources;\n}\n\nexport function getDataEntryForGenericArray(\n  dataResource: any,\n  resourceTypeConfig: IConfig,\n  clickableCellsEndpoints: JsTable<string> = emptyJsTable()\n): any {\n  let flatResource: any = getFlatResource(dataResource, resourceTypeConfig);\n  return getDisplayedAttributeValue(\n    flatResource,\n    Object.keys(flatResource),\n    resourceTypeConfig,\n    clickableCellsEndpoints\n  );\n}\n\nexport function getFlatResource(\n  dataResource: any,\n  resourceTypeConfig: IConfig\n): any {\n  let flatResource: any = {};\n  const attributes: IAttribute[] = resourceTypeConfig.attributes;\n  const scimParentsAndChildren: {\n    [id: string]: string[];\n  } = getScimParentsAndChildren(attributes);\n  for (const scimParentId in scimParentsAndChildren) {\n    if (\n      Object.prototype.hasOwnProperty.call(scimParentsAndChildren, scimParentId)\n    ) {\n      scimParentsAndChildren[scimParentId]\n        .filter(\n          (childId: string) =>\n            !!(\n              dataResource[scimParentId] && dataResource[scimParentId][childId]\n            )\n        )\n        .forEach(\n          (childId: string) =>\n            (flatResource = {\n              ...flatResource,\n              [childId]: dataResource[scimParentId][childId],\n            })\n        );\n    }\n  }\n  let scimParentIds: string[] = Object.keys(scimParentsAndChildren);\n  const dataResourceWithoutScimParentIds: {\n    [id: string]: any;\n  } = Object.keys(dataResource).reduce((acc, fieldId) => {\n    if (!scimParentIds.includes(fieldId)) {\n      acc = { ...acc, [fieldId]: dataResource[fieldId] };\n    }\n    return acc;\n  }, {});\n  flatResource = { ...flatResource, ...dataResourceWithoutScimParentIds };\n\n  return flatResource;\n}\n\nexport function getDisplayedAttributeValue(\n  dataResource: any,\n  dataResourceKeys: string[],\n  resourceTypeConfig: IConfig,\n  clickableCellsEndpoints: JsTable<string> = emptyJsTable()\n): any {\n  let resource: any = {};\n  const attributes: IAttribute[] = resourceTypeConfig.attributes;\n  dataResourceKeys.forEach((key: string) => {\n    const currentAttribute: IAttribute = attributes.find(\n      (attributeConfig) => attributeConfig.modelRef === key\n    );\n    const isSimpleAttribute: boolean =\n      !Array.isArray(dataResource[key]) && dataResource[key] !== null;\n    const isAttributeArray: boolean =\n      Array.isArray(dataResource[key]) && dataResource[key].length >= 0;\n    const isAttributeArrayWithDataOfOtherScimType: boolean = !!currentAttribute\n      ? Array.isArray(dataResource[key]) &&\n        Object.prototype.hasOwnProperty.call(\n          currentAttribute,\n          'getDataListParams'\n        ) &&\n        !currentAttribute.props.isUsingDataFromBackend\n      : false;\n    if (\n      isSimpleAttribute ||\n      isAttributeArray ||\n      isAttributeArrayWithDataOfOtherScimType\n    ) {\n      resource = {\n        ...resource,\n        [key]: clickableCellsEndpoints.allIds.includes(key)\n          ? getAttributeValueAsArrayOfDataTableCellElement(\n              dataResource[key],\n              clickableCellsEndpoints.byId[key]\n            )\n          : getAttributeValue(dataResource[key]),\n      };\n    }\n  });\n  return resource;\n}\n\nfunction getAttributeValueAsArrayOfDataTableCellElement(\n  attributeValue: ILink | ILink[],\n  cellEndpoint: string\n): IDataTableCellElement[] {\n  let displayedAttributeValue: IDataTableCellElement[];\n  if (Array.isArray(attributeValue)) {\n    displayedAttributeValue = attributeValue.map((value: ILink) =>\n      convertLinkToDataTableCellElement(value, cellEndpoint)\n    );\n  } else {\n    displayedAttributeValue = [\n      convertLinkToDataTableCellElement(attributeValue, cellEndpoint),\n    ];\n  }\n  return displayedAttributeValue;\n}\n\nfunction getAttributeValue(\n  attributeValue: string | string[] | boolean | ILink | ILink[]\n) {\n  let displayedAttributeValue: string | string[] | boolean;\n  if (isLinkObject(attributeValue)) {\n    displayedAttributeValue = (attributeValue as ILink).label;\n  } else if (isArrayOfLinkObjects(attributeValue)) {\n    displayedAttributeValue = (attributeValue as ILink[]).map(\n      (value: ILink) => value.label\n    );\n  } else {\n    displayedAttributeValue = attributeValue as string | string[] | boolean;\n  }\n  return displayedAttributeValue;\n}\n\nexport function isArrayOfLinkObjects(attributeValue: any): boolean {\n  return (\n    Array.isArray(attributeValue) &&\n    attributeValue.length > 0 &&\n    attributeValue.every((value: any) => isLinkObject(value))\n  );\n}\n\nexport function getOrderedKeysArrayAttributes(\n  attributes: IAttribute[],\n  dataResource: any\n): string[] {\n  const attributeIds: string[] = attributes.map(\n    (attribute) => attribute.modelRef\n  );\n  let keys: string[] = _.intersection(\n    attributeIds,\n    Object.keys(dataResource)\n  ).filter(\n    (key) => dataResource[key] !== undefined && dataResource[key] !== null\n  );\n  const orderKeysByAttributeId: string[] = keys.sort((a, b) => {\n    return attributeIds.indexOf(a) - attributeIds.indexOf(b);\n  });\n  return orderKeysByAttributeId;\n}\n\nexport function getDisplayedColumnsIds(resourceTypeConfig: IConfig): string[] {\n  let displayedColumns: string[] = [];\n  if (!!resourceTypeConfig.props?.columns) {\n    displayedColumns = resourceTypeConfig.props.columns.reduce(\n      (acc, column) => [...acc, column.idForSearch || column.id],\n      []\n    );\n  }\n  return displayedColumns;\n}\n\nexport function getOrderedKeysSimpleAttributes(\n  attributes: IAttribute[],\n  dataResource: any\n): string[] {\n  const attributeIds: string[] = attributes.map(\n    (attribute) => attribute.modelRef\n  );\n  // Remove \"schema\" property from dataDetails as it is non useful for the Front-End\n  let keys: string[] = _.intersection(\n    attributeIds,\n    Object.keys(dataResource)\n  ).filter((key) => {\n    const attributeConfig = attributes.find(\n      (attribute: IAttribute) => attribute.modelRef === key\n    );\n    const isInputChipsAutocomplete: boolean =\n      !!attributeConfig &&\n      attributeConfig.value.field.componentName ===\n        EComponentName.inputChipsAutocomplete;\n\n    const isInputChipsAutocompleteWithValues: boolean =\n      isInputChipsAutocomplete &&\n      !!dataResource[key] &&\n      dataResource[key].length > 0;\n\n    const isInput: boolean =\n      !!attributeConfig &&\n      attributeConfig.value.field.componentName === EComponentName.input;\n\n    const isInputWithValueAsArray =\n      isInput && !!dataResource[key] && Array.isArray(dataResource[key]);\n\n    const isInputWithValueAsNotEmptyArray: boolean =\n      isInputWithValueAsArray && dataResource[key].length > 0;\n\n    return (\n      dataResource[key] !== undefined &&\n      dataResource[key] !== null &&\n      (isInputChipsAutocompleteWithValues ||\n        isInputWithValueAsNotEmptyArray ||\n        !(isInputWithValueAsArray || isInputChipsAutocomplete))\n    );\n  });\n  const orderKeysByAttributeId: string[] = keys.sort((a, b) => {\n    return attributeIds.indexOf(a) - attributeIds.indexOf(b);\n  });\n  return orderKeysByAttributeId;\n}\n\nexport function canDeleteEntry(\n  arrayActions: IPrimitiveActions | IAttributeActions,\n  isSelectOnlyModeEnabled: boolean,\n  isEditableRow: boolean\n): boolean {\n  const isDeleteActionAvailable: boolean =\n    arrayActions && EEllipsisMenuActions.SINGLE_DELETE in arrayActions;\n  return isDeleteActionAvailable && isEditableRow && !isSelectOnlyModeEnabled;\n}\n\nexport function canMoveEntry(\n  arrayActions: IPrimitiveActions | IAttributeActions,\n  canAssignOrMoveEntries: boolean,\n  isSelectOnlyModeEnabled: boolean,\n  isEditableRow: boolean\n): boolean {\n  const areMoveActionsAvailable: boolean =\n    arrayActions &&\n    (EEllipsisMenuActions.SINGLE_UNASSIGN in arrayActions ||\n      EEllipsisMenuActions.SINGLE_REASSIGN in arrayActions);\n  return (\n    areMoveActionsAvailable &&\n    canAssignOrMoveEntries &&\n    isEditableRow &&\n    !isSelectOnlyModeEnabled\n  );\n}\n\nexport function getSelectedElementIds(\n  row: any,\n  selectionColumnId: string\n): IUiEntryIds {\n  let externalId: string;\n  if (!!selectionColumnId) {\n    const cellElt: any = row[selectionColumnId];\n    if (isArrayOfDataTableCellElements(cellElt) && cellElt.length === 1) {\n      externalId = cellElt[0].value;\n      return { id: cellElt[0].id, externalId, label: externalId };\n    } else if (isDataTableCellElement(cellElt)) {\n      externalId = cellElt.value;\n      return { id: cellElt.id, externalId, label: externalId };\n    }\n  } else {\n    externalId = row.externalId;\n    return { id: row.id, externalId, label: externalId };\n  }\n}\n\nexport function getUpdatedDisplayedColumns(\n  arrayActions: IPrimitiveActions | IAttributeActions,\n  initialDisplayedColumns: string[],\n  isSelectOnlyModeEnabled: boolean,\n  canAssignOrMoveEntries: boolean,\n  isEditableArray: boolean,\n  updateAffectAnotherResourceType: boolean,\n  isAttributeArray: boolean,\n  data: any[] | IDataTableRow[]\n): string[] {\n  let updateDisplayedColumns: string[] = [\n    ...initialDisplayedColumns.filter((columnId: string) =>\n      data.some((row: any) => columnId in row)\n    ),\n  ];\n  const additionnalColumnsToDisplay: string[] = ['select', 'actions'];\n\n  const hasOneDeletableEntry: boolean = data.some(\n    (row: any | IDataTableRow) => row.meta?.isDeletable\n  );\n\n  const hasOneEditableEntry: boolean = data.some(\n    (row: any | IDataTableRow) => row.isRowEditable\n  );\n\n  if (!isSelectOnlyModeEnabled && data.length > 0) {\n    const canDelete: boolean = canDeleteEntries(\n      arrayActions,\n      hasOneDeletableEntry\n    );\n    const canMove: boolean = canMoveEntries(\n      arrayActions,\n      canAssignOrMoveEntries,\n      hasOneEditableEntry\n    );\n    const isEditableAttributeArray =\n      isEditableArray &&\n      (canMove || canDelete || !updateAffectAnotherResourceType);\n\n    if (\n      (isAttributeArray && isEditableAttributeArray) ||\n      (!isAttributeArray && canDelete)\n    ) {\n      updateDisplayedColumns.unshift(additionnalColumnsToDisplay[0]);\n      updateDisplayedColumns.push(additionnalColumnsToDisplay[1]);\n    }\n  } else if (hasOneDeletableEntry || hasOneEditableEntry) {\n    updateDisplayedColumns.unshift(additionnalColumnsToDisplay[0]);\n  }\n  return updateDisplayedColumns;\n}\n\nexport function canMoveEntries(\n  arrayActions: IPrimitiveActions | IAttributeActions,\n  canAssignOrMoveEntries: boolean,\n  hasOneDeletableEntry: boolean\n): boolean {\n  const areMoveActionsAvailable: boolean =\n    arrayActions &&\n    (EEllipsisMenuActions.MULTIPLE_UNASSIGN in arrayActions ||\n      EEllipsisMenuActions.MULTIPLE_REASSIGN in arrayActions);\n  return (\n    areMoveActionsAvailable && canAssignOrMoveEntries && hasOneDeletableEntry\n  );\n}\n\nexport function isRowEditable(\n  isAttributeArray: boolean,\n  updateAffectAnotherResourceType: boolean,\n  fieldForUpdate: string,\n  isEditableArray: boolean,\n  row: any\n): boolean {\n  const isUpdateAffectingAnotherResourceType =\n    isAttributeArray && updateAffectAnotherResourceType;\n\n  const isUpdateAffectingOnlyCurrentResourceType =\n    isAttributeArray &&\n    !updateAffectAnotherResourceType &&\n    fieldForUpdate == null;\n\n  if (isUpdateAffectingAnotherResourceType) {\n    return (\n      row.meta.isModifiable &&\n      row.meta.modifiableAttributes.includes(fieldForUpdate)\n    );\n  } else if (isUpdateAffectingOnlyCurrentResourceType) {\n    return isEditableArray;\n  } else {\n    return row.meta?.isDeletable;\n  }\n}\n\nexport function sortData(data: any[], sort: MatSort): any[] {\n  const active = sort.active;\n  const direction = sort.direction;\n  if (!active || direction === '') {\n    return data;\n  }\n\n  return data.sort((a, b) => {\n    let valueA = sortingDataAccessor(a, active);\n    let valueB = sortingDataAccessor(b, active);\n\n    // If there are data in the column that can be converted to a number,\n    // it must be ensured that the rest of the data\n    // is of the same type so as not to order incorrectly.\n    const valueAType = typeof valueA;\n    const valueBType = typeof valueB;\n\n    if (valueAType !== valueBType) {\n      if (valueAType === 'number') {\n        valueA += '';\n      }\n      if (valueBType === 'number') {\n        valueB += '';\n      }\n    }\n\n    // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n    // one value exists while the other doesn't. In this case, existing value should come last.\n    // This avoids inconsistent results when comparing values to undefined/null.\n    // If neither value exists, return 0 (equal).\n    let comparatorResult = 0;\n    if (valueA != null && valueB != null) {\n      // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n      if (valueA > valueB) {\n        comparatorResult = 1;\n      } else if (valueA < valueB) {\n        comparatorResult = -1;\n      }\n    } else if (valueA != null) {\n      comparatorResult = 1;\n    } else if (valueB != null) {\n      comparatorResult = -1;\n    }\n\n    return comparatorResult * (direction === 'asc' ? 1 : -1);\n  });\n}\n\nexport function sortingDataAccessor(\n  data: any[],\n  sortHeaderId: string\n): string | number {\n  let value = (data as { [key: string]: any })[sortHeaderId];\n  value =\n    Array.isArray(value) && value.length > 0\n      ? Object.prototype.hasOwnProperty.call(value[0], 'value')\n        ? value[0].value\n        : null\n      : value;\n\n  if (_isNumberValue(value)) {\n    const numberValue = Number(value);\n\n    // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n    // leave them as strings. For more info: https://goo.gl/y5vbSg\n    return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n  }\n\n  return value;\n}\n\nexport function getAllElementsToExport(\n  arrayData: any[],\n  columns: IGenericArrayColumn[]\n): { [label: string]: any }[] {\n  const columnsLabel: Map<string, string> = getColumnsLabels(columns);\n  const data = !!arrayData\n    ? arrayData.map((row) =>\n        columns.reduce(\n          (acc, column) => {\n            const label: string = columnsLabel.get(column.id);\n            let cellValue = row[column.id];\n            if (Array.isArray(cellValue) && cellValue.length > 0) {\n              cellValue = cellValue\n                .map((cellElt: IDataTableCellElement) =>\n                  Object.prototype.hasOwnProperty.call(cellElt, 'value')\n                    ? cellElt.value\n                    : cellElt\n                )\n                .join(', ');\n            }\n            return { ...acc, [label]: cellValue };\n          },\n          {} as { [label: string]: any }\n        )\n      )\n    : [];\n  return data;\n}\n\nexport function getColumnsLabels(\n  columns: IGenericArrayColumn[]\n): Map<string, string> {\n  return !!columns\n    ? new Map(\n        columns.map((column: IGenericArrayColumn) => [column.id, column.label])\n      )\n    : new Map();\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { isLinkObject } from '../helpers/data-table.helper';\nimport { IAttribute } from '../interfaces/configs.interface';\nimport {\n  CHECK_ATTRIBUTE_PRESENCE,\n  EComponentName,\n  EScimOperator,\n  ILink,\n} from '../interfaces/data.interface';\nimport { IAdvancedSearchChip } from '../interfaces/ui.interface';\n\nexport function getSearchRequestScimBody(attributes?: string[]): any {\n  let scimBody: any = {\n    schemas: ['urn:ietf:params:scim:api:messages:2.0:SearchRequest'],\n  };\n  if (!!attributes) {\n    scimBody = { ...scimBody, attributes };\n  }\n  return scimBody;\n}\n\n/**\n * Performs the simple search for each field type.\n *\n * @export\n * @param {string} searchFormValue - A simple string value corresponding to the search.\n * @param {string[]} [filteredEntryFields] - A list of fields used on filtering.\n * @returns {string}\n */\nexport function simpleSearchFormDataElement(\n  searchFormValue: string,\n  filteredEntryFields: string[]\n): string {\n  let filterScim = '';\n  filteredEntryFields.forEach((columnId, index) => {\n    filterScim =\n      filterScim +\n      getAttributeScimFilter(columnId, EScimOperator.CO, searchFormValue);\n    if (index < filteredEntryFields.length - 1) {\n      filterScim = filterScim + ' OR ';\n    }\n  });\n  return filterScim;\n}\n\n/**\n *  Get the scim filter for an attribute and its value\n *\n * @export\n * @param {string} attributeModelRef - the id of an attribute\n * @param {string} operator - scim filter operator (cf EScimOperator)\n * @param {string} value - attribute value (not specified if operator is \"pr\")\n * @returns {string} the scim filter\n */\nexport function getAttributeScimFilter(\n  attributeModelRef: string,\n  operator: string,\n  value: string = null\n): string {\n  if (value) {\n    return attributeModelRef + ' ' + operator + ' ' + '\"' + value + '\"';\n  } else {\n    return attributeModelRef + ' ' + operator;\n  }\n}\n\nexport function getChipValue(chip: IAdvancedSearchChip): string | boolean {\n  return isLinkObject(chip.value)\n    ? (chip.value as ILink).id\n    : (chip.value as string | boolean);\n}\n\nexport function isAttributeValueMatchingChip(\n  chipValue: string | boolean,\n  attributeValue: string | boolean,\n  attributeConfig: IAttribute\n): boolean {\n  let isMatching = false;\n  const componentName: string = attributeConfig.value.field.componentName;\n  switch (componentName) {\n    case EComponentName.select:\n      isMatching =\n        chipValue !== CHECK_ATTRIBUTE_PRESENCE\n          ? chipValue === attributeValue\n          : true;\n      break;\n    case EComponentName.datepicker:\n    case EComponentName.slideToggle:\n    case EComponentName.autocomplete:\n      isMatching = chipValue === attributeValue;\n      break;\n\n    case EComponentName.input:\n      if (attributeConfig.value.field.props.type === 'date') {\n        isMatching = chipValue === attributeValue;\n      } else {\n        isMatching = (attributeValue as string).includes(chipValue as string);\n      }\n      break;\n\n    default:\n      isMatching = (attributeValue as string).includes(chipValue as string);\n      break;\n  }\n  return isMatching;\n}\n\nconst matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nexport function escapeStringRegexp(str: string) {\n  return str.replace(matchOperatorsRe, '\\\\$&');\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  Directive,\n  ElementRef,\n  Input,\n  OnChanges,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport { IEntryIds } from '../interfaces/data.interface';\nimport { escapeStringRegexp } from '../helpers/search.helper';\n\n@Directive({\n  selector: '[appColorSearchedLetters]',\n})\nexport class ColorSearchedLettersDirective implements OnChanges {\n  @Input() search: string;\n  @Input() name: string;\n  @Input() isFilteringOnExternalId = false;\n  @Input() nodeIds: IEntryIds;\n  @Input() classToApply: string;\n  @Input() nodesMatchingSearchClass: string = null;\n  @Input() isAdvancedSearchActivated = false;\n  @Input() nodesIdsMatchingAdvancedSearch: { [id: string]: true } = {};\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  ngOnChanges(_changes: SimpleChanges): void {\n    if (!this.classToApply) {\n      this.classToApply = '';\n    }\n\n    if (\n      ((!this.search || !this.search.trim()) &&\n        !this.isAdvancedSearchActivated) ||\n      !this.classToApply\n    ) {\n      this.renderer.setProperty(this.el.nativeElement, 'innerHTML', this.name);\n      return;\n    }\n\n    const search: string = escapeStringRegexp(\n      this.search.trim()\n    ).getRidOfDiacritics();\n\n    const isNameMatchingSearch: boolean = this._isMatchingSearch(\n      this.name,\n      search\n    );\n\n    const isExternalIdMatchingSearch: boolean =\n      this.isFilteringOnExternalId &&\n      this._isMatchingSearch(this.nodeIds.externalId, search);\n\n    const isMatchingAdvancedSearch: boolean =\n      this.isAdvancedSearchActivated &&\n      this.nodesIdsMatchingAdvancedSearch[this.nodeIds.id];\n\n    this.renderer.setProperty(this.el.nativeElement, 'innerHTML', this.name);\n    if (\n      isNameMatchingSearch ||\n      isExternalIdMatchingSearch ||\n      isMatchingAdvancedSearch\n    ) {\n      this.renderer.addClass(\n        this.el.nativeElement,\n        this.nodesMatchingSearchClass\n      );\n      if (isNameMatchingSearch) {\n        this.renderer.setProperty(\n          this.el.nativeElement,\n          'innerHTML',\n          this.replace(this.name, search)\n        );\n      }\n    } else {\n      this.renderer.removeClass(\n        this.el.nativeElement,\n        this.nodesMatchingSearchClass\n      );\n    }\n  }\n\n  replace(txt = '', search: string): string {\n    let res = '';\n    const searchRgx = new RegExp(`(${search})`, 'gi');\n    let currentStart = 0;\n    let currentEnd = 0;\n    let match: RegExpExecArray;\n\n    while ((match = searchRgx.exec(txt.getRidOfDiacritics())) != null) {\n      currentEnd = match.index + search.length;\n      res =\n        res +\n        txt.substring(currentStart, match.index) +\n        `<span class=\"${this.classToApply}\">${txt.substring(\n          match.index,\n          currentEnd\n        )}</span>`;\n      currentStart = currentEnd;\n    }\n    res = res + txt.substring(currentStart, txt.length);\n    return res;\n  }\n\n  private _isMatchingSearch(value: string, search: string): boolean {\n    return (\n      search !== '' &&\n      value\n        .getRidOfDiacritics()\n        .toLocaleUpperCase()\n        .includes(search.toLocaleUpperCase())\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { AfterViewChecked, Directive, Input, OnChanges } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n  selector: '[disableControl]',\n})\nexport class DisableControlDirective implements OnChanges, AfterViewChecked {\n  @Input() disableControl: boolean;\n\n  constructor(private ngControl: NgControl) {}\n\n  private _updateControlStatus(): void {\n    const action: string = this.disableControl ? 'disable' : 'enable';\n    this.ngControl.control[action]({ emitEvent: false });\n  }\n\n  ngOnChanges(changes: any): void {\n    if (changes['disableControl']) {\n      this._updateControlStatus();\n    }\n  }\n\n  ngAfterViewChecked(): void {\n    this._updateControlStatus();\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  Directive,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\n\n@Directive({\n  selector: '[flexGrowFitContent]',\n})\nexport class FlexGrowFitContentDirective implements OnChanges, OnDestroy {\n  @Input() minWidth: string;\n\n  private resizeObserver: ResizeObserver;\n\n  constructor(\n    private _el: ElementRef,\n    private _renderer: Renderer2\n  ) {}\n\n  ngOnChanges(_changes: SimpleChanges): void {\n    this.updateFlexGrow();\n  }\n\n  ngAfterViewInit(): void {\n    this.resizeObserver = new ResizeObserver((_) => this.updateFlexGrow());\n    this.resizeObserver.observe(this._el.nativeElement);\n  }\n\n  private updateFlexGrow(): void {\n    if (\n      this._el?.nativeElement?.offsetWidth != null &&\n      this._el.nativeElement.parentElement?.offsetWidth != null\n    ) {\n      const minWidth = this._minWidthPercentageToNumber(\n        this.minWidth,\n        this._el.nativeElement.parentElement.offsetWidth\n      );\n      this._renderer.setStyle(\n        this._el.nativeElement,\n        'flexGrow',\n        this._el.nativeElement.offsetWidth > minWidth ? '1' : '0'\n      );\n    }\n  }\n\n  private _minWidthPercentageToNumber(\n    minWidth: string,\n    parentWidth: number\n  ): number {\n    const percentValue = minWidth.match(/^(\\d*\\.?\\d*)%$/);\n    const percentAsNumber = +percentValue[1] / 100;\n    return parentWidth * percentAsNumber;\n  }\n\n  ngOnDestroy(): void {\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect();\n    }\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  Directive,\n  EventEmitter,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport { MatAutocomplete } from '@angular/material/autocomplete';\nimport { fromEvent, Subject, debounceTime, takeUntil, tap } from 'rxjs';\n\n@Directive({\n  selector: '[appInfiniteScroll]',\n})\nexport class InfiniteScrollDirective implements OnInit, OnDestroy, OnChanges {\n  @Input() threshold = '15%';\n  @Input() debounceTime = 150;\n  @Input() complete: boolean;\n  @Input() inputWidth: number;\n  @Output() infiniteScroll = new EventEmitter<void>();\n\n  private panel: Element;\n  private thrPx = 0;\n  private thrPc = 0;\n  private singleOptionHeight: number;\n\n  private _onDestroy$ = new Subject<void>();\n\n  constructor(\n    private _matAutocomplete: MatAutocomplete,\n    private _ngZone: NgZone,\n    private _renderer: Renderer2\n  ) {}\n\n  @Input() isOpened: boolean;\n\n  ngOnInit(): void {\n    this.evaluateThreshold();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.isOpened && changes.isOpened.currentValue) {\n      setTimeout(() => {\n        if (this._matAutocomplete.panel) {\n          this.panel = this._matAutocomplete.panel.nativeElement;\n          this._renderer.setStyle(\n            this.panel,\n            'min-width',\n            this.inputWidth + 'px'\n          );\n          if (this.panel.firstElementChild) {\n            this.singleOptionHeight = parseFloat(\n              getComputedStyle(this.panel.firstElementChild).height\n            );\n          }\n          this.registerScrollListener();\n        }\n      }, 1);\n    } else if (changes.inputWidth && !!this.panel) {\n      this._renderer.setStyle(\n        this.panel,\n        'min-width',\n        changes.inputWidth.currentValue + 'px'\n      );\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  evaluateThreshold(): void {\n    if (this.threshold.lastIndexOf('%') > -1) {\n      this.thrPx = 0;\n      this.thrPc = parseFloat(this.threshold) / 100;\n    } else {\n      this.thrPx = parseFloat(this.threshold);\n      this.thrPc = 0;\n    }\n  }\n\n  registerScrollListener(): void {\n    fromEvent(this.panel, 'scroll')\n      .pipe(\n        takeUntil(this._onDestroy$),\n        debounceTime(this.debounceTime),\n        tap((event) => {\n          this.handleScrollEvent(event);\n        })\n      )\n      .subscribe();\n  }\n\n  handleScrollEvent(event): void {\n    this._ngZone.runOutsideAngular(() => {\n      if (!this.complete) {\n        const countOfRenderedOptions = this._matAutocomplete.options.length;\n        const infiniteScrollDistance =\n          this.singleOptionHeight * countOfRenderedOptions;\n        const threshold =\n          this.thrPc !== 0 ? infiniteScrollDistance * this.thrPc : this.thrPx;\n\n        const scrolledDistance =\n          this.panel.clientHeight + event.target.scrollTop;\n\n        if (scrolledDistance + threshold >= infiniteScrollDistance) {\n          this._ngZone.run(() => this.infiniteScroll.emit());\n        }\n      }\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Directive, HostListener, Input, OnInit } from '@angular/core';\n\n@Directive({\n  selector: '[appOmitChars]',\n})\nexport class OmitCharsDirective implements OnInit {\n  @Input() invalidChars?: string[] = [];\n  @Input() validChars?: string[] = [];\n\n  regex: RegExp = null;\n  @Input() regexString?: string = null;\n\n  constructor() {}\n\n  ngOnInit(): void {\n    if (this.regexString) {\n      this.regex = new RegExp(this.regexString);\n    }\n  }\n\n  @HostListener('keypress', ['$event']) onKeyPress(event) {\n    const isInvalidChars =\n      this.invalidChars.length !== 0 && this.invalidChars.includes(event.key);\n\n    const isNotValidChars =\n      this.validChars.length !== 0 && !this.validChars.includes(event.key);\n\n    const checkRegex = this.regex && !this.regex.test(event.key);\n\n    if (isInvalidChars || isNotValidChars || checkRegex) {\n      event.preventDefault();\n    }\n  }\n\n  @HostListener('paste', ['$event']) onPaste(event) {\n    const e: ClipboardEvent = event as ClipboardEvent;\n    const pasteData: string = e.clipboardData.getData('text/plain');\n\n    const isInvalidChars =\n      this.invalidChars.length !== 0 && this.invalidChars.includes(pasteData);\n\n    const isNotValidChars =\n      this.validChars.length !== 0 && !this.validChars.includes(pasteData);\n\n    const checkRegex = this.regex && !this.regex.test(pasteData);\n\n    if (isInvalidChars || isNotValidChars || checkRegex) {\n      event.preventDefault();\n    }\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { AfterViewInit, Directive, ElementRef } from '@angular/core';\n\n@Directive({\n  selector: '[appUnfocusable]',\n})\nexport class UnfocusableDirective implements AfterViewInit {\n  constructor(private _el: ElementRef) {}\n\n  ngAfterViewInit(): void {\n    this.recursiveUnfocusable(this._el.nativeElement);\n  }\n\n  recursiveUnfocusable(el: any): void {\n    el.tabIndex = -1;\n    [...el.children].forEach((childEl: ElementRef) =>\n      this.recursiveUnfocusable(childEl)\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\n\ndeclare global {\n  interface String {\n    getRidOfDiacritics(): string;\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AugmentGlobalTypesHelper {\n  constructor() {\n    String.prototype.getRidOfDiacritics =\n      function getRidOfDiacritics(): string {\n        return this.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n      };\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Observable, defer, finalize, tap } from 'rxjs';\n\nexport function finalizeWithValue<T>(callback: (value: T) => void) {\n  return (source: Observable<T>) =>\n    defer(() => {\n      let lastValue: T;\n      return source.pipe(\n        tap((value) => (lastValue = value)),\n        finalize(() => callback(lastValue))\n      );\n    });\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport moment from 'moment';\n\nexport class CustomValidators {\n  static validDate(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const year: number =\n        control.value !== null && typeof control.value !== 'string'\n          ? control.value.get('year')\n          : moment(control.value).get('year');\n      if (control.value !== null && !/^(19|20)\\d\\d$/.test(year.toString())) {\n        return { isNotAValidDate: true };\n      } else if (control.value === null) {\n        return control.errors;\n      } else {\n        return null;\n      }\n    };\n  }\n\n  static validFormat(format: string[]): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      let regexValidFormat: RegExp;\n      regexValidFormat = new RegExp('.+(\\\\.' + format.join(`|\\\\.`) + ')$');\n      if (!regexValidFormat.test(control.value)) {\n        return {\n          isNotValidFormat: true,\n        };\n      } else {\n        return null;\n      }\n    };\n  }\n\n  static validIntegerCharacters(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const regexPositivInt = /^0$|^[1-9]+\\d*$/;\n      if (\n        control.value != null &&\n        control.value !== '' &&\n        !regexPositivInt.test(control.value)\n      ) {\n        return { isNotInteger: true };\n      } else {\n        return null;\n      }\n    };\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IDataItem } from '../interfaces/data.interface';\n\nexport function filterList(\n  dataList: IDataItem[],\n  searchFilter: string\n): IDataItem[] {\n  return dataList.filter((item: IDataItem) =>\n    item.name.toLocaleUpperCase().includes(searchFilter.toLocaleUpperCase())\n  );\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport _ from 'lodash';\nimport { IAttribute, IConfig } from '../interfaces/configs.interface';\nimport {\n  IData,\n  IDataItem,\n  IDataNode,\n  IDataNodeIdsFields,\n  IEntryIds,\n} from '../interfaces/data.interface';\nimport { IResourceTypeRequestDetail } from '../interfaces/resources-types.interface';\nimport { JsTable } from './jstable.helper';\n\nexport function buildTree(\n  dataTree: JsTable<IData>,\n  configs: JsTable<IConfig>,\n  treeRequestsDetails: IResourceTypeRequestDetail[]\n) {\n  let dataTreeNode: IDataNode[] = [];\n  if (dataTree.allIds.length > 0) {\n    const treeResourcesTypesEndpoints: {\n      [id: string]: string;\n    } = treeRequestsDetails.reduce(\n      (acc, curr) => ({\n        ...acc,\n        [curr.resourceTypeId]: curr.endpoint,\n      }),\n      {}\n    );\n\n    const treeResourcesNamesModelRef: {\n      [id: string]: string;\n    } = treeRequestsDetails.reduce(\n      (acc, curr) => ({\n        ...acc,\n        [curr.resourceTypeId]: configs.byId[\n          curr.resourceTypeId\n        ].attributes.find(\n          (attribute: IAttribute) => attribute.props.isTreeNodeName\n        )?.modelRef,\n      }),\n      {}\n    );\n\n    let flattenJsTable: any[] =\n      dataTree.allIds.length > 1\n        ? _.flattenDeep(\n            dataTree.allIds.map(\n              (resourceTypeId: string) =>\n                dataTree.byId[resourceTypeId].Resources\n            )\n          )\n        : dataTree.byId[dataTree.allIds[0]].Resources;\n\n    const nodesByParentId: {\n      [id: string]: any[];\n    } = _.groupBy(flattenJsTable, (node) =>\n      node.parentId === undefined || node.meta.topAvailableLevel\n        ? 'root'\n        : node.parentId\n    );\n\n    dataTreeNode =\n      flattenJsTable.length > 0\n        ? sortDataNodeByName(\n            buildTreeLevel(\n              nodesByParentId,\n              treeResourcesTypesEndpoints,\n              dataTree.allIds,\n              dataTree.allIds[0],\n              treeResourcesNamesModelRef\n            )\n          )\n        : [];\n  }\n  return dataTreeNode;\n}\n\nexport function buildTreeLevel(\n  nodesByParentId: { [id: string]: any[] },\n  typesEndpoint: { [id: string]: string },\n  allIds: string[],\n  currentResourceTypeId: string,\n  nameModelRef: { [id: string]: string },\n  parentIdForDisplay = null,\n  parentIds: IEntryIds = { id: 'root', externalId: null },\n  levelForPadding = 0,\n  parentLink = ''\n): IDataNode[] {\n  let childrenType: string;\n  if (allIds.length > 1) {\n    const currentResourceTypeIdIndex: number = allIds.indexOf(\n      currentResourceTypeId\n    );\n    childrenType =\n      currentResourceTypeIdIndex < allIds.length - 1\n        ? allIds[currentResourceTypeIdIndex + 1]\n        : null;\n  } else {\n    childrenType = currentResourceTypeId;\n  }\n  let linkPrefix: string = parentLink;\n  if (levelForPadding > 0) {\n    linkPrefix = linkPrefix.concat('/');\n    if (allIds.length > 1) {\n      linkPrefix = linkPrefix.concat(typesEndpoint[currentResourceTypeId], '/');\n    }\n  }\n  return nodesByParentId[parentIds.id].map((data: any) => {\n    const link: string = linkPrefix.concat(\n      encodeURIComponent(data.externalId.toLowerCase())\n    );\n    return {\n      ids: { id: data.id, externalId: data.externalId },\n      name: data[nameModelRef[currentResourceTypeId]],\n      children:\n        data.id in nodesByParentId\n          ? sortDataNodeByName(\n              buildTreeLevel(\n                nodesByParentId,\n                typesEndpoint,\n                allIds,\n                childrenType,\n                nameModelRef,\n                data.id,\n                { id: data.id, externalId: data.externalId },\n                levelForPadding + 1,\n                link\n              )\n            )\n          : [],\n      link,\n      type: currentResourceTypeId,\n      canDelete: data.meta.isDeletable,\n      childrenType: childrenType,\n      levelForPadding,\n      parentIdForDisplay,\n      parentIds,\n    };\n  });\n}\n\nexport function sortDataNodeByName(dataNode: IDataNode[]): IDataNode[] {\n  return dataNode.sort((nodeA: IDataNode, nodeB: IDataNode) =>\n    compareDataNodesNames(nodeA, nodeB)\n  );\n}\n\nexport function compareDataNodesNames(\n  nodeA: IDataNode,\n  nodeB: IDataNode\n): number {\n  return nodeA.name\n    .toLocaleUpperCase()\n    .localeCompare(nodeB.name.toLocaleUpperCase());\n}\n\n// TODO need to be adapted for tree with more than two levels\nexport function cleanAssignDialogTree(\n  dataTree: IDataNode[],\n  assignedResourceTypeId: string\n): IDataNode[] {\n  return dataTree.filter(\n    (node: IDataNode) =>\n      !(\n        node.type !== assignedResourceTypeId &&\n        node.childrenType === assignedResourceTypeId &&\n        (node.children == null || node.children.length === 0)\n      )\n  );\n}\n\nexport function convertDataNodeToDataItem(\n  node: IDataNode,\n  displayedFieldId: string\n): IDataItem {\n  return {\n    ids: node.ids,\n    name: node[displayedFieldId],\n    link: node.link,\n    canDelete: node.canDelete,\n  };\n}\n\nexport function getFlattenTreeIds(dataTree: IDataNode[]): string[] {\n  return dataTree.reduce(\n    (acc, node) => acc.concat(node.ids.id, getFlattenTreeIds(node.children)),\n    []\n  );\n}\n\nexport function getFlattenTree(dataTree: IDataNode[]): IDataNode[] {\n  return dataTree.reduce((acc, node) => {\n    node.children.length > 0\n      ? (acc = acc.concat(node, getFlattenTree(node.children)))\n      : acc.push(node);\n    return acc;\n  }, []);\n}\n\nexport function getNodeById(id: string, tree: IDataNode[]): IDataNode {\n  let node: IDataNode = tree.find(\n    (node) => node.ids.id.toLocaleUpperCase() === id.toLocaleUpperCase()\n  );\n  for (let i = 0; i < tree.length && node === undefined; i++) {\n    node = getNodeById(id, tree[i].children);\n  }\n  return node;\n}\n\nexport function addNodeInDataTree(\n  rootNodes: IDataNode[],\n  parentNodeId: string,\n  nodeToAdd: IDataNode\n): void {\n  if (parentNodeId !== null) {\n    const parentNode = getNodeById(parentNodeId, rootNodes);\n    parentNode.children = sortDataNodeByName([\n      ...parentNode.children,\n      nodeToAdd,\n    ]);\n  } else {\n    rootNodes.push(nodeToAdd);\n    sortDataNodeByName(rootNodes);\n  }\n}\n\nexport function cloneDataTree(dataTree: IDataNode[]): IDataNode[] {\n  let clonedDataTree: IDataNode[] = [];\n  dataTree.forEach((node: IDataNode) => {\n    node.children = cloneDataTree(node.children);\n    clonedDataTree.push(deepCopy(node));\n  });\n  return clonedDataTree;\n}\n\nexport function deepCopy(obj: any) {\n  let copy;\n\n  // Handle the 3 simple types, and null or undefined\n  if (null == obj || 'object' != typeof obj) return obj;\n\n  // Handle Date\n  if (obj instanceof Date) {\n    copy = new Date();\n    copy.setTime(obj.getTime());\n    return copy;\n  }\n\n  // Handle Array\n  if (obj instanceof Array) {\n    copy = [];\n    for (let i = 0, len = obj.length; i < len; i++) {\n      copy[i] = deepCopy(obj[i]);\n    }\n    return copy;\n  }\n\n  // Handle Object\n  if (obj instanceof Object) {\n    copy = {};\n    for (let attr in obj) {\n      if ((Object.prototype.hasOwnProperty.call(obj), attr)) {\n        copy[attr] = deepCopy(obj[attr]);\n      }\n    }\n    return copy;\n  }\n\n  throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n}\n\nexport function filterTree(\n  dataTree: IDataNode[],\n  allNodesIdsNames: IDataNodeIdsFields[],\n  searchFilter: string,\n  isFilteringOnExternalId = false,\n  isAdvancedSearchActivated: boolean,\n  idsMatchingAdvancedSearch: { [id: string]: true }\n): IDataNode[] {\n  const displayedNodesIds: string[] = getDisplayedNodesIdsOnFiltering(\n    allNodesIdsNames,\n    searchFilter,\n    isFilteringOnExternalId,\n    isAdvancedSearchActivated,\n    idsMatchingAdvancedSearch\n  );\n  const displayedNodesIdsExists: { [id: string]: true } = _.fromPairs(\n    displayedNodesIds.map((id) => [id, true])\n  );\n\n  return filterNodes(dataTree, displayedNodesIdsExists);\n}\n\nfunction filterNodes(\n  dataTree: IDataNode[],\n  displayedNodesIdsExists: { [id: string]: true }\n): IDataNode[] {\n  return dataTree\n    .filter((node: IDataNode) => displayedNodesIdsExists[node.ids.id])\n    .map((node: IDataNode) => ({\n      ...node,\n      children:\n        node.children.length > 0\n          ? filterNodes(node.children, displayedNodesIdsExists)\n          : [],\n    }));\n}\n\nfunction getDisplayedNodesIdsOnFiltering(\n  allNodesIdsNames: IDataNodeIdsFields[],\n  searchFilter: string,\n  isFilteringOnExternalId = false,\n  isAdvancedSearchActivated = false,\n  idsMatchingAdvancedSearch: { [id: string]: true } = {}\n): string[] {\n  const allDisplayedNodesIds: string[] = [];\n  const allDisplayedNodesIdsExists: { [id: string]: true } = {};\n  const allNodeById = _.fromPairs(\n    allNodesIdsNames.map((node) => [node.ids.id, node])\n  );\n\n  const nodesMatchingSearch: IDataNodeIdsFields[] = allNodesIdsNames.filter(\n    (nodeIds: IDataNodeIdsFields) =>\n      isNodeMatchingSearch(\n        searchFilter,\n        nodeIds.name,\n        isFilteringOnExternalId,\n        nodeIds.ids,\n        isAdvancedSearchActivated,\n        idsMatchingAdvancedSearch,\n        false\n      )\n  );\n\n  nodesMatchingSearch.forEach((node: IDataNodeIdsFields) => {\n    let currentNode: IDataNodeIdsFields = node;\n\n    while (\n      currentNode.parentId !== null &&\n      allNodeById[currentNode.parentId] !== undefined &&\n      !allDisplayedNodesIdsExists[currentNode.ids.id]\n    ) {\n      allDisplayedNodesIds.push(currentNode.ids.id);\n      allDisplayedNodesIdsExists[currentNode.ids.id] = true;\n      currentNode = allNodeById[currentNode.parentId];\n    }\n    if (\n      (currentNode.parentId === null ||\n        !(allNodeById[currentNode.parentId] !== undefined)) &&\n      !allDisplayedNodesIdsExists[currentNode.ids.id]\n    ) {\n      allDisplayedNodesIds.push(currentNode.ids.id);\n      allDisplayedNodesIdsExists[currentNode.ids.id] = true;\n    }\n  });\n\n  return allDisplayedNodesIds;\n}\n\nexport function isNodeMatchingSearch(\n  searchValue: string,\n  nodeName: string,\n  isFilteringOnExternalId = false,\n  nodeIds: IEntryIds = null,\n  isAdvancedSearchActivated = false,\n  idsMatchingAdvancedSearch: { [id: string]: true } = {},\n  checkEmptySearch = true\n): boolean {\n  const upperCaseFilter: string = searchValue\n    .getRidOfDiacritics()\n    .toLocaleUpperCase();\n\n  const isNameMatchingSearchValue: boolean = nodeName\n    .toLocaleUpperCase()\n    .getRidOfDiacritics()\n    .includes(upperCaseFilter);\n\n  const isMatchingSearchValue: boolean = isFilteringOnExternalId\n    ? isNameMatchingSearchValue ||\n      nodeIds.externalId\n        .toLocaleUpperCase()\n        .getRidOfDiacritics()\n        .includes(upperCaseFilter)\n    : isNameMatchingSearchValue;\n\n  const isMatchingAdvancedSearch: boolean =\n    (isAdvancedSearchActivated && idsMatchingAdvancedSearch[nodeIds.id]) ||\n    !isAdvancedSearchActivated;\n\n  return checkEmptySearch\n    ? (searchValue === '' || isMatchingSearchValue) && isMatchingAdvancedSearch\n    : isMatchingSearchValue && isMatchingAdvancedSearch;\n}\n\nexport function getAllChildrenLength(\n  node: IDataNode,\n  expandedNodesIds: string[] = null\n): number {\n  let nbChildren = 0;\n  if (expandedNodesIds === null || expandedNodesIds.includes(node.ids.id)) {\n    nbChildren =\n      node.children.length +\n      node.children.reduce(\n        (acc, curr) => acc + getAllChildrenLength(curr, expandedNodesIds),\n        0\n      );\n  }\n  return nbChildren;\n}\n\nexport function getFirstDisplayedIndex(\n  flattenDataTreeIds: string[],\n  selectedNodeId: string,\n  nbMaxDisplayedNodes: number\n): number {\n  if (selectedNodeId === null || selectedNodeId === undefined) {\n    return 0;\n  }\n  const index = flattenDataTreeIds.indexOf(selectedNodeId);\n  const isNodeInFirstBatch: boolean = index < nbMaxDisplayedNodes;\n  return isNodeInFirstBatch ? 0 : index;\n}\n\nexport function getFlattenDisplayedTreeIds(\n  dataTree: IDataNode[],\n  expandedNodesIds: Set<string>\n): string[] {\n  return dataTree.reduce((acc, node) => {\n    node.children.length > 0 && expandedNodesIds.has(node.ids.id)\n      ? (acc = acc.concat(\n          node.ids.id,\n          getFlattenDisplayedTreeIds(node.children, expandedNodesIds)\n        ))\n      : acc.push(node.ids.id);\n    return acc;\n  }, []);\n}\n\nexport function getGreatestNodesMinWidth(\n  nodeWidthMap: Map<string, number>,\n  currentNodeMaxWidth: number\n): number {\n  if (nodeWidthMap.size > 0) {\n    return Math.max(...nodeWidthMap.values());\n  }\n  return currentNodeMaxWidth;\n}\n\nexport function getSelectedNodes(\n  selectedNodeId: string,\n  tree: IDataNode[],\n  currentNodeUuId: string = null\n): string[] {\n  let selectedNodesId = [];\n  if (\n    tree.some((child) => child.ids.id === selectedNodeId) &&\n    !!currentNodeUuId\n  ) {\n    selectedNodesId.push(currentNodeUuId);\n  } else {\n    for (const node of tree) {\n      selectedNodesId = getSelectedNodes(\n        selectedNodeId,\n        node.children,\n        node.ids.id\n      );\n      if (selectedNodesId.length > 0) {\n        return (selectedNodesId = !selectedNodesId.includes(node.ids.id)\n          ? [node.ids.id, ...selectedNodesId]\n          : selectedNodesId);\n      }\n    }\n  }\n  return selectedNodesId;\n}\n\nexport function setNodeIdWidthMap(\n  nodeWidthMap: Map<string, number>,\n  flattenDataTreeIds: string[],\n  isSelectOnlyModeEnabled: boolean\n): void {\n  [...nodeWidthMap.keys()].forEach((id: string) => {\n    if (!flattenDataTreeIds.includes(id)) {\n      nodeWidthMap.delete(id);\n    }\n  });\n\n  const allNodesNames: HTMLCollectionOf<Element> =\n    document.getElementsByClassName('data-name');\n  Array.from(allNodesNames).forEach((nodeName: Element) => {\n    if (nodeName.id !== '' && flattenDataTreeIds.includes(nodeName.id)) {\n      const nodeInTemplateId: string = isSelectOnlyModeEnabled\n        ? 'selected-mode-node-' + nodeName.id\n        : 'node-' + nodeName.id;\n      const nodeInTemplate: Element = document.getElementById(nodeInTemplateId);\n      if (nodeInTemplate) {\n        nodeWidthMap.set(\n          nodeName.id,\n          getNodeWidth(nodeName.clientWidth, nodeInTemplate)\n        );\n      }\n    }\n  });\n}\n\nfunction getNodeWidth(nodeNameWidth: number, nodeInTemplate: Element): number {\n  const nodePadding = Number(\n    window.getComputedStyle(nodeInTemplate).paddingLeft.replace('px', '')\n  );\n\n  let nodeActionButtonsWidth = 0;\n  const nodeActionButtons: HTMLCollectionOf<Element> =\n    nodeInTemplate.getElementsByClassName('mdc-icon-button');\n  if (nodeActionButtons.length > 0) {\n    Array.from(nodeActionButtons).forEach(\n      (button: Element) => (nodeActionButtonsWidth += button.clientWidth)\n    );\n  }\n\n  let btnNodePadding = 0;\n  const btnNode: HTMLCollectionOf<Element> =\n    nodeInTemplate.getElementsByClassName('btn-node');\n  if (btnNode.length > 0) {\n    Array.from(btnNode).forEach((button: Element) => {\n      const paddingLeft = Number(\n        window.getComputedStyle(button).paddingLeft.replace('px', '')\n      );\n      const paddingRight = Number(\n        window.getComputedStyle(button).paddingRight.replace('px', '')\n      );\n      btnNodePadding = btnNodePadding + paddingLeft + paddingRight;\n    });\n  }\n  return (\n    getMatTreePadding() +\n    nodePadding +\n    nodeActionButtonsWidth +\n    btnNodePadding +\n    nodeNameWidth\n  );\n}\n\nexport function getMatTreePadding(): number {\n  let matTreePadding = 0;\n  const matTree: HTMLCollectionOf<Element> =\n    document.getElementsByClassName('gnc-tree');\n  if (matTree.length > 0) {\n    const paddingLeft = Number(\n      window.getComputedStyle(matTree.item(0)).paddingLeft.replace('px', '')\n    );\n    const paddingRight = Number(\n      window.getComputedStyle(matTree.item(0)).paddingRight.replace('px', '')\n    );\n    matTreePadding = paddingLeft + paddingRight;\n  }\n  return matTreePadding;\n}\n\nexport function updateNodeName(\n  selectedNodeId: string,\n  dataTree: IDataNode[],\n  newNodeName: string\n): void {\n  let selectedNode: IDataNode = getNodeById(selectedNodeId, dataTree);\n  selectedNode.name = newNodeName;\n}\n\nexport function updateSubTreelinks(\n  nodeId: string,\n  dataTree: IDataNode[],\n  newExternalId: string = null\n) {\n  let node: IDataNode = getNodeById(nodeId, dataTree);\n  if (newExternalId) {\n    node.ids.externalId = newExternalId;\n    updateNodeLink(node, newExternalId);\n    node = getUpdatedChildrenParentIds(node, newExternalId);\n  } else {\n    let parentNode: IDataNode = getNodeById(node.parentIds.id, dataTree);\n    updateNodeLinkOnParentChange(node, parentNode);\n  }\n  updateChildrenLinks(node);\n}\n\nfunction getUpdatedChildrenParentIds(\n  node: IDataNode,\n  newNodeExternalId: string\n): IDataNode {\n  return {\n    ...node,\n    children: node.children.map((childNode: IDataNode) => {\n      childNode.parentIds.externalId = newNodeExternalId;\n      return childNode;\n    }),\n  };\n}\n\nfunction updateNodeLink(node: IDataNode, newNodeExternalId: string): void {\n  node.link = node.link.replace(\n    /[^/]+$/g,\n    encodeURIComponent(newNodeExternalId)\n  );\n}\n\nfunction updateNodeLinkOnParentChange(\n  node: IDataNode,\n  parentNode: IDataNode\n): void {\n  const parentLink: string = parentNode ? parentNode.link.concat('/') : '';\n  const parentType: string = parentNode ? parentNode.type : null;\n  node.link = parentLink.concat(getUrlLastParts(parentType, node));\n}\n\nfunction updateChildrenLinks(node: IDataNode): void {\n  node.children.forEach((childNode: IDataNode) => {\n    childNode.link = node.link.concat(\n      '/',\n      getUrlLastParts(node.type, childNode)\n    );\n    updateChildrenLinks(childNode);\n  });\n}\n\nfunction getUrlLastParts(parentType: string, childNode: IDataNode): string {\n  if (parentType === null || parentType === childNode.type) {\n    return childNode.ids.externalId;\n  } else {\n    const urlLastPartsRegex = new RegExp('[^/]+/[^/]+$', 'g');\n    return childNode.link.match(urlLastPartsRegex).toString();\n  }\n}\n\nexport function getFlattenTreeWithoutTriggeredNodeChildren(\n  dataTree: IDataNode[],\n  triggerNodeId: string\n): IDataNode[] {\n  return dataTree.reduce((acc, node) => {\n    if (node.ids.id.toLocaleUpperCase() !== triggerNodeId.toLocaleUpperCase()) {\n      node.children.length > 0\n        ? (acc = acc.concat(\n            node,\n            getFlattenTreeWithoutTriggeredNodeChildren(\n              node.children,\n              triggerNodeId\n            )\n          ))\n        : acc.push(node);\n    }\n    return acc;\n  }, []);\n}\n\nexport function getParentNodeId(\n  childNodeId: string,\n  dataTree: IDataNode[]\n): string {\n  const childNode: IDataNode = getNodeById(childNodeId, dataTree);\n  return !!childNode ? childNode.parentIds.id : 'root';\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  IAttributeActions,\n  IBtnLabel,\n  IPrimitiveActions,\n} from '../interfaces/configs.interface';\nimport {\n  IDataItem,\n  IDataNode,\n  IDataSourceRow,\n  IUiEntryIds,\n} from '../interfaces/data.interface';\nimport { FormFieldsPrimitiveTypes } from '../interfaces/form.interface';\nimport {\n  EEllipsisMenuActions,\n  EUIComponent,\n  IEllipsisMenu,\n  IEllipsisMenuOptions,\n} from '../interfaces/ui.interface';\nimport { setActionTitleVariables } from './configs.helper';\n\nexport function getEditedDataSourceRow(\n  oldRow: IDataSourceRow,\n  valueColumnId: string,\n  editFormValues: { [id: string]: FormFieldsPrimitiveTypes }\n): IDataSourceRow {\n  return {\n    ...oldRow,\n    [valueColumnId]: editFormValues[oldRow.selectionIds.id],\n  };\n}\n\nexport function getEditedDataSourceRows(\n  selectedElementsUiIds: IUiEntryIds[],\n  oldRows: IDataSourceRow[],\n  valueColumnId: string,\n  editFormValues: { [id: string]: FormFieldsPrimitiveTypes }\n): IDataSourceRow[] {\n  let editedRows: IDataSourceRow[] = [];\n  editedRows = selectedElementsUiIds.map((ids: IUiEntryIds) => {\n    const associatedRow: IDataSourceRow = oldRows.find(\n      (row: IDataSourceRow) => row.selectionIds.id === ids.id\n    );\n    return {\n      ...associatedRow,\n      [valueColumnId]: editFormValues[associatedRow.selectionIds.id],\n    };\n  });\n  return editedRows;\n}\n\nexport function getLabels(\n  uiComponent: EUIComponent,\n  actions: IPrimitiveActions | IAttributeActions,\n  options: IEllipsisMenuOptions,\n  node: IDataNode,\n  item: IDataItem\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  if (!!uiComponent) {\n    switch (uiComponent) {\n      case EUIComponent.DATA_DETAIL:\n        if (!!options) {\n          ellipsisBtns = options.isForRow\n            ? getEllipsisBtnsForDataDetailArrayRow(actions, options)\n            : getEllipsisBtnsForDataDetailArrayHeader(actions, options);\n        }\n        break;\n      case EUIComponent.ARRAY_DATA:\n        if (!!options) {\n          ellipsisBtns = options.isForRow\n            ? getEllipsisBtnsForArrayDataTableRow(actions, options.canDelete)\n            : getEllipsisBtnsForArrayDataTableHeader(\n                actions,\n                options.canDelete\n              );\n        }\n        break;\n      case EUIComponent.LIST_DATA:\n        ellipsisBtns = getEllipsisBtnsForListDataItem(actions, item);\n        break;\n      case EUIComponent.TREE_DATA:\n        if (!!options) {\n          ellipsisBtns = getEllipsisBtnsForTreeDataNode(\n            actions,\n            options.canCreateChild,\n            node\n          );\n        }\n        break;\n    }\n  }\n  return ellipsisBtns;\n}\n\nexport function getEllipsisBtnsForDataDetailArrayRow(\n  actions: IPrimitiveActions | IAttributeActions,\n  options: IEllipsisMenuOptions\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  const actionsIds: string[] = Object.keys(actions);\n  if (options.canMove) {\n    if (actionsIds.includes(EEllipsisMenuActions.SINGLE_REASSIGN)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.SINGLE_REASSIGN]: {\n          ...actions[EEllipsisMenuActions.SINGLE_REASSIGN],\n          canBeDisabled: false,\n        },\n      };\n    }\n    if (actionsIds.includes(EEllipsisMenuActions.SINGLE_UNASSIGN)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.SINGLE_UNASSIGN]: {\n          ...actions[EEllipsisMenuActions.SINGLE_UNASSIGN],\n          canBeDisabled: false,\n        },\n      };\n    }\n  }\n  if (options.canDelete) {\n    if (actionsIds.includes(EEllipsisMenuActions.SINGLE_DELETE)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.SINGLE_DELETE]: {\n          ...actions[EEllipsisMenuActions.SINGLE_DELETE],\n          canBeDisabled: false,\n        },\n      };\n    }\n  }\n  if (actionsIds.includes(EEllipsisMenuActions.SINGLE_EDIT)) {\n    ellipsisBtns = {\n      ...ellipsisBtns,\n      [EEllipsisMenuActions.SINGLE_EDIT]: {\n        ...actions[EEllipsisMenuActions.SINGLE_EDIT],\n        canBeDisabled: false,\n      },\n    };\n  }\n  return ellipsisBtns;\n}\n\nexport function getEllipsisBtnsForDataDetailArrayHeader(\n  actions: IPrimitiveActions | IAttributeActions,\n  options: IEllipsisMenuOptions\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  const actionsIds: string[] = Object.keys(actions);\n  if (actionsIds.includes(EEllipsisMenuActions.EXPORT)) {\n    ellipsisBtns = {\n      [EEllipsisMenuActions.EXPORT]: {\n        ...actions[EEllipsisMenuActions.EXPORT],\n        canBeDisabled: false,\n      },\n    };\n  }\n  if (actionsIds.includes(EEllipsisMenuActions.MULTIPLE_EDIT)) {\n    ellipsisBtns = {\n      ...ellipsisBtns,\n      [EEllipsisMenuActions.MULTIPLE_EDIT]: {\n        ...actions[EEllipsisMenuActions.MULTIPLE_EDIT],\n        canBeDisabled: true,\n      },\n    };\n  }\n  if (options.canMove) {\n    if (actionsIds.includes(EEllipsisMenuActions.MULTIPLE_REASSIGN)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.MULTIPLE_REASSIGN]: {\n          ...actions[EEllipsisMenuActions.MULTIPLE_REASSIGN],\n          canBeDisabled: true,\n        },\n      };\n    }\n    if (actionsIds.includes(EEllipsisMenuActions.MULTIPLE_UNASSIGN)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.MULTIPLE_UNASSIGN]: {\n          ...actions[EEllipsisMenuActions.MULTIPLE_UNASSIGN],\n          canBeDisabled: true,\n        },\n      };\n    }\n  }\n  if (options.canDelete) {\n    if (actionsIds.includes(EEllipsisMenuActions.MULTIPLE_DELETE)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.MULTIPLE_DELETE]: {\n          ...actions[EEllipsisMenuActions.MULTIPLE_DELETE],\n          canBeDisabled: true,\n        },\n      };\n    }\n  }\n  return ellipsisBtns;\n}\n\nexport function getEllipsisBtnsForArrayDataTableRow(\n  actions: IPrimitiveActions | IAttributeActions,\n  canDelete: boolean\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  const actionsIds: string[] = Object.keys(actions);\n  if (canDelete && actionsIds.includes(EEllipsisMenuActions.SINGLE_DELETE)) {\n    ellipsisBtns = {\n      [EEllipsisMenuActions.SINGLE_DELETE]: {\n        ...actions[EEllipsisMenuActions.SINGLE_DELETE],\n        canBeDisabled: false,\n      },\n    };\n  }\n  return ellipsisBtns;\n}\n\nexport function getEllipsisBtnsForArrayDataTableHeader(\n  actions: IPrimitiveActions | IAttributeActions,\n  canDelete: boolean\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  const actionsIds: string[] = Object.keys(actions);\n\n  if (actionsIds.includes(EEllipsisMenuActions.EXPORT)) {\n    ellipsisBtns = {\n      [EEllipsisMenuActions.EXPORT]: {\n        ...actions[EEllipsisMenuActions.EXPORT],\n        canBeDisabled: false,\n      },\n    };\n  }\n\n  if (canDelete && actionsIds.includes(EEllipsisMenuActions.MULTIPLE_DELETE)) {\n    ellipsisBtns = {\n      ...ellipsisBtns,\n      [EEllipsisMenuActions.MULTIPLE_DELETE]: {\n        ...actions[EEllipsisMenuActions.MULTIPLE_DELETE],\n        canBeDisabled: true,\n      },\n    };\n  }\n  return ellipsisBtns;\n}\n\nexport function getEllipsisBtnsForTreeDataNode(\n  actions: IPrimitiveActions | IAttributeActions,\n  canCreateChild: boolean,\n  node: IDataNode\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  const actionsIds: string[] = Object.keys(actions);\n  if (actionsIds.includes(EEllipsisMenuActions.MOVE_NODE)) {\n    const moveAction: IBtnLabel = setActionTitleVariables(\n      [node.name],\n      actions[EEllipsisMenuActions.MOVE_NODE],\n      EEllipsisMenuActions.MOVE_NODE\n    );\n    ellipsisBtns = {\n      ...ellipsisBtns,\n      [EEllipsisMenuActions.MOVE_NODE]: {\n        ...moveAction,\n        canBeDisabled: false,\n      },\n    };\n  }\n  if (!!node && node.canDelete) {\n    if (node.type === node.childrenType) {\n      if (\n        node.children.length > 1 &&\n        actionsIds.includes(EEllipsisMenuActions.DELETE_CHILDREN)\n      ) {\n        ellipsisBtns = {\n          ...ellipsisBtns,\n          [EEllipsisMenuActions.DELETE_CHILDREN]: {\n            ...actions[EEllipsisMenuActions.DELETE_CHILDREN],\n            canBeDisabled: false,\n          },\n        };\n      } else if (\n        node.children.length === 1 &&\n        actionsIds.includes(EEllipsisMenuActions.DELETE_CHILD)\n      ) {\n        ellipsisBtns = {\n          ...ellipsisBtns,\n          [EEllipsisMenuActions.DELETE_CHILD]: {\n            ...actions[EEllipsisMenuActions.DELETE_CHILD],\n            canBeDisabled: false,\n          },\n        };\n      } else if (actionsIds.includes(EEllipsisMenuActions.DELETE)) {\n        ellipsisBtns = {\n          ...ellipsisBtns,\n          [EEllipsisMenuActions.DELETE]: {\n            ...actions[EEllipsisMenuActions.DELETE],\n            canBeDisabled: false,\n          },\n        };\n      }\n    } else if (actionsIds.includes(EEllipsisMenuActions.DELETE)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.DELETE]: {\n          ...actions[EEllipsisMenuActions.DELETE],\n          canBeDisabled: false,\n        },\n      };\n    }\n  }\n  if (canCreateChild) {\n    if (actionsIds.includes(EEllipsisMenuActions.ADD_CHILDREN)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.ADD_CHILDREN]: {\n          ...actions[EEllipsisMenuActions.ADD_CHILDREN],\n          canBeDisabled: false,\n        },\n      };\n    } else if (actionsIds.includes(EEllipsisMenuActions.ADD)) {\n      ellipsisBtns = {\n        ...ellipsisBtns,\n        [EEllipsisMenuActions.ADD]: {\n          ...actions[EEllipsisMenuActions.ADD],\n          canBeDisabled: false,\n        },\n      };\n    }\n  }\n  return ellipsisBtns;\n}\n\nexport function getEllipsisBtnsForListDataItem(\n  actions: IPrimitiveActions | IAttributeActions,\n  item: IDataItem\n): IEllipsisMenu {\n  let ellipsisBtns: IEllipsisMenu = {};\n  const actionsIds: string[] = Object.keys(actions);\n  if (!!item && item.canDelete) {\n    if (actionsIds.includes(EEllipsisMenuActions.DELETE)) {\n      ellipsisBtns = {\n        [EEllipsisMenuActions.DELETE]: {\n          ...actions[EEllipsisMenuActions.DELETE],\n          canBeDisabled: false,\n        },\n      };\n    }\n  }\n  return ellipsisBtns;\n}\n\nexport function getMapIdValue(\n  selectedElementsIds: IUiEntryIds[],\n  rows: IDataSourceRow[],\n  valueColumnId: string\n): Map<string, string> {\n  return selectedElementsIds.reduce(\n    (acc, currIds) =>\n      acc.set(\n        currIds.id,\n        rows.find((row: IDataSourceRow) => row.selectionIds.id === currIds.id)[\n          valueColumnId\n        ]\n      ),\n    new Map<string, string>()\n  );\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  AbstractControl,\n  FormGroup,\n  FormGroupDirective,\n  NgForm,\n  ValidationErrors,\n  ValidatorFn,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { IAttribute } from '../interfaces/configs.interface';\nimport {\n  EComponentName,\n  FormDataValueTypes,\n  IDataDetail,\n  IDataDetailResource,\n  IFormData,\n  ILink,\n} from '../interfaces/data.interface';\nimport {\n  FormFieldsAllTypes,\n  FormFieldsExtendedSingleTypes,\n  IAutocompleteOption,\n  IFormFieldControl,\n  IInitFormsAutocompleteField,\n  ISelectOption,\n} from '../interfaces/form.interface';\nimport { IAdvancedSearchChip } from '../interfaces/ui.interface';\nimport { isArrayOfLinkObjects, isLinkObject } from './data-table.helper';\n\nexport function getAdvancedSearchChipsFromFormData(\n  formData: IFormData[]\n): IAdvancedSearchChip[] {\n  let advancedSearchChips: IAdvancedSearchChip[] = [];\n  formData\n    .filter((field: IFormData) => !!field.dataValue)\n    .forEach((field: IFormData) => {\n      const label: string = field.value.label.value.short;\n      const booleanDisplayedValue: string =\n        field.value?.field.props.displayedValue?.true;\n      const displayedValue: string =\n        booleanDisplayedValue ??\n        ((field.dataValue as ILink).label || field.dataValue.toString());\n\n      let chip: IAdvancedSearchChip = {\n        modelRef: field.modelRef,\n        displayedContent: label + ': ' + displayedValue,\n        value: field.dataValue as string | boolean | ILink,\n      };\n      if (field.value.field.componentName === EComponentName.select) {\n        const convertedField: IFormData =\n          convertSelectOptionForAdvancedSearch(field);\n        chip = {\n          ...chip,\n          modelRef: convertedField.modelRef,\n          associatedFieldId: field.modelRef,\n        };\n      }\n      advancedSearchChips.push(chip);\n    });\n  return advancedSearchChips;\n}\n\nfunction convertSelectOptionForAdvancedSearch(field: IFormData): IFormData {\n  const fieldValue: string = isLinkObject(field.dataValue)\n    ? (field.dataValue as ILink).id\n    : (field.dataValue as string);\n  const selectedOption: ISelectOption =\n    field.value.field.selectOption.props.options.find(\n      (option: ISelectOption) =>\n        getSelectionOptionValue(option).toLocaleUpperCase() ===\n        fieldValue.toLocaleUpperCase()\n    );\n  return {\n    ...field,\n    modelRef: selectedOption.attributeId ?? field.modelRef,\n  };\n}\n\nexport function getSelectionOptionValue(option: ISelectOption): string {\n  return isLinkObject(option.value)\n    ? (option.value as ILink).id\n    : (option.value as string);\n}\n\nexport function setFormFieldDataValue(\n  formData: IFormData,\n  dataValue: FormDataValueTypes,\n  dateDisplayFormat: string\n): void {\n  let formDataValue: FormDataValueTypes;\n  if (\n    formData.value.field.componentName === EComponentName.datepicker &&\n    !!dataValue\n  ) {\n    formDataValue = moment(dataValue as string, dateDisplayFormat).format(\n      'YYYY-MM-DD'\n    );\n  } else if (\n    formData.value.field.componentName === EComponentName.slideToggle\n  ) {\n    formDataValue = dataValue as boolean;\n  } else {\n    formDataValue = dataValue as string | boolean | ILink | ILink[];\n  }\n\n  formData.dataValue = formDataValue;\n}\n\nexport function getFormFieldError(\n  formFieldControl: AbstractControl,\n  attributeConfig: IAttribute\n): string {\n  let formFieldErrorMessage: string;\n  if (formFieldControl && formFieldControl.invalid && formFieldControl.dirty) {\n    const errorMessages: { [errorId: string]: string } =\n      attributeConfig.value.error.value;\n    for (const key in formFieldControl.errors) {\n      formFieldErrorMessage = errorMessages[key];\n    }\n  }\n  return formFieldErrorMessage;\n}\n\nexport function setDataAttribute(\n  data:\n    | string\n    | string[]\n    | boolean\n    | IDataDetailResource\n    | IDataDetailResource[],\n  attributeConfig: IAttribute,\n  dateDisplayFormat: string\n): IDataDetail {\n  return {\n    id: attributeConfig.modelRef,\n    isVisible: attributeConfig.props.isNotVisibleWhenFalse\n      ? (data as boolean)\n      : attributeConfig.props.isVisible,\n    isBackendLinkObject: !!attributeConfig.props.isBackendLinkObject\n      ? attributeConfig.props.isBackendLinkObject\n      : false,\n    isExternalLink: !!attributeConfig.props.isExternalLink\n      ? attributeConfig.props.isExternalLink\n      : false,\n    isMultiple: !!attributeConfig.props.isMultiple\n      ? attributeConfig.props.isMultiple\n      : false,\n    icon: attributeConfig.value.icon.value,\n    componentName: attributeConfig.value.field.componentName,\n    label: {\n      long: attributeConfig.value.label.value.long,\n      short: attributeConfig.value.label.value.short,\n    },\n    dataValue: getConvertedDataValue(data, attributeConfig, dateDisplayFormat),\n    booleanDisplayedValue: getConvertedBooleanToString(data, attributeConfig),\n  };\n}\n\nfunction getConvertedDataValue(\n  data:\n    | string\n    | string[]\n    | boolean\n    | IDataDetailResource\n    | IDataDetailResource[],\n  attributeConfig: IAttribute,\n  dateDisplayFormat: string\n): string | string[] | boolean | IDataDetailResource | IDataDetailResource[] {\n  if (\n    Array.isArray(data) &&\n    !attributeConfig.props.isBackendLinkObject &&\n    attributeConfig.value.field.componentName === EComponentName.input\n  ) {\n    return (data as string[]).join(', ');\n  } else if (\n    attributeConfig.value.field.componentName === EComponentName.datepicker\n  ) {\n    return moment(data as string, dateDisplayFormat).format(dateDisplayFormat);\n  } else if (\n    attributeConfig.value.field.componentName === EComponentName.slideToggle\n  ) {\n    return convertDataToBoolean(\n      data,\n      attributeConfig.value.field.props?.convertToString,\n      attributeConfig.value.field.props?.displayedValue.false\n    );\n  } else {\n    return data;\n  }\n}\n\nfunction getConvertedBooleanToString(\n  data:\n    | string\n    | string[]\n    | boolean\n    | IDataDetailResource\n    | IDataDetailResource[],\n  attributeConfig: IAttribute\n): string {\n  if (\n    attributeConfig.value.field.componentName === EComponentName.slideToggle\n  ) {\n    return convertDataToBoolean(\n      data,\n      attributeConfig.value.field.props?.convertToString,\n      attributeConfig.value.field.props?.displayedValue.false\n    )\n      ? attributeConfig.value.field.props.displayedValue.true\n      : attributeConfig.value.field.props.displayedValue.false;\n  } else return null;\n}\n\nfunction convertDataToBoolean(\n  data: any,\n  convertToString: boolean,\n  falseConditionValue: string\n): boolean {\n  if (convertToString) {\n    return data !== falseConditionValue;\n  } else {\n    return data;\n  }\n}\n\nexport class FormErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(\n    control: AbstractControl | null,\n    _form: FormGroupDirective | NgForm | null\n  ): boolean {\n    return control?.invalid && control?.dirty;\n  }\n}\n\nexport function concatOldValuesToNewValue(\n  valuesForm: any,\n  formData: IFormData[],\n  prefix?: string\n): any {\n  formData.forEach((field: IFormData) => {\n    if (valuesForm[field.modelRef] && field.props.isConcatWithPreviousValue) {\n      const oldValue: string = field.dataValue as string;\n      const newValue: string = prefix + valuesForm[field.modelRef];\n      valuesForm[field.modelRef] = concatTextAreaContent(newValue, oldValue);\n    }\n  });\n  return valuesForm;\n}\n\nexport function concatTextAreaContent(\n  addedText: string,\n  currentText?: string\n): string {\n  const addedTextCompressedNewLineEscape: string = addedText.replace(\n    /\\n+/g,\n    '\\n'\n  );\n  if (currentText) {\n    return currentText + '\\n\\n' + addedTextCompressedNewLineEscape;\n  } else {\n    return addedTextCompressedNewLineEscape;\n  }\n}\n\nexport function convertAutocompleteInputValueForRequestBody(\n  checkoutFormValues: {\n    [id: string]: FormFieldsExtendedSingleTypes;\n  },\n  autocompleteOptions: {\n    [modelRef: string]: IAutocompleteOption[];\n  },\n  formPreviousState: {\n    [key: string]: IFormFieldControl;\n  },\n  loadedAutocompletesModelRef: string[]\n): {\n  [id: string]: FormDataValueTypes;\n} {\n  const autocompleteFieldsModelRefs: string[] =\n    Object.keys(autocompleteOptions);\n  const checkoutFormModelRefs: string[] = Object.keys(checkoutFormValues);\n\n  return checkoutFormModelRefs.reduce(\n    (acc, curr) => ({\n      ...acc,\n      [curr]:\n        autocompleteFieldsModelRefs.includes(curr) &&\n        loadedAutocompletesModelRef.includes(curr)\n          ? convertAutocompleteOptionToBodyValue(\n              autocompleteOptions[curr],\n              checkoutFormValues[curr] as string | IAutocompleteOption,\n              formPreviousState[curr].value as IAutocompleteOption[]\n            )\n          : (checkoutFormValues[curr] as FormDataValueTypes),\n    }),\n    {}\n  );\n}\n\nfunction convertAutocompleteOptionToBodyValue(\n  autocompleteOptions: IAutocompleteOption[],\n  checkoutFormFieldValue: string | IAutocompleteOption,\n  formPreviousStateFieldValue: IAutocompleteOption | IAutocompleteOption[]\n): ILink | ILink[] {\n  let valueForRequestBody: ILink | ILink[] = null;\n  const allCurrentFieldOptions: string[] = autocompleteOptions.map(\n    (option: IAutocompleteOption) => option.option.toLocaleUpperCase()\n  );\n  if (Array.isArray(formPreviousStateFieldValue)) {\n    valueForRequestBody = [\n      ...(formPreviousStateFieldValue as IAutocompleteOption[]).map(\n        (fieldOption: IAutocompleteOption) => fieldOption.value\n      ),\n    ];\n  } else if (!!checkoutFormFieldValue) {\n    const currentFieldValue: string | IAutocompleteOption =\n      checkoutFormFieldValue;\n    if (typeof currentFieldValue === 'string') {\n      if (\n        allCurrentFieldOptions.includes(currentFieldValue.toLocaleUpperCase())\n      ) {\n        valueForRequestBody = convertInputValueToAutocompleteOption(\n          currentFieldValue,\n          autocompleteOptions\n        ).value;\n      }\n    } else {\n      valueForRequestBody = currentFieldValue.value;\n    }\n  }\n  return valueForRequestBody;\n}\n\nexport function convertInputValueToAutocompleteOption(\n  inputValue: string,\n  autocompleteOptions: IAutocompleteOption[]\n): IAutocompleteOption {\n  return autocompleteOptions.find(\n    (option: IAutocompleteOption) =>\n      option.option.toLocaleUpperCase() === inputValue.toLocaleUpperCase()\n  );\n}\n\nexport function convertBooleanToString(\n  valuesForm: any,\n  formConfig: IFormData[]\n): any {\n  formConfig.forEach((config) => {\n    if (\n      config.value.field.props.convertToString &&\n      Object.prototype.hasOwnProperty.call(valuesForm, config.modelRef)\n    ) {\n      valuesForm = {\n        ...valuesForm,\n        [config.modelRef]: valuesForm[config.modelRef]\n          ? config.value.field.props.trueConditionValue\n          : config.value.field.props.falseConditionValue,\n      };\n    }\n  });\n  return valuesForm;\n}\n\nexport function convertToScimObject(\n  valuesForm: any,\n  formConfig: IFormData[],\n  entryId: string,\n  dataElementExternalId: string,\n  schemas: string[]\n): any {\n  valuesForm = {\n    schemas,\n    id: entryId,\n    externalId: dataElementExternalId || 'new entry',\n    ...valuesForm,\n  };\n  formConfig.forEach((config) => {\n    if (\n      config.props.scimParentAttribute != null &&\n      config.modelRef in valuesForm\n    ) {\n      const scimParentId: string = config.props.scimParentAttribute;\n      valuesForm = {\n        ...valuesForm,\n        [scimParentId]: {\n          ...valuesForm[scimParentId],\n          [config.modelRef]: valuesForm[config.modelRef],\n        },\n      };\n      delete valuesForm[config.modelRef];\n    }\n\n    if (\n      config.props?.isNotVisibleWhenFalse &&\n      valuesForm[config.modelRef] === false\n    ) {\n      delete valuesForm[config.modelRef];\n    }\n  });\n  return valuesForm;\n}\n\nexport function formatDatepickerForm(\n  valuesForm: any,\n  formConfig: IFormData[],\n  dateDisplayFormat: string\n): any {\n  formConfig.forEach((config) => {\n    if (Object.prototype.hasOwnProperty.call(valuesForm, config.modelRef)) {\n      valuesForm = {\n        ...valuesForm,\n        [config.modelRef]:\n          config.value.field.componentName === EComponentName.datepicker &&\n          valuesForm[config.modelRef]\n            ? moment(valuesForm[config.modelRef]).creationData().format ===\n              'YYYY-MM-DD'\n              ? moment(valuesForm[config.modelRef], 'YYYY-MM-DD').format(\n                  dateDisplayFormat\n                )\n              : moment(valuesForm[config.modelRef], dateDisplayFormat).format(\n                  dateDisplayFormat\n                )\n            : valuesForm[config.modelRef],\n      };\n    }\n  });\n  return valuesForm;\n}\n\nexport function getAuthorWithDate(\n  displayName: string,\n  language: string\n): string {\n  moment.locale(language);\n  return displayName + ', ' + moment().format('LLL');\n}\n\nexport function getFilteredOptionsOnInitialState(\n  isInputChipsAutocomplete: boolean,\n  autoCompleteOptions: IAutocompleteOption[],\n  formPreviousStateField: IAutocompleteOption | IAutocompleteOption[]\n): IAutocompleteOption[] {\n  if (!isInputChipsAutocomplete) {\n    return autoCompleteOptions;\n  } else {\n    return autoCompleteOptions.filter((option: IAutocompleteOption) =>\n      (formPreviousStateField as IAutocompleteOption[]).every(\n        (inputDisplayedValue: IAutocompleteOption) =>\n          inputDisplayedValue.option\n            .getRidOfDiacritics()\n            .toLocaleUpperCase() !==\n          option.option.getRidOfDiacritics().toLocaleUpperCase()\n      )\n    );\n  }\n}\n\nexport function getFormAutocompleteFieldInitialValue(\n  fieldValue: ILink | ILink[],\n  currentObject: IAutocompleteOption,\n  formInitialStateFieldValue: FormFieldsAllTypes,\n  formPreviousStateFieldValue: FormFieldsAllTypes\n): IInitFormsAutocompleteField {\n  let isValidOptionValue: boolean;\n  let autocompleteFieldInitialValue: IInitFormsAutocompleteField;\n  if (Array.isArray(fieldValue)) {\n    isValidOptionValue = fieldValue.some(\n      (value: ILink) =>\n        currentObject.value.id.toLocaleUpperCase() ===\n        value.id.toLocaleUpperCase()\n    );\n  } else {\n    isValidOptionValue =\n      currentObject.value.id.toLocaleUpperCase() ===\n      fieldValue.id.toLocaleUpperCase();\n  }\n  if (isValidOptionValue) {\n    if (Array.isArray(fieldValue)) {\n      autocompleteFieldInitialValue = {\n        controlValue: null,\n        initialStateValue: [\n          ...(formInitialStateFieldValue as IAutocompleteOption[]),\n          { ...currentObject },\n        ],\n        previousStateValue: [\n          ...(formPreviousStateFieldValue as IAutocompleteOption[]),\n          { ...currentObject },\n        ],\n      };\n    } else {\n      autocompleteFieldInitialValue = {\n        controlValue: { ...currentObject },\n        initialStateValue: { ...currentObject },\n        previousStateValue: { ...currentObject },\n      };\n    }\n  }\n  return autocompleteFieldInitialValue;\n}\n\nexport function getFormErrors(\n  form: FormGroup,\n  formData: IFormData[],\n  formFields: { [modelRef: string]: string }\n): any {\n  const formFieldsCopy: { [modelRef: string]: string } = {\n    ...formFields,\n  };\n\n  for (const modelRef in formFieldsCopy) {\n    if (Object.prototype.hasOwnProperty.call(formFieldsCopy, modelRef)) {\n      formFieldsCopy[modelRef] = '';\n\n      const control: AbstractControl = form.get(modelRef);\n      if (control?.invalid && control?.dirty) {\n        const field: IFormData = formData.find(\n          (form: IFormData) => form.modelRef === modelRef\n        );\n        const currValueError: { [errorId: string]: string } = field\n          ? field.value.error.value\n          : null;\n        for (const key in control.errors) {\n          if (Object.prototype.hasOwnProperty.call(control.errors, key)) {\n            formFieldsCopy[modelRef] = currValueError[key];\n            break;\n          }\n        }\n      }\n    }\n  }\n\n  return formFieldsCopy;\n}\n\nexport function getLinkedFieldsValues(\n  linkedFieldsModelRefs: string[],\n  formPreviousState: {\n    [key: string]: IFormFieldControl;\n  }\n): string[] {\n  return linkedFieldsModelRefs.reduce((acc, modelRef) => {\n    if (!!formPreviousState[modelRef].value) {\n      if (isAutocompleteOption(formPreviousState[modelRef].value)) {\n        acc.push(\n          (\n            formPreviousState[modelRef].value as IAutocompleteOption\n          ).value.id.toLocaleUpperCase()\n        );\n      } else if (isAutocompleteOptionArray(formPreviousState[modelRef].value)) {\n        acc.push(\n          ...(formPreviousState[modelRef].value as IAutocompleteOption[]).map(\n            (autocompleteOption: IAutocompleteOption) =>\n              autocompleteOption.value.id.toLocaleUpperCase()\n          )\n        );\n      }\n    }\n    return acc;\n  }, []);\n}\n\nexport function isAutocompleteOption(fieldValue: FormFieldsAllTypes): boolean {\n  return (\n    typeof fieldValue === 'object' &&\n    Object.keys(fieldValue).length === 2 &&\n    'value' in fieldValue &&\n    isLinkObject(fieldValue.value) &&\n    'option' in fieldValue\n  );\n}\n\nexport function isAutocompleteOptionArray(\n  fieldValue: FormFieldsAllTypes\n): boolean {\n  return (\n    Array.isArray(fieldValue) &&\n    fieldValue.length > 0 &&\n    (fieldValue as (string | IAutocompleteOption | ISelectOption)[]).every(\n      (value: string | IAutocompleteOption | ISelectOption) =>\n        isAutocompleteOption(value)\n    )\n  );\n}\n\nexport function getOptionsFilteringCondition(\n  inputValue: string | IAutocompleteOption,\n  isInputChipsAutocomplete: boolean,\n  formPreviousStateFieldValue: IAutocompleteOption | IAutocompleteOption[]\n): (param: string) => boolean {\n  let inputValueAsString = '';\n  let checkNotBelongToChips: (param: string) => boolean = () => true;\n  let optionMatchInputValue: (param: string) => boolean = () => true;\n  if (isInputChipsAutocomplete) {\n    checkNotBelongToChips = (valueToCompare: string) =>\n      (formPreviousStateFieldValue as IAutocompleteOption[]).every(\n        (inputDisplayedValue: IAutocompleteOption) =>\n          valueToCompare.getRidOfDiacritics().toLocaleUpperCase() !==\n          inputDisplayedValue.option.getRidOfDiacritics().toLocaleUpperCase()\n      );\n  }\n  if (inputValue !== null) {\n    if (typeof inputValue === 'string') {\n      inputValueAsString = inputValue as string;\n    } else if (!isInputChipsAutocomplete) {\n      inputValueAsString = (inputValue as IAutocompleteOption).option;\n    }\n    optionMatchInputValue = (valueToCompare: string) =>\n      valueToCompare\n        .toLocaleUpperCase()\n        .getRidOfDiacritics()\n        .includes(\n          inputValueAsString.getRidOfDiacritics().toLocaleUpperCase()\n        ) || inputValueAsString === '';\n  }\n  return (valueToCompare: string) =>\n    checkNotBelongToChips(valueToCompare) &&\n    optionMatchInputValue(valueToCompare);\n}\n\nexport function inputValueIsNotAnOption(\n  filteredOptions: { [modelRef: string]: IAutocompleteOption[] },\n  modelRef: string\n): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    if (\n      control.value !== null &&\n      typeof control.value === 'string' &&\n      control.value !== '' &&\n      filteredOptions[modelRef].length === 0\n    ) {\n      return { incorrect: true };\n    } else {\n      return null;\n    }\n  };\n}\n\nexport function inputValueIsNotAnOptionSimpleAutocomplete(\n  filteredOptions: { [modelRef: string]: IAutocompleteOption[] },\n  modelRef: string\n): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    if (\n      control.value !== null &&\n      typeof control.value === 'string' &&\n      control.value !== '' &&\n      !filteredOptions[modelRef]\n        .map((element: IAutocompleteOption) => element.option)\n        .includes(control.value)\n    ) {\n      return { incorrect: true };\n    } else {\n      return null;\n    }\n  };\n}\n\nexport function isAutocompleteInitialState(\n  inputValue: string | IAutocompleteOption,\n  isInputChipsAutocomplete: boolean,\n  formPreviousStateField: IAutocompleteOption | IAutocompleteOption[],\n  formInitialStateField: IAutocompleteOption | IAutocompleteOption[]\n): boolean {\n  if (isInputChipsAutocomplete) {\n    return (\n      JSON.stringify(formPreviousStateField as IAutocompleteOption[]) ===\n        JSON.stringify(formInitialStateField) &&\n      (inputValue === null || inputValue === undefined || inputValue === '')\n    );\n  } else {\n    return Array.isArray(inputValue)\n      ? JSON.stringify(inputValue) === JSON.stringify(formInitialStateField)\n      : inputValue === formInitialStateField;\n  }\n}\n\nexport function isFormFieldDisabled(\n  checkedField: IFormData | IAttribute,\n  crudAction: string = null\n): boolean {\n  return (\n    checkedField.value.field.props.disabled &&\n    !(crudAction === 'search' && checkedField.props.isSearchable)\n  );\n}\n\nexport function isFormFieldDisplayed(\n  field: IFormData,\n  crudAction: string\n): boolean {\n  return (\n    field.value.field.componentName !== EComponentName.array &&\n    ((!field.value.field.props.disabled as boolean) ||\n      (crudAction === 'search' && field.props.isSearchable))\n  );\n}\n\nexport function keepFieldInRequestBody(\n  fieldComponentName: string,\n  fieldValue: FormDataValueTypes,\n  initialValue: IFormFieldControl,\n  autocompleteOptionsLoaded: boolean,\n  crudAction: string\n): boolean {\n  if (crudAction === 'search') {\n    return true;\n  }\n\n  let hasValueChanged = false;\n  switch (fieldComponentName) {\n    case EComponentName.inputChipsAutocomplete:\n      hasValueChanged = hasInputChipsValueChanged(\n        fieldValue as ILink[],\n        autocompleteOptionsLoaded,\n        initialValue\n      );\n      break;\n    case EComponentName.autocomplete:\n      hasValueChanged = hasAutocompleteValueChanged(\n        fieldValue as ILink,\n        autocompleteOptionsLoaded,\n        initialValue\n      );\n      break;\n    default:\n      hasValueChanged = fieldValue !== initialValue.value;\n      break;\n  }\n  return hasValueChanged;\n}\n\nfunction hasInputChipsValueChanged(\n  inputChipsFieldValue: ILink[],\n  autocompleteOptionsLoaded: boolean,\n  initialValue: IFormFieldControl\n): boolean {\n  let hasChanged = false;\n  if (inputChipsFieldValue != null && initialValue?.value != null) {\n    const chipsIds: string[] = (inputChipsFieldValue as ILink[]).map(\n      (link: ILink) => link.id\n    );\n    const initialChipsIds: string[] = autocompleteOptionsLoaded\n      ? (initialValue.value as IAutocompleteOption[]).map(\n          (option: IAutocompleteOption) => option.value.id\n        )\n      : (initialValue.value as string[]);\n\n    hasChanged = _.xor(chipsIds, initialChipsIds).length > 0;\n  }\n  return hasChanged;\n}\n\nfunction hasAutocompleteValueChanged(\n  autocompleteFieldValue: ILink,\n  autocompleteOptionsLoaded: boolean,\n  initialValue: IFormFieldControl\n): boolean {\n  let hasChanged;\n  if (autocompleteFieldValue != null && initialValue?.value != null) {\n    hasChanged =\n      (autocompleteOptionsLoaded &&\n        autocompleteFieldValue.id !==\n          (initialValue.value as IAutocompleteOption).value.id) ||\n      (!autocompleteOptionsLoaded &&\n        autocompleteFieldValue.id !== initialValue.value);\n  } else {\n    hasChanged =\n      (autocompleteFieldValue == null && initialValue?.value != null) ||\n      (autocompleteFieldValue != null && initialValue?.value == null);\n  }\n  return hasChanged;\n}\n\nexport function resizeImage(\n  width: number,\n  height: number,\n  maxWidth: number,\n  maxHeight: number\n): { width: number; height: number } {\n  if (width > maxWidth && height <= maxHeight) {\n    height *= maxWidth / width;\n    width = maxWidth;\n  } else if (width <= maxWidth && height > maxHeight) {\n    width *= maxHeight / height;\n    height = maxHeight;\n  } else if (width > maxWidth && height > maxHeight) {\n    const minRatio = Math.min(maxWidth / width, maxHeight / height);\n    width *= minRatio;\n    height *= minRatio;\n  }\n\n  return { width, height };\n}\n\nexport function saveCheckoutFormState(\n  checkoutFormValues: {\n    [modelRef: string]: FormFieldsExtendedSingleTypes | ILink | ILink[];\n  },\n  formData: IFormData[],\n  crudAction: string\n): { [key: string]: IFormFieldControl } {\n  let formState = {};\n  for (const modelRef in checkoutFormValues) {\n    if (Object.prototype.hasOwnProperty.call(checkoutFormValues, modelRef)) {\n      const currentFormField: IFormData = formData.find(\n        (field: IFormData) => field.modelRef === modelRef\n      );\n      let enabled: boolean = null;\n      let value: FormFieldsAllTypes;\n      if (\n        Array.isArray(checkoutFormValues[modelRef]) &&\n        currentFormField.value.field.componentName ===\n          EComponentName.inputChipsAutocomplete\n      ) {\n        if (\n          checkoutFormValues[modelRef] &&\n          isArrayOfLinkObjects(checkoutFormValues[modelRef])\n        ) {\n          value = (checkoutFormValues[modelRef] as ILink[]).map(\n            (link: ILink) => link.id\n          );\n          enabled = false;\n        }\n      } else {\n        if (Array.isArray(checkoutFormValues[modelRef])) {\n          value = [...(checkoutFormValues[modelRef] as string[])];\n        } else if (\n          checkoutFormValues[modelRef] &&\n          isLinkObject(checkoutFormValues[modelRef])\n        ) {\n          value = (checkoutFormValues[modelRef] as ILink).id;\n          enabled = false;\n        } else {\n          value = checkoutFormValues[modelRef] as FormFieldsAllTypes;\n        }\n      }\n      if (enabled !== null) {\n        enabled = !isFormFieldDisabled(currentFormField, crudAction);\n      }\n      formState = {\n        ...formState,\n        [modelRef]: {\n          value,\n          enabled,\n        },\n      };\n    }\n  }\n  return formState;\n}\n\nexport function setFormControlValue(field: IFormData): FormDataValueTypes {\n  if (Array.isArray(field.dataValue)) {\n    return [...field.dataValue] as string[] | ILink[];\n  } else if (field.props.isConcatWithPreviousValue) {\n    return '';\n  } else {\n    return field.dataValue;\n  }\n}\n\nexport function trimFormFieldsValues(formFieldsValues: {\n  [id: string]: FormDataValueTypes;\n}): {\n  [id: string]: FormDataValueTypes;\n} {\n  return Object.keys(formFieldsValues).reduce((acc, curr) => {\n    const isString: boolean = typeof formFieldsValues[curr] === 'string';\n    const isStringArray: boolean =\n      Array.isArray(formFieldsValues[curr]) &&\n      (formFieldsValues[curr] as string[] | ILink[])?.length > 0 &&\n      typeof formFieldsValues[curr][0] === 'string';\n    let fieldValue: FormDataValueTypes = formFieldsValues[curr];\n    if (isString) {\n      fieldValue = (fieldValue as string).trim();\n    } else if (isStringArray) {\n      fieldValue = (fieldValue as string[]).map((s: string) => s.trim());\n    }\n    return { ...acc, [curr]: fieldValue };\n  }, {});\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { IDataSourceRow, IUiEntryIds } from '../interfaces/data.interface';\n\nexport function getSelectedElementsDependsOnMode(\n  isSelectOnlyModeEnabled: boolean,\n  selection: SelectionModel<any>\n): (IUiEntryIds | IDataSourceRow)[] {\n  return isSelectOnlyModeEnabled\n    ? selection.selected\n    : selection.selected.map((selectedData: any) => selectedData.selectionIds);\n}\n\nexport function optionsPaginator(nbTotalResults: number): number[] {\n  const firstOptions = [5, 10, 20];\n  let iteratorFirstOptions = 0;\n  const options = [];\n  let test = firstOptions[iteratorFirstOptions];\n  let cpt = 0;\n  while (Math.trunc(nbTotalResults / test) >= 1) {\n    options.push(test);\n    if (iteratorFirstOptions < 2) {\n      iteratorFirstOptions++;\n    } else {\n      iteratorFirstOptions = 0;\n      cpt++;\n    }\n    test =\n      cpt > 0\n        ? firstOptions[iteratorFirstOptions] * Math.pow(10, cpt)\n        : firstOptions[iteratorFirstOptions];\n  }\n  if (\n    options.length === 0 ||\n    (options.length > 0 && !options.includes(nbTotalResults))\n  ) {\n    options.push(nbTotalResults);\n  }\n  return options;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Title } from '@angular/platform-browser';\nimport { IEntryIds } from '..//interfaces/data.interface';\nimport { IConfig, ITabProps } from '../interfaces/configs.interface';\n\nexport function getTabTitle(prefix: ITabProps, value: string): string {\n  let title = '';\n  if (!!(prefix && prefix.title)) {\n    title = title.concat(prefix.title);\n  }\n  return title.concat(value);\n}\n\nexport function setTabTitle(\n  prefix: ITabProps,\n  titleService: Title,\n  suffix: string = null,\n  config: IConfig = null,\n  parentIds: IEntryIds = null,\n  entryIds: IEntryIds = null\n): void {\n  const routeString: string = [parentIds?.externalId, entryIds?.externalId]\n    .filter((param) => !!param)\n    .reduce(\n      (acc, curr, index) => acc.concat(index > 0 ? '/' : ' - ', curr),\n      ''\n    );\n\n  titleService.setTitle(\n    getTabTitle(prefix, suffix ?? config.label + routeString)\n  );\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { FormDataValueTypes, ILink } from './data.interface';\n\nexport type FormFieldsPrimitiveTypes = string | string[] | boolean;\n\nexport type FormFieldsExtendedSingleTypes =\n  | FormFieldsPrimitiveTypes\n  | IAutocompleteOption\n  | ISelectOption;\n\nexport type FormFieldsAllTypes =\n  | FormFieldsExtendedSingleTypes\n  | IAutocompleteOption[]\n  | ISelectOption[];\n\nexport interface IAutocompleteOption {\n  value: ILink;\n  option: string;\n}\n\nexport interface ISelectOption {\n  value: ILink | string;\n  option: string;\n  attributeId?: string;\n}\n\nexport interface IFormFieldControl {\n  value: FormFieldsAllTypes;\n  enabled: boolean;\n}\n\nexport interface IFormRequestBody {\n  [id: string]: FormDataValueTypes;\n}\n\nexport interface IInitFormsAutocompleteField {\n  controlValue: FormFieldsExtendedSingleTypes;\n  initialStateValue: FormFieldsAllTypes;\n  previousStateValue: FormFieldsAllTypes;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IActions } from './configs.interface';\nimport { IFormData } from './data.interface';\n\nexport interface IResourceType {\n  name: string;\n  endpoint: string;\n  schema: string;\n}\n\nexport interface IResourcesTypes {\n  [id: string]: IResourceType;\n}\n\nexport interface IResourceTypeFromBackend extends IResourceType {\n  id: string;\n  schemas: string[];\n}\n\nexport interface IClickableCellsEndpoints {\n  [modelRef: string]: string;\n}\n\nexport interface IResourceTypeRequestDetail {\n  endpoint: string;\n  resourceTypeId: string;\n}\n\nexport interface IResourceTypeProperties extends IResourceType {\n  createForm?: IFormData[];\n  canCreate?: boolean;\n  actions?: IActions;\n  relatedAttributeId?: string;\n  nodeNameModelRef?: string;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IEntryIds } from './data.interface';\n\nexport interface IResourceTypeRoutesRegExp {\n  resourcePathRegExp: RegExp;\n  detailPathRegExp: RegExp;\n}\n\nexport interface IRouteDetail extends IRouteParameters {\n  navigationIds: number[];\n}\n\nexport interface IRouteParameters {\n  url: string;\n  extras: IRouteDetailExtras;\n}\n\nexport interface IRouteDetailExtras {\n  ids: IEntryIds;\n  parentIds: IEntryIds;\n}\n\nexport interface IUpdateLastPositionDetail {\n  newNavigationId: number;\n  newRouteIndex: number;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport {\n  IAttributeActions,\n  IPrimitiveActions,\n} from '../interfaces/configs.interface';\n\n@Pipe({\n  name: 'asAttributeActions',\n  pure: true,\n})\nexport class CastToIAttributeActions implements PipeTransform {\n  transform(\n    value: IPrimitiveActions | IAttributeActions,\n    ..._args: any[]\n  ): IAttributeActions {\n    return value as IAttributeActions;\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class EnvService {\n  public production: boolean;\n  public hashLocationStrategy: boolean;\n  public hasSupportSubscription: boolean;\n  public urlBackend: string;\n  public debug: boolean;\n  public mockParams: string[];\n  public mock: boolean;\n  public ui: {\n    dateLocale: string;\n    displayDateFormat: string;\n    parsingDateFormat: string;\n    notificationTimeout: number;\n  };\n  public subRoutes: string[];\n  public auth: {\n    fake: {\n      fakeUser: boolean;\n      fakeUserInfos: {\n        displayName: string;\n        password: string;\n      };\n    };\n    sso: boolean;\n    oidc: {\n      issuer: string;\n      requireHttps: boolean;\n      redirectUri: string;\n      logoutUrl: string;\n      executeOidcLogoutProcess: boolean;\n      clientId: string;\n      responseType: string;\n      responseMode: string;\n      scope: string;\n      showDebugInformation: boolean;\n      clearHashAfterLogin: boolean;\n    };\n  };\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { IConfigs } from '../interfaces/configs.interface';\nimport { EnvService } from './env.service';\n\nconst PATH_CONFIGS = 'configs';\n\nexport abstract class ConfigsService {\n  abstract getConfigs(): Observable<IConfigs>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ConfigsServiceImpl extends ConfigsService {\n  constructor(\n    private _http: HttpClient,\n    private _env: EnvService\n  ) {\n    super();\n  }\n\n  getConfigs(): Observable<IConfigs> {\n    return this._http.get<IConfigs>(`${this._env.urlBackend}/${PATH_CONFIGS}`);\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { IDataItem, IDataNode } from '../interfaces/data.interface';\nimport * as Error from '../states/error/error.actions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class InteractionsService {\n  private _processingRequest = new Subject<boolean>();\n  private _cancelRequest = new Subject<void>();\n\n  private _displayedDataTree = new ReplaySubject<IDataNode[]>();\n  private _displayedDataList = new ReplaySubject<IDataItem[]>();\n\n  private _updateTreeNodeName = new Subject<string>();\n  private _updateListItemName = new Subject<string>();\n  private _updateExternalId = new Subject<string>();\n  private _updateFilteredDetailAttributes = new Subject<boolean>();\n\n  public processingRequest$: Observable<boolean> =\n    this._processingRequest.asObservable();\n\n  public cancelRequest$: Observable<void> = this._cancelRequest.asObservable();\n\n  public displayedDataTree$: Observable<IDataNode[]> =\n    this._displayedDataTree.asObservable();\n\n  public displayedDataList$: Observable<IDataItem[]> =\n    this._displayedDataList.asObservable();\n\n  public updateTreeNodeName$: Observable<string> =\n    this._updateTreeNodeName.asObservable();\n\n  public updateListItemName$: Observable<string> =\n    this._updateListItemName.asObservable();\n\n  public updateExternalId$: Observable<string> =\n    this._updateExternalId.asObservable();\n\n  public updateFilteredDetailAttributes$: Observable<boolean> =\n    this._updateFilteredDetailAttributes.asObservable();\n\n  constructor(private _store$: Store) {}\n\n  isProcessingRequest(processing: boolean): void {\n    if (processing) {\n      this._store$.dispatch(new Error.ResetLastError());\n    }\n    this._processingRequest.next(processing);\n  }\n\n  displayDataTree(dataTree: IDataNode[]): void {\n    this._displayedDataTree.next(dataTree);\n  }\n\n  displayDataList(dataList: IDataItem[]): void {\n    this._displayedDataList.next(dataList);\n  }\n\n  updateTreeNodeName(newNodeName: string): void {\n    this._updateTreeNodeName.next(newNodeName);\n  }\n\n  updateListItemName(newItemName: string): void {\n    this._updateListItemName.next(newItemName);\n  }\n\n  updateExternalId(newExternalId: string): void {\n    this._updateExternalId.next(newExternalId);\n  }\n\n  updateFilteredDetailAttributes(isMatchingAdvancedSearchChips: boolean): void {\n    this._updateFilteredDetailAttributes.next(isMatchingAdvancedSearchChips);\n  }\n\n  cancelRequest(): void {\n    this._cancelRequest.next();\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  HttpClient,\n  HttpErrorResponse,\n  HttpHeaders,\n  HttpParams,\n  HttpResponse,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n  Observable,\n  catchError,\n  finalize,\n  takeUntil,\n  tap,\n  throwError,\n} from 'rxjs';\nimport { escapeBackSlash } from '../helpers/data-table.helper';\nimport { IData } from '../interfaces/data.interface';\nimport { EnvService } from './env.service';\nimport { InteractionsService } from './interactions.service';\n\nexport abstract class DataService {\n  abstract getDataList(\n    dataType: string,\n    body?: any,\n    isRequestForFormField?: boolean\n  ): Observable<IData>;\n\n  abstract getDataListWithParameteredFilter(\n    requestTarget: string,\n    regexParam: string,\n    regexFilter: string,\n    body: any,\n    extendedMeta: boolean\n  ): Observable<IData>;\n\n  abstract getDataDetail(dataType: string, id: string): Observable<any>;\n\n  abstract removeData(dataType: string, id: string): Observable<any>;\n\n  abstract updateData(\n    dataType: string,\n    id: string,\n    body: any\n  ): Observable<HttpResponse<any>>;\n\n  abstract createData(\n    dataType: string,\n    body: any,\n    params?:\n      | HttpParams\n      | {\n          [param: string]: string | string[];\n        }\n  ): Observable<HttpResponse<any>>;\n\n  abstract search(\n    dataType: string,\n    filter: string,\n    postRequest?: boolean,\n    body?: any,\n    extendedMeta?: boolean\n  ): Observable<HttpResponse<IData> | HttpErrorResponse>;\n\n  abstract patchData(\n    dataType: string,\n    id: string,\n    body: any\n  ): Observable<HttpResponse<any>>;\n}\n\n@Injectable()\nexport class DataServiceImpl extends DataService {\n  private _isProcessingGetRequest: boolean;\n\n  constructor(\n    protected http: HttpClient,\n    protected env: EnvService,\n    protected interactionsService: InteractionsService\n  ) {\n    super();\n  }\n\n  getDataList(\n    dataType: string,\n    params: any = undefined,\n    isRequestForFormField = false\n  ): Observable<IData> {\n    if (this._isProcessingGetRequest && !isRequestForFormField) {\n      this.interactionsService.cancelRequest();\n    }\n    let requestParams = {};\n    if (!!params) {\n      if (params.filter) {\n        requestParams = { filter: params.filter };\n      }\n      if (params.attributes) {\n        requestParams = {\n          ...requestParams,\n          attributes: params.attributes.join(','),\n        };\n      }\n      if (params.extendedMeta) {\n        requestParams = { ...requestParams, extendedMeta: params.extendedMeta };\n      }\n    }\n    if (!isRequestForFormField) {\n      this._isProcessingGetRequest = true;\n    }\n    return this.http\n      .get<IData>(`${this.env.urlBackend}/${dataType}`, {\n        params: requestParams,\n      })\n      .pipe(\n        takeUntil(this.interactionsService.cancelRequest$),\n        tap((__) => {\n          if (!isRequestForFormField) {\n            this._isProcessingGetRequest = false;\n          }\n        }),\n        catchError((err) => {\n          if (!isRequestForFormField) {\n            this._isProcessingGetRequest = false;\n          }\n          return throwError(() => err);\n        }),\n        finalize(() => {\n          if (!isRequestForFormField) {\n            this._isProcessingGetRequest = false;\n          }\n        })\n      );\n  }\n\n  getDataListWithParameteredFilter(\n    requestTarget: string,\n    regexParam: string,\n    regexFilter: string,\n    attributes: string[],\n    extendedMeta: boolean\n  ): Observable<IData> {\n    regexFilter = regexFilter.replace('$1', regexParam);\n    return this.getDataList(requestTarget, {\n      filter: escapeBackSlash(regexFilter),\n      attributes,\n      extendedMeta,\n    });\n  }\n\n  getDataDetail(dataType: string, id: string): Observable<any> {\n    let params = {};\n    params = { ...params, getOperationalAttributes: true };\n    return this.http.get<any>(`${this.env.urlBackend}/${dataType}/${id}`, {\n      params,\n    });\n  }\n\n  removeData(dataType: string, id: string): Observable<any> {\n    return this.http.delete<any>(`${this.env.urlBackend}/${dataType}/${id}`);\n  }\n\n  updateData(\n    dataType: string,\n    id: string,\n    body: any\n  ): Observable<HttpResponse<any>> {\n    return this.http.put<any>(\n      `${this.env.urlBackend}/${dataType}/${id}`,\n      body,\n      {\n        headers: new HttpHeaders({\n          'Content-Type': 'application/json',\n          timeout: '30000',\n        }),\n        observe: 'response',\n      }\n    );\n  }\n\n  createData(\n    dataType: string,\n    body: any,\n    params?:\n      | HttpParams\n      | {\n          [param: string]: string | string[];\n        }\n  ): Observable<HttpResponse<any>> {\n    return this.http.post<any>(`${this.env.urlBackend}/${dataType}`, body, {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n        timeout: '30000',\n      }),\n      observe: 'response',\n      params,\n    });\n  }\n\n  search(\n    dataType: string,\n    filter: string,\n    postRequest?: boolean,\n    body?: any,\n    extendedMeta?: boolean\n  ): Observable<HttpResponse<IData> | HttpErrorResponse> {\n    let searchRequest$: Observable<HttpResponse<IData>>;\n    if (this._isProcessingGetRequest) {\n      this.interactionsService.cancelRequest();\n    }\n    if (postRequest) {\n      searchRequest$ = this.http.post<IData>(\n        `${this.env.urlBackend}/${dataType}/.search`,\n        { ...body, filter },\n        {\n          headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n          }),\n          observe: 'response',\n          params: { extendedMeta: extendedMeta ?? false },\n        }\n      );\n    } else {\n      searchRequest$ = this.http.get<IData>(\n        `${this.env.urlBackend}/${dataType}`,\n        {\n          params: { filter: escapeBackSlash(filter) },\n          headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n          observe: 'response',\n        }\n      );\n    }\n    this._isProcessingGetRequest = true;\n    return searchRequest$.pipe(\n      takeUntil(this.interactionsService.cancelRequest$),\n      tap((__) => (this._isProcessingGetRequest = false)),\n      catchError((err) => {\n        this._isProcessingGetRequest = false;\n        return throwError(() => err);\n      }),\n      finalize(() => (this._isProcessingGetRequest = false))\n    );\n  }\n\n  patchData(\n    dataType: string,\n    id: string,\n    body: any\n  ): Observable<HttpResponse<any>> {\n    return this.http.patch<any>(\n      `${this.env.urlBackend}/${dataType}/${id}`,\n      body,\n      {\n        headers: new HttpHeaders({\n          'Content-Type': 'application/json',\n          timeout: '30000',\n        }),\n        observe: 'response',\n      }\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { EnvService } from './env.service';\n\nexport const EnvServiceFactory = () => {\n  // Create env\n  let env = new EnvService();\n\n  // Read environment variables from browser window\n  const browserWindowEnv = (window as any).__env || {};\n\n  // Assign environment variables from browser window to env\n  // In the current implementation, properties from env.js overwrite defaults from the EnvService.\n  // If needed, a deep merge can be performed here to merge properties instead of overwriting them.\n\n  for (const key in browserWindowEnv) {\n    if (Object.prototype.hasOwnProperty.call(browserWindowEnv, key)) {\n      env[key] = (window as any).__env[key];\n    }\n  }\n\n  return env;\n};\n\nexport const EnvServiceProvider = {\n  provide: EnvService,\n  useFactory: EnvServiceFactory,\n  deps: [],\n};\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { JsTable } from '../../helpers/jstable.helper';\nimport { IConfig } from '../../interfaces/configs.interface';\n\nexport class FetchConfigs {\n  static readonly type = '[Configs] Fetch configs';\n}\n\nexport class FetchConfigsSuccess {\n  static readonly type = '[Configs] Fetch configs success';\n  constructor(public payload: { configs: JsTable<IConfig> }) {}\n}\n\nexport class FetchConfigsError {\n  static readonly type = '[Configs] Fetch configs error';\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { IGenericErrorMessagesConfig } from '../../interfaces/configs.interface';\nimport { IErrorDetail } from '../../interfaces/data.interface';\nimport * as Error from './error.actions';\n\nexport interface ErrorStateModel {\n  isHandlingError: boolean;\n  errorDetail: IErrorDetail;\n  lastError: IErrorDetail;\n  genericErrorMessages: IGenericErrorMessagesConfig;\n}\n\n@State<ErrorStateModel>({\n  name: 'error',\n  defaults: {\n    isHandlingError: false,\n    errorDetail: null,\n    lastError: null,\n    genericErrorMessages: null,\n  },\n})\n@Injectable()\nexport class ErrorState {\n  @Selector()\n  static getIsHandlingError(state: ErrorStateModel): boolean {\n    return state.isHandlingError;\n  }\n\n  @Selector()\n  static getErrorDetail(state: ErrorStateModel): IErrorDetail {\n    return state.errorDetail;\n  }\n\n  @Selector()\n  static getLastError(state: ErrorStateModel): IErrorDetail {\n    return state.lastError;\n  }\n\n  @Selector()\n  static getGenericErrorMessages(\n    state: ErrorStateModel\n  ): IGenericErrorMessagesConfig {\n    return state.genericErrorMessages;\n  }\n\n  @Selector()\n  static getErrorRouteMsg(state: ErrorStateModel): string {\n    return state.genericErrorMessages.errorRouteMsg;\n  }\n\n  @Selector()\n  static getUnavailableHomepageMsg(state: ErrorStateModel): string {\n    return state.genericErrorMessages.unavailableHomepageMsg;\n  }\n\n  @Selector()\n  static getNotFoundTabTitle(state: ErrorStateModel): string {\n    return state.genericErrorMessages.notFoundTabTitle;\n  }\n\n  @Selector()\n  static getNoInternetConnection(state: ErrorStateModel): string {\n    return state.genericErrorMessages.noInternetConnection;\n  }\n\n  @Selector()\n  static getUnreachableServer(state: ErrorStateModel): string {\n    return state.genericErrorMessages.unreachableServer;\n  }\n\n  @Action(Error.IsHandlingError)\n  isHandlingError(\n    ctx: StateContext<ErrorStateModel>,\n    action: Error.IsHandlingError\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isHandlingError: action.payload,\n    });\n  }\n\n  @Action(Error.SetErrorDetail)\n  setErrorDetail(\n    ctx: StateContext<ErrorStateModel>,\n    action: Error.SetErrorDetail\n  ): void {\n    const errorDetail: IErrorDetail = {\n      handledError: action.payload.error,\n      userActionOnError: action.payload.userActionOnError,\n    };\n\n    ctx.setState({\n      ...ctx.getState(),\n      errorDetail,\n      lastError: errorDetail,\n    });\n  }\n\n  @Action(Error.ResetErrorDetail)\n  resetErrorDetail(ctx: StateContext<ErrorStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      errorDetail: null,\n    });\n  }\n\n  @Action(Error.ResetLastError)\n  resetLastError(ctx: StateContext<ErrorStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      lastError: null,\n    });\n  }\n\n  @Action(Error.SetGenericErrorMessages)\n  setGenericErrorMessages(\n    ctx: StateContext<ErrorStateModel>,\n    action: Error.SetGenericErrorMessages\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      genericErrorMessages: action.payload,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { JsTable } from '../../helpers/jstable.helper';\nimport { IResourceType } from '../../interfaces/resources-types.interface';\n\nexport class FetchResourcesTypes {\n  static readonly type = '[ResourcesTypes] Fetch resources types';\n}\n\nexport class FetchResourcesTypesSuccess {\n  static readonly type = '[ResourcesTypes] Fetch resources types success';\n  constructor(public payload: { resourcesTypes: JsTable<IResourceType> }) {}\n}\n\nexport class FetchResourcesTypesError {\n  static readonly type = '[ResourcesTypes] Fetch resources types error';\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ErrorHandler, Injectable, Injector } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable, of } from 'rxjs';\nimport * as Configs from '../states/configs/configs.actions';\nimport * as ErrorActions from '../states/error/error.actions';\nimport { ErrorState } from '../states/error/error.state';\nimport * as ResourcesTypes from '../states/resources-types/resources-types.actions';\n\nconst PATH_CONFIG = 'configs';\nconst PATH_RESOURCES_TYPES = 'resourcestypes';\nconst POSITION_CLASS = 'toast-bottom-right';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ErrorsHandlerService implements ErrorHandler {\n  constructor(\n    // Because errors handler is created before providers so we have to use injector service to use them\n    private _injector: Injector\n  ) {}\n\n  handleError(\n    error: Error | HttpErrorResponse\n  ): Observable<Error | HttpErrorResponse> {\n    const toastrService: ToastrService = this._injector.get(ToastrService);\n\n    const store = this._injector.get(Store);\n\n    if (error instanceof HttpErrorResponse) {\n      // No internet connection or server-side error\n      if (!navigator.onLine) {\n        const noInternetConnection = store.selectSnapshot(\n          ErrorState.getNoInternetConnection\n        );\n        // Handle offline errors\n        toastrService.error(noInternetConnection, null, {\n          onActivateTick: true,\n          positionClass: POSITION_CLASS,\n        });\n      } else {\n        const urlLastPart = error.url.split('/').pop();\n        switch (urlLastPart) {\n          case PATH_CONFIG:\n            store.dispatch(new Configs.FetchConfigsError());\n            break;\n          case PATH_RESOURCES_TYPES:\n            store.dispatch(new ResourcesTypes.FetchResourcesTypesError());\n            break;\n          default:\n            break;\n        }\n        // Handle and display Http errors to user\n        toastrService.error(\n          `${error.status} - ${\n            error.error?.message ? error.error.message : error.message\n          }`,\n          null,\n          {\n            onActivateTick: true,\n            positionClass: POSITION_CLASS,\n          }\n        );\n      }\n    } else {\n      if (error.name === 'TimeoutError') {\n        toastrService.error(`${error.name} - ${error.message}`, null, {\n          onActivateTick: true,\n          positionClass: POSITION_CLASS,\n        });\n      }\n    }\n    // We always display error in browser console\n    console.error(error);\n    store.dispatch([\n      new ErrorActions.IsHandlingError(false),\n      new ErrorActions.ResetErrorDetail(),\n    ]);\n    return of(error);\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { TemplateRef } from '@angular/core';\n\nexport abstract class FormService<T, U> {\n  abstract customFormContentComponent: T;\n  abstract setCustomFormContentComponent(customComponent: T): void;\n  abstract getCustomFormContentTemplate(genericForm: U): TemplateRef<any>;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { IResourceTypeFromBackend } from '../interfaces/resources-types.interface';\nimport { EnvService } from './env.service';\n\nconst PATH_RESOURCES_TYPES = 'resourcestypes';\n\nexport abstract class ResourcesTypesService {\n  abstract getResourcesTypes(): Observable<IResourceTypeFromBackend[]>;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ResourcesTypesServiceImpl extends ResourcesTypesService {\n  constructor(\n    private _http: HttpClient,\n    private _env: EnvService\n  ) {\n    super();\n  }\n\n  getResourcesTypes(): Observable<IResourceTypeFromBackend[]> {\n    return this._http.get<IResourceTypeFromBackend[]>(\n      `${this._env.urlBackend}/${PATH_RESOURCES_TYPES}`\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class MatPaginationIntlService extends MatPaginatorIntl {\n  constructor(private translateService: TranslateService) {\n    super();\n    this.translateLabels();\n  }\n\n  getRangeLabel = (page: number, pageSize: number, length: number): string => {\n    const of = this.translateService\n      ? this.translateService.instant('I18N.MAT_PAGINATOR.OF')\n      : 'of';\n    if (length === 0 || pageSize === 0) {\n      return '0 ' + of + ' ' + length;\n    }\n    length = Math.max(length, 0);\n    const startIndex =\n      page * pageSize > length\n        ? (Math.ceil(length / pageSize) - 1) * pageSize\n        : page * pageSize;\n\n    const endIndex = Math.min(startIndex + pageSize, length);\n    return startIndex + 1 + ' - ' + endIndex + ' ' + of + ' ' + length;\n  };\n\n  translateLabels(): void {\n    this.firstPageLabel = this.translateService.instant(\n      'I18N.MAT_PAGINATOR.FIRST_PAGE'\n    );\n    this.itemsPerPageLabel = this.translateService.instant(\n      'I18N.MAT_PAGINATOR.ITEMS_PER_PAGE'\n    );\n    this.lastPageLabel = this.translateService.instant(\n      'I18N.MAT_PAGINATOR.LAST_PAGE'\n    );\n    this.nextPageLabel = this.translateService.instant(\n      'I18N.MAT_PAGINATOR.NEXT_PAGE'\n    );\n    this.previousPageLabel = this.translateService.instant(\n      'I18N.MAT_PAGINATOR.PREVIOUS_PAGE'\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport {\n  DateAdapter,\n  ErrorStateMatcher,\n  MAT_DATE_FORMATS,\n  MAT_DATE_LOCALE,\n  MatNativeDateModule,\n} from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport {\n  MatPaginatorIntl,\n  MatPaginatorModule,\n} from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { RouterModule } from '@angular/router';\n/********************* UI Modules *********************/\nimport { MaterialFileInputModule } from 'ngx-material-file-input';\n/************************ Directives ************************/\nimport { ColorSearchedLettersDirective } from './directives/color-search-letters.directive';\nimport { DisableControlDirective } from './directives/disable-control.directive';\nimport { FlexGrowFitContentDirective } from './directives/flex-grow-fit-content.directive';\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { OmitCharsDirective } from './directives/omit-chars.directive';\nimport { UnfocusableDirective } from './directives/unfocusable.directive';\n/************************ Providers ************************/\nimport { EnvServiceProvider } from './services/env.service.provider';\nimport { MatPaginationIntlService } from './services/mat-paginator-intl.service';\n/************************ Helpers ************************/\nimport { FormErrorStateMatcher } from './helpers/form.helper';\n/************************ Pipes ************************/\nimport { CastToIAttributeActions } from './pipes/type-casting';\n\nconst MaterialModules: any[] = [\n  MatAutocompleteModule,\n  MatButtonModule,\n  MatCardModule,\n  MatCheckboxModule,\n  MatChipsModule,\n  MatNativeDateModule,\n  MatDatepickerModule,\n  MatDialogModule,\n  MatFormFieldModule,\n  MatIconModule,\n  MatInputModule,\n  MatListModule,\n  MatMenuModule,\n  MatPaginatorModule,\n  MatProgressSpinnerModule,\n  MatSelectModule,\n  MatSidenavModule,\n  MatSlideToggleModule,\n  MatSortModule,\n  MatTableModule,\n  MatToolbarModule,\n  MatTooltipModule,\n  MatTreeModule,\n  MatTabsModule,\n];\n\nconst OtherUIModules: any[] = [MaterialFileInputModule];\n\nexport const modules: any[] = [\n  CommonModule,\n  FormsModule,\n  ReactiveFormsModule,\n  HttpClientModule,\n  RouterModule,\n  FlexLayoutModule,\n  ScrollingModule,\n  ...MaterialModules,\n  ...OtherUIModules,\n];\n\nexport const declarations: any[] = [\n  ColorSearchedLettersDirective,\n  FlexGrowFitContentDirective,\n  InfiniteScrollDirective,\n  UnfocusableDirective,\n  OmitCharsDirective,\n  DisableControlDirective,\n  CastToIAttributeActions,\n];\n\nconst DATE_FORMATS = {\n  parse: {\n    dateInput: EnvServiceProvider.useFactory().ui.parsingDateFormat,\n  },\n  display: {\n    dateInput: EnvServiceProvider.useFactory().ui.displayDateFormat,\n    monthYearLabel: 'MMM YYYY',\n    dateA11yLabel: 'LL',\n    monthYearA11yLabel: 'MMMM YYYY',\n  },\n};\n\n@NgModule({\n  declarations: [...declarations],\n  imports: modules,\n  providers: [\n    {\n      provide: DateAdapter,\n      useClass: MomentDateAdapter,\n      deps: [MAT_DATE_LOCALE],\n    },\n    { provide: MAT_DATE_FORMATS, useValue: DATE_FORMATS },\n    { provide: MatPaginatorIntl, useClass: MatPaginationIntlService },\n    { provide: ErrorStateMatcher, useClass: FormErrorStateMatcher },\n  ],\n  exports: [...modules, ...declarations],\n})\nexport class SharedModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IExternalLinksConfig } from '../../interfaces/configs.interface';\n\nexport class SetExternalLinksConfig {\n  static readonly type = '[Files Links] Set files links config';\n  constructor(public readonly payload: IExternalLinksConfig) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IHeaderConfig } from '../../interfaces/configs.interface';\n\nexport class SetHeaderConfig {\n  static readonly type = '[Header Logos] Set header logos config';\n  constructor(public readonly payload: IHeaderConfig) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IHomepageConfig } from '../../interfaces/configs.interface';\n\nexport class SetHomepageConfig {\n  static readonly type = '[HomePage Detail] Set homepage detail config';\n  constructor(public readonly payload: IHomepageConfig) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { ILogoutDialogConfig } from '../../interfaces/configs.interface';\n\nexport class SetLogoutDialogConfig {\n  static readonly type = '[Logout Dialog] Set logout dialog config';\n  constructor(public readonly payload: ILogoutDialogConfig) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IGenericAccessibilityConfig } from '../../interfaces/configs.interface';\nimport { ScreenSize } from '../../interfaces/ui.interface';\n\nexport class SetLanguage {\n  static readonly type = '[Ui] Set language';\n  constructor(public payload: { language: string }) {}\n}\n\nexport class ToggleSidenav {\n  static readonly type = '[Ui] Toggle sidenav';\n}\n\nexport class ChangeScreenSize {\n  static readonly type = '[Ui] Change screen size';\n  constructor(public payload: { screenSize: ScreenSize }) {}\n}\n\nexport class ChangeTheme {\n  static readonly type = '[Ui] Change theme';\n  constructor(public payload: { theme: string }) {}\n}\n\nexport class SetGenericAccessibility {\n  static readonly type = '[Ui] Set generic accessibility messages';\n  constructor(public readonly payload: IGenericAccessibilityConfig) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { ICurrentUserConfig } from '../../interfaces/configs.interface';\n\nexport class Connect {\n  static readonly type = '[User] Connect';\n  constructor(\n    public readonly payload: {\n      userInfo: { displayName: string; password: string };\n      // previousUrl?: string;\n      // paramsPreviousUrl?: any;\n    }\n  ) {}\n}\n\nexport class ConnectError {\n  static readonly type = '[User] Connect error';\n  constructor(\n    public readonly payload: {\n      code: number;\n      message: string;\n    }\n  ) {}\n}\n\nexport class ConnectSuccess {\n  static readonly type = '[User] Connect success';\n}\n\nexport class Disconnect {\n  static readonly type = '[User] Disconnect';\n}\n\nexport class DisconnectError {\n  static readonly type = '[User] Disconnect error';\n  constructor(\n    public readonly payload: {\n      code: number;\n      message: string;\n    }\n  ) {}\n}\n\nexport class DisconnectSuccess {\n  static readonly type = '[User] Disconnected';\n}\n\nexport class SetCurrentUserConfig {\n  static readonly type = '[User] Set current user config';\n  constructor(public readonly payload: ICurrentUserConfig) {}\n}\n\nexport class UpdateCurrentUserConfig {\n  static readonly type = '[User] Update current user config';\n  constructor(\n    public readonly payload: {\n      userInfo: {\n        displayName: string;\n        photo: string;\n      };\n    }\n  ) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { tap } from 'rxjs';\nimport {\n  JsTable,\n  emptyJsTable,\n  mergeInto,\n  toJsTable,\n} from '../../helpers/jstable.helper';\nimport {\n  IConfig,\n  IConfigs,\n  ICurrentUserConfig,\n  IExternalLinksConfig,\n  IGenericAccessibilityConfig,\n  IGenericErrorMessagesConfig,\n  IHeaderConfig,\n  IHomepageConfig,\n  ILogoutDialogConfig,\n} from '../../interfaces/configs.interface';\nimport { ConfigsService } from '../../services/configs.service';\nimport * as Error from '../error/error.actions';\nimport * as ExternalLinks from '../external-links/external-links.actions';\nimport * as Header from '../header/header.actions';\nimport * as Home from '../home/home.actions';\nimport * as LogoutDialog from '../logout-dialog/logout-dialog.actions';\nimport * as Ui from '../ui/ui.actions';\nimport * as User from '../user/user.actions';\nimport * as Configs from './configs.actions';\n\nexport interface ConfigsStateModel extends JsTable<IConfig> {\n  isFetchingConfigs: boolean;\n  isFetchingConfigsError: boolean;\n  isFetchingConfigsSuccess: boolean;\n}\n\nexport function initConfigStateDefaultValues(): ConfigsStateModel {\n  return {\n    ...emptyJsTable<IConfig>(),\n    isFetchingConfigs: false,\n    isFetchingConfigsError: false,\n    isFetchingConfigsSuccess: false,\n  };\n}\n\n@State<ConfigsStateModel>({\n  name: 'configs',\n  defaults: initConfigStateDefaultValues(),\n})\n@Injectable()\nexport class ConfigsState {\n  constructor(\n    private _configService: ConfigsService,\n    private _store$: Store\n  ) {}\n  @Selector()\n  static isFetchingConfigs(state: ConfigsStateModel): boolean {\n    return state.isFetchingConfigs;\n  }\n\n  @Selector()\n  static isFetchingConfigsSuccess(state: ConfigsStateModel): boolean {\n    return state.isFetchingConfigsSuccess;\n  }\n\n  @Selector()\n  static isFetchingConfigsError(state: ConfigsStateModel): boolean {\n    return state.isFetchingConfigsError;\n  }\n\n  @Selector()\n  static getConfigsById(state: ConfigsStateModel): {\n    readonly [id: string]: IConfig;\n  } {\n    return state.byId;\n  }\n\n  @Selector()\n  static getConfigsAllIds(state: ConfigsStateModel): string[] {\n    return state.allIds;\n  }\n\n  @Selector()\n  static getConfigsJsTable(state: ConfigsStateModel): JsTable<IConfig> {\n    return {\n      byId: state.byId,\n      allIds: state.allIds,\n    };\n  }\n\n  @Action(Configs.FetchConfigs)\n  fetchConfigs(ctx: StateContext<ConfigsStateModel>): any {\n    ctx.setState({\n      ...ctx.getState(),\n      isFetchingConfigs: true,\n      isFetchingConfigsSuccess: false,\n      isFetchingConfigsError: false,\n    });\n    return this._configService.getConfigs().pipe(\n      tap((config: IConfigs) => {\n        let actions: any[] = [];\n        if (!!config.externalLinks) {\n          const externalLinksConfig: IExternalLinksConfig =\n            config.externalLinks;\n          delete config.externalLinks;\n          actions.push(\n            new ExternalLinks.SetExternalLinksConfig(externalLinksConfig)\n          );\n        }\n        const currentUserConfig: ICurrentUserConfig = config.currentUser;\n        delete config.currentUser;\n        const homepageConfig: IHomepageConfig = config.home;\n        delete config.home;\n        const headerConfig: IHeaderConfig = config.header;\n        delete config.header;\n        const logoutDialogConfig: ILogoutDialogConfig = config.logoutDialog;\n        delete config.logoutDialog;\n        const genericErrorMessages: IGenericErrorMessagesConfig =\n          config.genericErrorMessages;\n        delete config.genericErrorMessages;\n        const genericAccessibility: IGenericAccessibilityConfig =\n          config.genericAccessibility;\n        delete config.genericAccessibility;\n        actions.push(\n          new User.SetCurrentUserConfig(currentUserConfig),\n          new Home.SetHomepageConfig(homepageConfig),\n          new Header.SetHeaderConfig(headerConfig),\n          new LogoutDialog.SetLogoutDialogConfig(logoutDialogConfig),\n          new Error.SetGenericErrorMessages(genericErrorMessages),\n          new Ui.SetGenericAccessibility(genericAccessibility),\n          new Configs.FetchConfigsSuccess({\n            configs: toJsTable<IConfig>(config as { [id: string]: IConfig }),\n          })\n        );\n        this._store$.dispatch(actions);\n      })\n    );\n  }\n\n  @Action(Configs.FetchConfigsSuccess)\n  fetchConfigsSuccess(\n    ctx: StateContext<ConfigsStateModel>,\n    action: Configs.FetchConfigsSuccess\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      ...mergeInto({ ...ctx.getState() }, action.payload.configs),\n      isFetchingConfigs: false,\n      isFetchingConfigsSuccess: true,\n    });\n  }\n\n  @Action(Configs.FetchConfigsError)\n  fetchConfigsError(ctx: StateContext<ConfigsStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      ...emptyJsTable<IConfig>(),\n      isFetchingConfigs: false,\n      isFetchingConfigsError: true,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  IData,\n  IDataItem,\n  IDataNode,\n  IEntryIds,\n} from '../../interfaces/data.interface';\nimport { IAdvancedSearchChip } from '../../interfaces/ui.interface';\n\nexport class SetSelectedResourceTypeId {\n  static readonly type = '[Data] Set selected LDAP type id';\n  constructor(public payload: { id: string }) {}\n}\n\nexport class ResetSelectedResourceTypeId {\n  static readonly type = '[Data] Reset selected LDAP type id';\n}\n\nexport class SetSelectedEntryIds {\n  static readonly type = '[Data] Set selected LDAP element ids';\n  constructor(public payload: { ids: IEntryIds }) {}\n}\n\nexport class ResetSelectedEntryIds {\n  static readonly type = '[Data] Reset selected LDAP element ids';\n}\n\nexport class SetSelectedEntryId {\n  static readonly type = '[Data] Set selected LDAP element id';\n  constructor(public payload: { id: string }) {}\n}\n\nexport class ResetSelectedEntryId {\n  static readonly type = '[Data] Reset selected LDAP element id';\n}\n\nexport class SetSelectedEntryExternalId {\n  static readonly type = '[Data] Set selected LDAP element externalId';\n  constructor(public payload: { externalId: string }) {}\n}\n\nexport class ResetSelectedEntryExternalId {\n  static readonly type = '[Data] Reset selected LDAP element externalId';\n}\n\nexport class SetSelectedEntryParentIds {\n  static readonly type = '[Data] Set selected LDAP parent element ids';\n  constructor(public payload: { ids: IEntryIds }) {}\n}\n\nexport class ResetSelectedEntryParentIds {\n  static readonly type = '[Data] Reset selected LDAP parent element ids';\n}\n\nexport class SetSelectedEntryParentId {\n  static readonly type = '[Data] Set selected LDAP parent element id';\n  constructor(public payload: { id: string }) {}\n}\n\nexport class ResetSelectedEntryParentId {\n  static readonly type = '[Data] Reset selected LDAP parent element id';\n}\n\nexport class SetSelectedEntryParentExternalId {\n  static readonly type = '[Data] Set selected LDAP parent element externalId';\n  constructor(public payload: { externalId: string }) {}\n}\n\nexport class ResetSelectedEntryParentExternalId {\n  static readonly type = '[Data] Reset selected LDAP parent element externalId';\n}\n\nexport class SetRootIdSelectedResourceType {\n  static readonly type = '[Data] Set root id selected LDAP type';\n  constructor(public payload: { id: string }) {}\n}\n\nexport class ResetRootIdSelectedResourceType {\n  static readonly type = '[Data] Reset root id selected LDAP type';\n}\n\nexport class InitDataJsTable {\n  static readonly type = '[Data] Init data JsTable';\n  constructor(public payload: { resourcesTypesIds: string[] }) {}\n}\n\nexport class ToggleFoldTreeNode {\n  static readonly type = '[Data] Toggle fold tree node';\n  constructor(\n    public payload: {\n      treeNodeId: string;\n      isFolding: boolean;\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class SetFilterValue {\n  static readonly type = '[Data] Set filter value';\n  constructor(\n    public payload: {\n      filterValue: string;\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class SetSearchFormValue {\n  static readonly type = '[Data] Set search form value';\n  constructor(\n    public payload: {\n      searchForm: string;\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class ResetSearchFormValue {\n  static readonly type = '[Data] Reset search form value';\n  constructor(\n    public payload: {\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class SetAdvancedSearchChips {\n  static readonly type = '[Data] Set advanced search chips';\n  constructor(\n    public payload: {\n      advancedSearchChips: IAdvancedSearchChip[];\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class RemoveAdvancedSearchChip {\n  static readonly type = '[Data] Remove advanced search chip';\n  constructor(\n    public payload: {\n      modelRef: string;\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class ResetAdvancedSearchChips {\n  static readonly type = '[Data] Reset advanced search chips';\n  constructor(\n    public payload: {\n      dataTypeId: string;\n    }\n  ) {}\n}\n\nexport class FetchResources {\n  static readonly type = '[Data] Fetch resources';\n  constructor(\n    public payload: { resourceTypeId: string; isRedirectingToDetail: boolean }\n  ) {}\n}\n\nexport class StopFilteringResources {\n  static readonly type = '[Data] Stop Filtering resources';\n  constructor() {}\n}\n\nexport class FilterResources {\n  static readonly type = '[Data] Filter resources';\n  constructor(\n    public payload: {\n      actionOnSuccess: any;\n      filterPayload: string | IAdvancedSearchChip[];\n    }\n  ) {}\n}\n\nexport class FetchResourcesSuccess {\n  static readonly type = '[Data] Fetch resources success';\n  constructor(\n    public payload: {\n      resources: IData | IDataNode[] | IDataItem[];\n      entriesIdsMatchingAdvancedSearch: { [id: string]: true };\n    }\n  ) {}\n}\n\nexport class FetchResourcesError {\n  static readonly type = '[Data] Fetch resources error';\n}\n\nexport class SetResources {\n  static readonly type = '[Data] Set resources';\n  constructor(\n    public payload: { resources: IData | IDataNode[] | IDataItem[] }\n  ) {}\n}\n\nexport class ResetResources {\n  static readonly type = '[Data] Reset resources';\n}\n\nexport class FetchDataDetail {\n  static readonly type = '[Data] Fetch data detail';\n  public payload: { resourceTypeId: string };\n}\n\nexport class FetchDataDetailSuccess {\n  static readonly type = '[Data] Fetch data detail success';\n}\n\nexport class FetchDataDetailError {\n  static readonly type = '[Data] Fetch data detail error';\n}\n\nexport class SetDataDetail {\n  static readonly type = '[Data] Set data detail';\n  constructor(public payload: { dataDetail: any }) {}\n}\n\nexport class ResetDataDetail {\n  static readonly type = '[Data] Reset data detail';\n}\n\nexport class AddEntryIdMatchingAdvancedSearch {\n  static readonly type = '[Data] Add entry id matching advanced search';\n  constructor(public payload: { entryId: string }) {}\n}\n\nexport class RemoveEntriesIdsMatchingAdvancedSearch {\n  static readonly type = '[Data] Remove entries ids matching advanced search';\n  constructor(public payload: { entriesIds: string[] }) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport {\n  JsTable,\n  emptyJsTable,\n  putById,\n  toJsTable,\n  updateById,\n} from '../../helpers/jstable.helper';\nimport {\n  IData,\n  IDataItem,\n  IDataNode,\n  IEntryIds,\n  IPersistentUiData,\n} from '../../interfaces/data.interface';\nimport { IAdvancedSearchChip } from '../../interfaces/ui.interface';\nimport * as Data from './data.actions';\n\nexport interface DataStateModel extends JsTable<IPersistentUiData> {\n  selectedResourceTypeId: string;\n  selectedEntryIds: IEntryIds;\n  selectedEntryParentIds: IEntryIds;\n  rootIdSelectedResourceType: string;\n  isFetchingResources: boolean;\n  isFetchingResourcesError: boolean;\n  isFetchingResourcesSuccess: boolean;\n  resources: IData | IDataNode[] | IDataItem[];\n  entriesIdsMatchingAdvancedSearch: { [id: string]: true };\n  isFetchingDataDetail: boolean;\n  isFetchingDataDetailError: boolean;\n  isFetchingDataDetailSuccess: boolean;\n  dataDetail: any;\n}\n\nconst _persistentUiDataRowFactory = () => {\n  return {\n    filterValue: '',\n    searchForm: '',\n    expandedTreeNodesUuids: [],\n    advancedSearchChips: [],\n  };\n};\n\nexport function initDataStateDefaultValues() {\n  return {\n    ...emptyJsTable<IPersistentUiData>(),\n    selectedResourceTypeId: null,\n    selectedEntryIds: null,\n    selectedEntryParentIds: null,\n    rootIdSelectedResourceType: null,\n    isFetchingResources: false,\n    isFetchingResourcesError: false,\n    isFetchingResourcesSuccess: false,\n    resources: null,\n    entriesIdsMatchingAdvancedSearch: {},\n    isFetchingDataDetail: false,\n    isFetchingDataDetailError: false,\n    isFetchingDataDetailSuccess: false,\n    dataDetail: null,\n  };\n}\n\n@State<DataStateModel>({\n  name: 'data',\n  defaults: initDataStateDefaultValues(),\n})\n@Injectable()\nexport class DataState {\n  @Selector()\n  static getDataState(state: DataStateModel): DataStateModel {\n    return state;\n  }\n\n  @Selector()\n  static getSelectedResourceTypeId(state: DataStateModel): string {\n    return state.selectedResourceTypeId;\n  }\n\n  @Selector()\n  static getSelectedEntryIds(state: DataStateModel): IEntryIds {\n    return state.selectedEntryIds;\n  }\n\n  @Selector()\n  static getSelectedEntryId(state: DataStateModel): string {\n    return state.selectedEntryIds.id;\n  }\n\n  @Selector()\n  static getSelectedEntryExternalId(state: DataStateModel): string {\n    return state.selectedEntryIds.externalId;\n  }\n\n  @Selector()\n  static getSelectedEntryParentIds(state: DataStateModel): IEntryIds {\n    return state.selectedEntryParentIds;\n  }\n\n  @Selector()\n  static getSelectedEntryParentId(state: DataStateModel): string {\n    return state.selectedEntryParentIds.id;\n  }\n\n  @Selector()\n  static getSelectedEntryParentExternalId(state: DataStateModel): string {\n    return state.selectedEntryParentIds.externalId;\n  }\n\n  @Selector()\n  static getRootIdSelectedResourceType(state: DataStateModel): string {\n    return state.rootIdSelectedResourceType;\n  }\n\n  @Selector()\n  static isFetchingResources(state: DataStateModel): boolean {\n    return state.isFetchingResources;\n  }\n\n  @Selector()\n  static isFetchingResourcesSuccess(state: DataStateModel): boolean {\n    return state.isFetchingResourcesSuccess;\n  }\n\n  @Selector()\n  static isFetchingResourcesError(state: DataStateModel): boolean {\n    return state.isFetchingResourcesError;\n  }\n\n  @Selector()\n  static getResources(\n    state: DataStateModel\n  ): IData | IDataNode[] | IDataItem[] {\n    return state.resources;\n  }\n\n  @Selector() static getEntriesIdsMatchingAdvancedSearch(\n    state: DataStateModel\n  ): { [id: string]: true } {\n    return state.entriesIdsMatchingAdvancedSearch;\n  }\n\n  @Selector()\n  static isFetchingDataDetail(state: DataStateModel): boolean {\n    return state.isFetchingDataDetail;\n  }\n\n  @Selector()\n  static isFetchingDataDetailSuccess(state: DataStateModel): boolean {\n    return state.isFetchingDataDetailSuccess;\n  }\n\n  @Selector()\n  static isFetchingDataDetailError(state: DataStateModel): boolean {\n    return state.isFetchingDataDetailError;\n  }\n\n  @Selector()\n  static getDataDetail(state: DataStateModel): any {\n    return state.dataDetail;\n  }\n\n  @Selector()\n  static getDataById(state: DataStateModel): {\n    readonly [id: string]: IPersistentUiData;\n  } {\n    return state.byId;\n  }\n\n  @Selector()\n  static getDataAllIds(state: DataStateModel): string[] {\n    return state.allIds;\n  }\n\n  @Selector()\n  static getDataJsTable(state: DataStateModel): JsTable<IPersistentUiData> {\n    return {\n      byId: state.byId,\n      allIds: state.allIds,\n    };\n  }\n\n  @Selector()\n  static getAdvancedSearchChips(state: DataStateModel): IAdvancedSearchChip[] {\n    return state.byId[state.rootIdSelectedResourceType].advancedSearchChips;\n  }\n\n  @Selector()\n  static getSearchFormValue(state: DataStateModel): string {\n    return state.byId[state.rootIdSelectedResourceType].searchForm;\n  }\n\n  @Selector()\n  static isAdvancedSearchActivated(state: DataStateModel): boolean {\n    return (\n      state.byId[state.rootIdSelectedResourceType].searchForm !== '' ||\n      state.byId[state.rootIdSelectedResourceType].advancedSearchChips.length >\n        0\n    );\n  }\n\n  @Action(Data.SetSelectedResourceTypeId)\n  setSelectedResourceTypeId(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedResourceTypeId\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedResourceTypeId: action.payload.id,\n    });\n  }\n\n  @Action(Data.ResetSelectedResourceTypeId)\n  resetSelectedResourceTypeId(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedResourceTypeId: null,\n    });\n  }\n\n  @Action(Data.SetSelectedEntryIds)\n  setSelectedEntryIds(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedEntryIds\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryIds: action.payload.ids,\n    });\n  }\n\n  @Action(Data.ResetSelectedEntryIds)\n  resetSelectedEntryIds(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryIds: null,\n    });\n  }\n\n  @Action(Data.SetSelectedEntryId)\n  setSelectedEntryId(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedEntryId\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryIds: {\n        ...ctx.getState().selectedEntryIds,\n        id: action.payload.id,\n      },\n    });\n  }\n\n  @Action(Data.ResetSelectedEntryId)\n  resetSelectedEntryId(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryIds: {\n        ...ctx.getState().selectedEntryIds,\n        id: null,\n      },\n    });\n  }\n\n  @Action(Data.SetSelectedEntryExternalId)\n  setSelectedEntryExternalId(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedEntryExternalId\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryIds: {\n        ...ctx.getState().selectedEntryIds,\n        externalId: action.payload.externalId,\n      },\n    });\n  }\n\n  @Action(Data.ResetSelectedEntryExternalId)\n  resetSelectedEntryExternalId(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryIds: {\n        ...ctx.getState().selectedEntryIds,\n        externalId: null,\n      },\n    });\n  }\n\n  @Action(Data.SetSelectedEntryParentIds)\n  setSelectedEntryParentIds(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedEntryParentIds\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryParentIds: action.payload.ids,\n    });\n  }\n\n  @Action(Data.ResetSelectedEntryParentIds)\n  resetSelectedEntryParentIds(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryParentIds: null,\n    });\n  }\n\n  @Action(Data.SetSelectedEntryParentId)\n  setSelectedEntryParentId(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedEntryParentId\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryParentIds: {\n        ...ctx.getState().selectedEntryParentIds,\n        id: action.payload.id,\n      },\n    });\n  }\n\n  @Action(Data.ResetSelectedEntryParentId)\n  resetSelectedEntryParentId(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryParentIds: {\n        ...ctx.getState().selectedEntryParentIds,\n        id: null,\n      },\n    });\n  }\n\n  @Action(Data.SetSelectedEntryParentExternalId)\n  setSelectedEntryParentExternalId(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSelectedEntryParentExternalId\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryParentIds: {\n        ...ctx.getState().selectedEntryParentIds,\n        externalId: action.payload.externalId,\n      },\n    });\n  }\n\n  @Action(Data.ResetSelectedEntryParentExternalId)\n  resetSelectedEntryParentExternalId(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      selectedEntryParentIds: {\n        ...ctx.getState().selectedEntryParentIds,\n        externalId: null,\n      },\n    });\n  }\n\n  @Action(Data.SetRootIdSelectedResourceType)\n  setRootIdSelectedResourceType(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetRootIdSelectedResourceType\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      rootIdSelectedResourceType: action.payload.id,\n    });\n  }\n\n  @Action(Data.ResetRootIdSelectedResourceType)\n  resetIdRootSelectedResourceType(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      rootIdSelectedResourceType: null,\n    });\n  }\n\n  @Action(Data.InitDataJsTable)\n  initDataJsTable(\n    ctx: StateContext<DataStateModel>,\n    action: Data.InitDataJsTable\n  ): void {\n    const jsTable = toJsTable<IPersistentUiData>(\n      action.payload.resourcesTypesIds.reduce(\n        (acc, resourceTypeId) => ({\n          ...acc,\n          [resourceTypeId]: _persistentUiDataRowFactory(),\n        }),\n        {} as { [id: string]: IPersistentUiData }\n      )\n    );\n\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.ToggleFoldTreeNode)\n  toggleFoldTreeNode(\n    ctx: StateContext<DataStateModel>,\n    action: Data.ToggleFoldTreeNode\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = action.payload.isFolding\n      ? updateById(ctx.getState(), action.payload.dataTypeId, {\n          expandedTreeNodesUuids: [\n            ...ctx\n              .getState()\n              .byId[\n                action.payload.dataTypeId\n              ].expandedTreeNodesUuids.filter((link: string) => link !== action.payload.treeNodeId),\n          ],\n        })\n      : putById(\n          ctx.getState(),\n          action.payload.dataTypeId,\n          {\n            expandedTreeNodesUuids: [\n              ...ctx.getState().byId[action.payload.dataTypeId]\n                .expandedTreeNodesUuids,\n              action.payload.treeNodeId,\n            ],\n          },\n          _persistentUiDataRowFactory\n        );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.SetFilterValue)\n  setFilterValue(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetFilterValue\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = updateById(\n      ctx.getState(),\n      action.payload.dataTypeId,\n      {\n        filterValue: action.payload.filterValue,\n      }\n    );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.SetSearchFormValue)\n  setSearchFormValue(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetSearchFormValue\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = updateById(\n      ctx.getState(),\n      action.payload.dataTypeId,\n      {\n        searchForm: action.payload.searchForm,\n      }\n    );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.SetAdvancedSearchChips)\n  setAdvancedSearchChips(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetAdvancedSearchChips\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = updateById(\n      ctx.getState(),\n      action.payload.dataTypeId,\n      {\n        advancedSearchChips: action.payload.advancedSearchChips,\n      }\n    );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.ResetSearchFormValue)\n  resetSearchFormValue(\n    ctx: StateContext<DataStateModel>,\n    action: Data.ResetSearchFormValue\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = updateById(\n      ctx.getState(),\n      action.payload.dataTypeId,\n      {\n        searchForm: '',\n      }\n    );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.RemoveAdvancedSearchChip)\n  removeAdvancedSearchChip(\n    ctx: StateContext<DataStateModel>,\n    action: Data.RemoveAdvancedSearchChip\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = updateById(\n      ctx.getState(),\n      action.payload.dataTypeId,\n      {\n        advancedSearchChips: [\n          ...ctx\n            .getState()\n            .byId[\n              action.payload.dataTypeId\n            ].advancedSearchChips.filter((chip: IAdvancedSearchChip) => {\n              const chipModelRef: string =\n                chip.associatedFieldId ?? chip.modelRef;\n              return chipModelRef !== action.payload.modelRef;\n            }),\n        ],\n      }\n    );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.ResetAdvancedSearchChips)\n  resetAdvancedSearchChips(\n    ctx: StateContext<DataStateModel>,\n    action: Data.ResetAdvancedSearchChips\n  ): void {\n    const jsTable: JsTable<IPersistentUiData> = updateById(\n      ctx.getState(),\n      action.payload.dataTypeId,\n      { advancedSearchChips: [] as IAdvancedSearchChip[] }\n    );\n    ctx.setState({\n      ...ctx.getState(),\n      ...jsTable,\n    });\n  }\n\n  @Action(Data.FilterResources)\n  filterResources(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isFetchingResources: true,\n      isFetchingResourcesSuccess: false,\n      isFetchingResourcesError: false,\n    });\n  }\n\n  @Action(Data.FetchResources)\n  fetchResources(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      resources: null,\n      entriesIdsMatchingAdvancedSearch: {},\n      isFetchingResources: true,\n      isFetchingResourcesSuccess: false,\n      isFetchingResourcesError: false,\n    });\n  }\n\n  @Action([Data.StopFilteringResources])\n  stopFilteringResources(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isFetchingResources: false,\n    });\n  }\n\n  @Action(Data.AddEntryIdMatchingAdvancedSearch)\n  addEntryIdMatchingAdvancedSearch(\n    ctx: StateContext<DataStateModel>,\n    action: Data.AddEntryIdMatchingAdvancedSearch\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      entriesIdsMatchingAdvancedSearch: {\n        ...ctx.getState().entriesIdsMatchingAdvancedSearch,\n        [action.payload.entryId]: true,\n      },\n    });\n  }\n\n  @Action(Data.RemoveEntriesIdsMatchingAdvancedSearch)\n  removeEntriesIdsMatchingAdvancedSearch(\n    ctx: StateContext<DataStateModel>,\n    action: Data.RemoveEntriesIdsMatchingAdvancedSearch\n  ): void {\n    action.payload.entriesIds.forEach(\n      (id: string) => delete ctx.getState().entriesIdsMatchingAdvancedSearch[id]\n    );\n  }\n\n  @Action(Data.FetchResourcesSuccess)\n  fetchResourcesSuccess(\n    ctx: StateContext<DataStateModel>,\n    action: Data.FetchResourcesSuccess\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      resources: action.payload.resources,\n      entriesIdsMatchingAdvancedSearch:\n        action.payload.entriesIdsMatchingAdvancedSearch,\n      isFetchingResources: false,\n      isFetchingResourcesSuccess: true,\n    });\n  }\n\n  @Action(Data.FetchResourcesError)\n  fetchResourcesError(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      resources: null,\n      entriesIdsMatchingAdvancedSearch: {},\n      isFetchingResources: false,\n      isFetchingResourcesError: true,\n    });\n  }\n\n  @Action(Data.SetResources)\n  setResources(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetResources\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      resources: action.payload.resources,\n    });\n  }\n\n  @Action(Data.ResetResources)\n  resetResources(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      resources: null,\n      entriesIdsMatchingAdvancedSearch: {},\n    });\n  }\n\n  @Action(Data.FetchDataDetail)\n  fetchDataDetail(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      dataDetail: null,\n      isFetchingDataDetail: true,\n      isFetchingDataDetailSuccess: false,\n      isFetchingDataDetailError: false,\n    });\n  }\n\n  @Action(Data.FetchDataDetailSuccess)\n  fetchDataDetailSuccess(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isFetchingDataDetail: false,\n      isFetchingDataDetailSuccess: true,\n    });\n  }\n\n  @Action(Data.FetchDataDetailError)\n  fetchDataDetailError(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      dataDetail: null,\n      isFetchingDataDetail: false,\n      isFetchingDataDetailError: true,\n    });\n  }\n\n  @Action(Data.SetDataDetail)\n  setDataDetail(\n    ctx: StateContext<DataStateModel>,\n    action: Data.SetDataDetail\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      dataDetail: action.payload.dataDetail,\n    });\n  }\n\n  @Action(Data.ResetDataDetail)\n  resetDataDetail(ctx: StateContext<DataStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      dataDetail: null,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { IExternalLink } from '../../interfaces/configs.interface';\nimport * as ExternalLinks from './external-links.actions';\n\nexport interface ExternalLinksStateModel {\n  userGuide: IExternalLink;\n  rgaaChart: IExternalLink;\n}\n\n@State<ExternalLinksStateModel>({\n  name: 'externalLinks',\n  defaults: {\n    userGuide: null,\n    rgaaChart: null,\n  },\n})\n@Injectable()\nexport class ExternalLinksState {\n  @Selector()\n  static getExternalLinks(\n    state: ExternalLinksStateModel\n  ): ExternalLinksStateModel {\n    return state;\n  }\n\n  @Selector()\n  static getExternalLinksDetail(state: ExternalLinksStateModel): {\n    userGuide: IExternalLink;\n    rgaaChart: IExternalLink;\n  } {\n    return {\n      userGuide: state.userGuide,\n      rgaaChart: state.rgaaChart,\n    };\n  }\n\n  @Selector()\n  static getUserGuide(state: ExternalLinksStateModel): IExternalLink {\n    return state.userGuide;\n  }\n\n  @Selector()\n  static getRgaaChart(state: ExternalLinksStateModel): IExternalLink {\n    return state.rgaaChart;\n  }\n\n  @Action(ExternalLinks.SetExternalLinksConfig)\n  setExternalLinksConfig(\n    ctx: StateContext<ExternalLinksStateModel>,\n    action: ExternalLinks.SetExternalLinksConfig\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      userGuide: action.payload.userGuide,\n      rgaaChart: action.payload.rgaaChart,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport {\n  IAccountDiv,\n  IBtnDetail,\n  IHeaderConfig,\n  IHeaderLogo,\n  IHeaderLogoBtn,\n  ISidenavBtn,\n  ITabProps,\n} from '../../interfaces/configs.interface';\nimport * as Header from './header.actions';\n\nexport interface HeaderStateModel {\n  logoBtn: IHeaderLogoBtn;\n  logo: IHeaderLogo;\n  logo1: IHeaderLogo;\n  sidenavBtn: ISidenavBtn;\n  accountDiv: IAccountDiv;\n  profileBtn: IBtnDetail;\n  logoutBtn: IBtnDetail;\n  tab: ITabProps;\n}\n\n@State<HeaderStateModel>({\n  name: 'header',\n  defaults: {\n    logoBtn: null,\n    logo: null,\n    logo1: null,\n    sidenavBtn: null,\n    accountDiv: null,\n    profileBtn: null,\n    logoutBtn: null,\n    tab: null,\n  },\n})\n@Injectable()\nexport class HeaderState {\n  @Selector()\n  static getHeader(state: HeaderStateModel): HeaderStateModel {\n    return state;\n  }\n\n  @Selector()\n  static getHeaderDetail(state: HeaderStateModel): IHeaderConfig {\n    return {\n      logoBtn: state.logoBtn,\n      logo: state.logo,\n      logo1: state.logo1,\n      sidenavBtn: state.sidenavBtn,\n      accountDiv: state.accountDiv,\n      profileBtn: state.profileBtn,\n      logoutBtn: state.logoutBtn,\n      tab: state.tab,\n    };\n  }\n\n  @Selector()\n  static getLogoBtn(state: HeaderStateModel): IHeaderLogoBtn {\n    return state.logoBtn;\n  }\n\n  @Selector()\n  static getLogo(state: HeaderStateModel): IHeaderLogo {\n    return state.logo;\n  }\n\n  @Selector()\n  static getLogo1(state: HeaderStateModel): IHeaderLogo {\n    return state.logo1;\n  }\n\n  @Selector()\n  static getSidenavBtn(state: HeaderStateModel): ISidenavBtn {\n    return state.sidenavBtn;\n  }\n\n  @Selector()\n  static getAccountDiv(state: HeaderStateModel): IAccountDiv {\n    return state.accountDiv;\n  }\n\n  @Selector()\n  static getProfileBtn(state: HeaderStateModel): IBtnDetail {\n    return state.profileBtn;\n  }\n\n  @Selector()\n  static getLogoutBtn(state: HeaderStateModel): IBtnDetail {\n    return state.logoutBtn;\n  }\n\n  @Selector()\n  static getTabProps(state: HeaderStateModel): ITabProps {\n    return state.tab;\n  }\n\n  @Action(Header.SetHeaderConfig)\n  setHomeConfig(\n    ctx: StateContext<HeaderStateModel>,\n    action: Header.SetHeaderConfig\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      logoBtn: action.payload.logoBtn,\n      logo: action.payload.logo,\n      logo1: action.payload.logo1,\n      sidenavBtn: action.payload.sidenavBtn,\n      accountDiv: action.payload.accountDiv,\n      profileBtn: action.payload.profileBtn,\n      logoutBtn: action.payload.logoutBtn,\n      tab: action.payload.tab,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { IHomepageConfig } from '../../interfaces/configs.interface';\nimport * as Home from './home.actions';\n\nexport interface HomeStateModel {\n  tabTitle: string;\n  title: string;\n  subtitle: string;\n  linagoraLogoAlt: string;\n}\n\n@State<HomeStateModel>({\n  name: 'home',\n  defaults: {\n    tabTitle: null,\n    title: null,\n    subtitle: null,\n    linagoraLogoAlt: null,\n  },\n})\n@Injectable()\nexport class HomeState {\n  @Selector()\n  static getHome(state: HomeStateModel): HomeStateModel {\n    return state;\n  }\n\n  @Selector()\n  static getHomeDetail(state: HomeStateModel): IHomepageConfig {\n    return {\n      tabTitle: state.tabTitle,\n      title: state.title,\n      subtitle: state.subtitle,\n      linagoraLogoAlt: state.linagoraLogoAlt,\n    };\n  }\n\n  @Selector()\n  static getTabTitle(state: HomeStateModel): string {\n    return state.tabTitle;\n  }\n\n  @Selector()\n  static getTitle(state: HomeStateModel): string {\n    return state.title;\n  }\n\n  @Selector()\n  static getSubtitle(state: HomeStateModel): string {\n    return state.subtitle;\n  }\n\n  @Selector()\n  static getLinagoraLogoAlt(state: HomeStateModel): string {\n    return state.linagoraLogoAlt;\n  }\n\n  @Action(Home.SetHomepageConfig)\n  setHomeConfig(\n    ctx: StateContext<HomeStateModel>,\n    action: Home.SetHomepageConfig\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      tabTitle: action.payload.tabTitle,\n      title: action.payload.title,\n      subtitle: action.payload.subtitle,\n      linagoraLogoAlt: action.payload.linagoraLogoAlt,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport {\n  IBtnDetail,\n  ILogoutDialogConfig,\n} from '../../interfaces/configs.interface';\nimport * as LogoutDialog from '../../states/logout-dialog/logout-dialog.actions';\n\nexport interface LogoutDialogStateModel {\n  title: string;\n  content: string;\n  logoutBtn: IBtnDetail;\n  cancelBtn: IBtnDetail;\n}\n\n@State<LogoutDialogStateModel>({\n  name: 'logoutDialog',\n  defaults: {\n    title: '',\n    content: '',\n    logoutBtn: null,\n    cancelBtn: null,\n  },\n})\n@Injectable()\nexport class LogoutDialogState {\n  @Selector()\n  static getLogoutDialog(\n    state: LogoutDialogStateModel\n  ): LogoutDialogStateModel {\n    return state;\n  }\n\n  @Selector()\n  static getLogoutDialogDetail(\n    state: LogoutDialogStateModel\n  ): ILogoutDialogConfig {\n    return {\n      title: state.title,\n      content: state.content,\n      logoutBtn: state.logoutBtn,\n      cancelBtn: state.cancelBtn,\n    };\n  }\n\n  @Selector()\n  static getTitle(state: LogoutDialogStateModel): string {\n    return state.title;\n  }\n\n  @Selector()\n  static getContent(state: LogoutDialogStateModel): string {\n    return state.content;\n  }\n\n  @Selector()\n  static getLogoutBtn(state: LogoutDialogStateModel): IBtnDetail {\n    return state.logoutBtn;\n  }\n\n  @Selector()\n  static getCancelBtn(state: LogoutDialogStateModel): IBtnDetail {\n    return state.cancelBtn;\n  }\n\n  @Action(LogoutDialog.SetLogoutDialogConfig)\n  setHomeConfig(\n    ctx: StateContext<LogoutDialogStateModel>,\n    action: LogoutDialog.SetLogoutDialogConfig\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      title: action.payload.title,\n      content: action.payload.content,\n      logoutBtn: action.payload.logoutBtn,\n      cancelBtn: action.payload.cancelBtn,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { tap } from 'rxjs';\nimport {\n  JsTable,\n  emptyJsTable,\n  mergeInto,\n  toJsTable,\n} from '../../helpers/jstable.helper';\nimport {\n  IResourceType,\n  IResourceTypeFromBackend,\n  IResourcesTypes,\n} from '../../interfaces/resources-types.interface';\nimport { ResourcesTypesService } from '../../services/resources-types.service';\nimport * as Data from '../data/data.actions';\nimport * as ResourcesTypes from './resources-types.actions';\n\nexport interface ResourcesTypesStateModel extends JsTable<IResourceType> {\n  isFetchingResourcesTypes: boolean;\n  isFetchingResourcesTypesError: boolean;\n  isFetchingResourcesTypesSuccess: boolean;\n}\n\n@State<ResourcesTypesStateModel>({\n  name: 'resourcesTypes',\n  defaults: {\n    ...emptyJsTable<IResourceType>(),\n    isFetchingResourcesTypes: false,\n    isFetchingResourcesTypesError: false,\n    isFetchingResourcesTypesSuccess: false,\n  },\n})\n@Injectable()\nexport class ResourcesTypesState {\n  constructor(\n    private _resourcesTypesService: ResourcesTypesService,\n    private _store$: Store\n  ) {}\n\n  @Selector()\n  static isFetchingResourcesTypes(state: ResourcesTypesStateModel): boolean {\n    return state.isFetchingResourcesTypes;\n  }\n\n  @Selector()\n  static isFetchingResourcesTypesSuccess(\n    state: ResourcesTypesStateModel\n  ): boolean {\n    return state.isFetchingResourcesTypesSuccess;\n  }\n\n  @Selector()\n  static isFetchingResourcesTypesError(\n    state: ResourcesTypesStateModel\n  ): boolean {\n    return state.isFetchingResourcesTypesError;\n  }\n\n  @Selector()\n  static getResourcesTypesById(state: ResourcesTypesStateModel): {\n    readonly [id: string]: IResourceType;\n  } {\n    return state.byId;\n  }\n\n  @Selector()\n  static getResourcesTypesAllIds(state: ResourcesTypesStateModel): string[] {\n    return state.allIds;\n  }\n\n  @Selector()\n  static getResourcesTypesJsTable(\n    state: ResourcesTypesStateModel\n  ): JsTable<IResourceType> {\n    return {\n      byId: state.byId,\n      allIds: state.allIds,\n    };\n  }\n\n  @Action(ResourcesTypes.FetchResourcesTypes)\n  fetchResourcesTypes(ctx: StateContext<ResourcesTypesStateModel>): any {\n    ctx.setState({\n      ...ctx.getState(),\n      isFetchingResourcesTypes: true,\n      isFetchingResourcesTypesSuccess: false,\n      isFetchingResourcesTypesError: false,\n    });\n    return this._resourcesTypesService.getResourcesTypes().pipe(\n      tap((resourcesTypes: IResourceTypeFromBackend[]) => {\n        /**\n         * We convert resource types array received from backend to javascript dictionnary\n         * then it will be easier to convert it to a jsTable\n         */\n\n        let resourcesTypesIds = resourcesTypes.map(\n          (resourceType: IResourceTypeFromBackend) => {\n            if (!!resourceType.id && resourceType.id.length > 0) {\n              return (\n                resourceType.id[0].toLowerCase() +\n                resourceType.id.substring(1, resourceType.id.length)\n              );\n            }\n          }\n        );\n\n        const resourcesTypesForFrontend: IResourcesTypes =\n          resourcesTypes.reduce((acc, resourceType, index) => {\n            if (!!resourcesTypesIds[index]) {\n              return {\n                ...acc,\n                [resourcesTypesIds[index]]: {\n                  name: resourceType.name,\n                  endpoint: resourceType.endpoint,\n                  schema: resourceType.schema,\n                },\n              };\n            }\n          }, {} as IResourcesTypes);\n\n        resourcesTypesIds = resourcesTypesIds.filter(\n          (resourceTypeId: string) => !!resourceTypeId\n        );\n\n        this._store$.dispatch([\n          new ResourcesTypes.FetchResourcesTypesSuccess({\n            resourcesTypes: toJsTable<IResourceType>(resourcesTypesForFrontend),\n          }),\n          new Data.InitDataJsTable({ resourcesTypesIds }),\n        ]);\n      })\n    );\n  }\n\n  @Action(ResourcesTypes.FetchResourcesTypesSuccess)\n  fetchResourcesTypesSuccess(\n    ctx: StateContext<ResourcesTypesStateModel>,\n    action: ResourcesTypes.FetchResourcesTypesSuccess\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      ...mergeInto({ ...ctx.getState() }, action.payload.resourcesTypes),\n      isFetchingResourcesTypes: false,\n      isFetchingResourcesTypesSuccess: true,\n    });\n  }\n\n  @Action(ResourcesTypes.FetchResourcesTypesError)\n  fetchResourcesTypesError(ctx: StateContext<ResourcesTypesStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      ...emptyJsTable<IResourceType>(),\n      isFetchingResourcesTypes: false,\n      isFetchingResourcesTypesError: true,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { JsTable } from '../../helpers/jstable.helper';\nimport { IConfig } from '../../interfaces/configs.interface';\nimport { IResourceType } from '../../interfaces/resources-types.interface';\nimport {\n  IRouteDetail,\n  IRouteParameters,\n  IUpdateLastPositionDetail,\n} from '../../interfaces/routing.interface';\n\nexport class AddCurrentRoute {\n  static readonly type = '[Routing] Add current route in routing history';\n  constructor(public payload: { route: IRouteDetail }) {}\n}\n\nexport class RemoveLastRoute {\n  static readonly type = '[Routing] Remove last route in routing history';\n}\n\nexport class RestoreRoute {\n  static readonly type = '[Routing] Restore previous or next route';\n  constructor(public payload: IUpdateLastPositionDetail) {}\n}\n\nexport class SetIsRedirectAllowed {\n  static readonly type = '[Routing] Set allowed redirect';\n  constructor(public payload: boolean) {}\n}\n\nexport class SetAvailableRoutes {\n  static readonly type = '[Routing] Set availlable routes';\n  constructor(\n    public payload: {\n      resourcesTypes: JsTable<IResourceType>;\n      configs: JsTable<IConfig>;\n    }\n  ) {}\n}\n\nexport class UpdateSelectedEntryRoute {\n  static readonly type = '[Routing] Update selected entry route';\n  constructor(public payload: { route: IRouteParameters }) {}\n}\n\nexport class UpdateSelectedEntryChildrenRoutes {\n  static readonly type = '[Routing] Update selected entry children routes';\n  constructor(public payload: { routingHistory: IRouteDetail[] }) {}\n}\n\nexport class UpdateCurrentUrl {\n  static readonly type = '[Routing] Update current url';\n  constructor(public payload: { newUrl: string }) {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { getUserInterfaceRoutesRegexp } from '../../helpers/configs.helper';\nimport { JsTable, emptyJsTable, toJsTable } from '../../helpers/jstable.helper';\nimport {\n  IResourceTypeRoutesRegExp,\n  IRouteDetail,\n  IRouteDetailExtras,\n} from '../../interfaces/routing.interface';\nimport * as Data from '../data/data.actions';\nimport * as Routing from './routing.actions';\n\nexport interface RoutingStateModel {\n  routingHistory: IRouteDetail[];\n  currentRouteIndex: number;\n  isRedirectAllowed: boolean;\n  availableRoutes: JsTable<IResourceTypeRoutesRegExp>;\n}\n\n@State<RoutingStateModel>({\n  name: 'routing',\n  defaults: {\n    routingHistory: [],\n    currentRouteIndex: null,\n    isRedirectAllowed: false,\n    availableRoutes: emptyJsTable<IResourceTypeRoutesRegExp>(),\n  },\n})\n@Injectable()\nexport class RoutingState {\n  constructor(private _store$: Store) {}\n  @Selector()\n  static getCurrentRouteUrl(state: RoutingStateModel): string {\n    return state.routingHistory[state.currentRouteIndex].url;\n  }\n\n  @Selector()\n  static geCurrentRouteIndex(state: RoutingStateModel): number {\n    return state.currentRouteIndex;\n  }\n\n  @Selector()\n  static getRoutingHistory(state: RoutingStateModel): IRouteDetail[] {\n    return state.routingHistory;\n  }\n\n  @Selector()\n  static getIsRedirectAllowed(state: RoutingStateModel): boolean {\n    return state.isRedirectAllowed;\n  }\n\n  @Selector()\n  static getAvailableRoutes(\n    state: RoutingStateModel\n  ): JsTable<IResourceTypeRoutesRegExp> {\n    return state.availableRoutes;\n  }\n\n  @Selector()\n  static getAvailableRoutesAllIds(state: RoutingStateModel): string[] {\n    return state.availableRoutes.allIds;\n  }\n\n  @Selector()\n  static getAvailableRoutesById(state: RoutingStateModel): {\n    [resourceTypeId: string]: IResourceTypeRoutesRegExp;\n  } {\n    return state.availableRoutes.byId;\n  }\n\n  @Action(Routing.AddCurrentRoute)\n  addCurrentRoute(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.AddCurrentRoute\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      routingHistory: [\n        ...ctx\n          .getState()\n          .routingHistory.slice(0, ctx.getState().currentRouteIndex + 1),\n        action.payload.route,\n      ],\n      currentRouteIndex: ctx.getState().routingHistory.length,\n    });\n  }\n\n  @Action(Routing.RestoreRoute)\n  restoreRoute(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.RestoreRoute\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      routingHistory: [\n        ...ctx.getState().routingHistory.map((route, index) =>\n          index === action.payload.newRouteIndex\n            ? Object.assign({}, route, {\n                navigationIds: [\n                  ...route.navigationIds,\n                  action.payload.newNavigationId,\n                ],\n              })\n            : route\n        ),\n      ],\n      currentRouteIndex: action.payload.newRouteIndex,\n    });\n    const extrasIds: IRouteDetailExtras =\n      ctx.getState().routingHistory[action.payload.newRouteIndex].extras;\n    if (extrasIds !== null) {\n      this._store$.dispatch([\n        new Data.SetSelectedEntryIds({ ids: extrasIds.ids }),\n        new Data.SetSelectedEntryParentIds({ ids: extrasIds.parentIds }),\n      ]);\n    }\n  }\n\n  @Action(Routing.RemoveLastRoute)\n  removeLastRoute(ctx: StateContext<RoutingStateModel>): void {\n    ctx.getState().routingHistory.pop();\n    ctx.setState({\n      ...ctx.getState(),\n      routingHistory: [...ctx.getState().routingHistory],\n      currentRouteIndex: ctx.getState().currentRouteIndex - 1,\n    });\n  }\n\n  @Action(Routing.SetIsRedirectAllowed)\n  setIsRedirectAllowed(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.SetIsRedirectAllowed\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isRedirectAllowed: action.payload,\n    });\n  }\n\n  @Action(Routing.SetAvailableRoutes)\n  setAvailableRoutes(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.SetAvailableRoutes\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      availableRoutes: toJsTable<IResourceTypeRoutesRegExp>(\n        getUserInterfaceRoutesRegexp(\n          action.payload.resourcesTypes,\n          action.payload.configs\n        )\n      ),\n    });\n  }\n\n  @Action(Routing.UpdateSelectedEntryRoute)\n  updateSelectedEntryRoute(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.UpdateSelectedEntryRoute\n  ): void {\n    const updatedRouteExtras: IRouteDetailExtras = action.payload.route.extras;\n    ctx.setState({\n      ...ctx.getState(),\n      routingHistory: ctx\n        .getState()\n        .routingHistory.map((route: IRouteDetail) => {\n          if (route.extras.ids?.id === updatedRouteExtras.ids.id) {\n            route.extras = updatedRouteExtras;\n            route.url = action.payload.route.url;\n          }\n          return route;\n        }),\n    });\n  }\n\n  @Action(Routing.UpdateSelectedEntryChildrenRoutes)\n  updateSelectedEntryChildrenRoutes(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.UpdateSelectedEntryChildrenRoutes\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      routingHistory: [...action.payload.routingHistory],\n    });\n  }\n\n  @Action(Routing.UpdateCurrentUrl)\n  updateCurrentUrl(\n    ctx: StateContext<RoutingStateModel>,\n    action: Routing.UpdateCurrentUrl\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      routingHistory: [\n        ...ctx.getState().routingHistory.map((route, index) =>\n          index === ctx.getState().currentRouteIndex\n            ? Object.assign({}, route, {\n                url: action.payload.newUrl,\n              })\n            : route\n        ),\n      ],\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { distinctUntilChanged, map, Observable } from 'rxjs';\nimport {\n  IAdvancedSearchAccessibility,\n  IArrayGenericAccessibility,\n  IDetailHeaderAccessibility,\n  IFilterAccessibility,\n  IFormAccessibility,\n  IGenericAccessibilityConfig,\n  INotFoundAccessibility,\n  ISearchBarAccessibility,\n} from '../../interfaces/configs.interface';\nimport { ScreenSize } from '../../interfaces/ui.interface';\nimport * as Ui from './ui.actions';\n\nexport interface UiStateModel {\n  language: string;\n  sidenavStateFixed: boolean;\n  sidenavMode: string;\n  isSidenavCollapsed: boolean;\n  screenSize: ScreenSize;\n  theme: string;\n  genericAccessibility: IGenericAccessibilityConfig;\n}\n\nconst _isLargeScreen = (ss: ScreenSize) =>\n  ss === 'lg' || ss === 'gt-lg' || ss === 'xl' || ss === 'gt-md';\n\nconst _changeSidenavMode = (mode: string) =>\n  mode === 'sidebar' ? 'sidenav' : 'sidebar';\n\nconst _changeSidenavModeOnResize = (\n  stateFixed: boolean,\n  mode: string,\n  ss: ScreenSize\n) =>\n  !stateFixed\n    ? mode === 'sidenav' && !_isLargeScreen(ss)\n      ? 'sidebar'\n      : mode === 'sidebar' && _isLargeScreen(ss)\n        ? 'sidenav'\n        : mode\n    : mode;\n\nconst _initSidenavMode = (ss: ScreenSize) =>\n  _isLargeScreen(ss) ? 'sidenav' : 'sidebar';\n\nconst _changeSidenavStateFixed = (mode: string, ss: ScreenSize) =>\n  (mode === 'sidenav' && _isLargeScreen(ss)) ||\n  (mode === 'sidebar' && !_isLargeScreen(ss));\n\nconst _sidenavCollapsed = (\n  sidenavStateFixed: boolean,\n  isSidenavCollapsed: boolean,\n  ss: ScreenSize\n) => (sidenavStateFixed ? isSidenavCollapsed : !_isLargeScreen(ss));\n\nexport const isLargeScreen = (store$: Store): Observable<boolean> => {\n  return store$\n    .select((state) => state.ui.screenSize)\n    .pipe(map(_isLargeScreen), distinctUntilChanged());\n};\n\nexport const isSmallScreen = (store$: Store): Observable<boolean> => {\n  return isLargeScreen(store$).pipe(map((b: boolean) => !b));\n};\n\n@State<UiStateModel>({\n  name: 'ui',\n  defaults: {\n    language: '',\n    sidenavStateFixed: false,\n    sidenavMode: '',\n    isSidenavCollapsed: false,\n    screenSize: '',\n    theme: '',\n    genericAccessibility: null,\n  },\n})\n@Injectable()\nexport class UiState {\n  @Selector()\n  static getLanguage(state: UiStateModel): string {\n    return state.language;\n  }\n\n  @Selector()\n  static getSidenavMode(state: UiStateModel): string {\n    return state.sidenavMode;\n  }\n\n  @Selector()\n  static getSidenavStateFixed(state: UiStateModel): boolean {\n    return state.sidenavStateFixed;\n  }\n\n  @Selector()\n  static getIsSidenavCollapsed(state: UiStateModel): boolean {\n    return state.isSidenavCollapsed;\n  }\n\n  @Selector()\n  static getScreenSize(state: UiStateModel): ScreenSize {\n    return state.screenSize;\n  }\n\n  @Selector()\n  static getTheme(state: UiStateModel): string {\n    return state.theme;\n  }\n\n  @Selector()\n  static getGenericAccessibility(\n    state: UiStateModel\n  ): IGenericAccessibilityConfig {\n    return state.genericAccessibility;\n  }\n\n  @Selector()\n  static getAdvancedSearchAccessibility(\n    state: UiStateModel\n  ): IAdvancedSearchAccessibility {\n    return state.genericAccessibility.advancedSearch;\n  }\n\n  @Selector()\n  static getFormAccessibility(state: UiStateModel): IFormAccessibility {\n    return state.genericAccessibility.form;\n  }\n\n  @Selector()\n  static getFilterAccessibility(state: UiStateModel): IFilterAccessibility {\n    return state.genericAccessibility.filter;\n  }\n\n  @Selector()\n  static getArrayAccessibility(\n    state: UiStateModel\n  ): IArrayGenericAccessibility {\n    return state.genericAccessibility.array;\n  }\n\n  @Selector()\n  static getSearchBarAccessibility(\n    state: UiStateModel\n  ): ISearchBarAccessibility {\n    return state.genericAccessibility.searchBar;\n  }\n\n  @Selector()\n  static getDetailHeaderAccessibility(\n    state: UiStateModel\n  ): IDetailHeaderAccessibility {\n    return state.genericAccessibility.detailHeader;\n  }\n\n  @Selector()\n  static getNotFoundAccessibility(state: UiStateModel): INotFoundAccessibility {\n    return state.genericAccessibility.notFound;\n  }\n\n  @Action(Ui.SetLanguage)\n  setLanguage(ctx: StateContext<UiStateModel>, action: Ui.SetLanguage): void {\n    ctx.setState({\n      ...ctx.getState(),\n      language: action.payload.language,\n    });\n  }\n\n  @Action(Ui.ToggleSidenav)\n  toggleSidenav(ctx: StateContext<UiStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      sidenavStateFixed: _changeSidenavStateFixed(\n        ctx.getState().sidenavMode,\n        ctx.getState().screenSize\n      ),\n      sidenavMode: _changeSidenavMode(ctx.getState().sidenavMode),\n      isSidenavCollapsed: !ctx.getState().isSidenavCollapsed,\n    });\n  }\n\n  @Action(Ui.ChangeScreenSize)\n  changeScreenSize(\n    ctx: StateContext<UiStateModel>,\n    action: Ui.ChangeScreenSize\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      screenSize: action.payload.screenSize,\n      sidenavMode:\n        ctx.getState().sidenavMode === ''\n          ? _initSidenavMode(action.payload.screenSize)\n          : _changeSidenavModeOnResize(\n              ctx.getState().sidenavStateFixed,\n              ctx.getState().sidenavMode,\n              action.payload.screenSize\n            ),\n      isSidenavCollapsed: _sidenavCollapsed(\n        ctx.getState().sidenavStateFixed,\n        ctx.getState().isSidenavCollapsed,\n        action.payload.screenSize\n      ),\n    });\n  }\n\n  @Action(Ui.ChangeTheme)\n  changeTheme(ctx: StateContext<UiStateModel>, action: Ui.ChangeTheme): void {\n    ctx.setState({\n      ...ctx.getState(),\n      theme: action.payload.theme,\n    });\n  }\n\n  @Action(Ui.SetGenericAccessibility)\n  setGenericAccessibility(\n    ctx: StateContext<UiStateModel>,\n    action: Ui.SetGenericAccessibility\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      genericAccessibility: action.payload,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { ICurrentUserConfig } from '../../interfaces/configs.interface';\nimport * as User from './user.actions';\n\nexport interface UserStateModel {\n  id: string;\n  userName: string;\n  displayName: string;\n  photo: string;\n  canAssignOrMove: string[];\n  isConnected: boolean;\n  isDisconnected: boolean;\n  isConnecting: boolean;\n  isDisconnecting: boolean;\n  connectionFailed: boolean;\n  codeConnectionError: number;\n  connectionErrorMessage: string;\n  disconnectionFailed: boolean;\n  codeDisconnectionError: number;\n  disconnectionErrorMessage: string;\n}\n\nexport function initUserStateDefaultValues() {\n  return {\n    id: null,\n    userName: null,\n    displayName: null,\n    photo: null,\n    canAssignOrMove: [],\n    isConnected: false,\n    isDisconnected: true,\n    isConnecting: false,\n    isDisconnecting: false,\n    connectionFailed: false,\n    codeConnectionError: null,\n    connectionErrorMessage: null,\n    disconnectionFailed: false,\n    codeDisconnectionError: null,\n    disconnectionErrorMessage: null,\n  };\n}\n\n@State<UserStateModel>({\n  name: 'user',\n  defaults: initUserStateDefaultValues(),\n})\n@Injectable()\nexport class UserState {\n  @Selector()\n  static getUser(state: UserStateModel): UserStateModel {\n    return state;\n  }\n\n  @Selector()\n  static getCurrentUserDetail(state: UserStateModel): ICurrentUserConfig {\n    return {\n      id: state.id,\n      userName: state.userName,\n      displayName: state.displayName,\n      photo: state.photo,\n      canAssignOrMove: state.canAssignOrMove,\n    };\n  }\n\n  @Selector()\n  static getId(state: UserStateModel): string {\n    return state.id;\n  }\n\n  @Selector()\n  static getDisplayName(state: UserStateModel): string {\n    return state.displayName;\n  }\n\n  @Selector()\n  static getPhoto(state: UserStateModel): string {\n    return state.photo;\n  }\n\n  @Selector()\n  static getCanAssignOrMoveAuthorizedTypes(state: UserStateModel): string[] {\n    return state.canAssignOrMove;\n  }\n\n  @Selector()\n  static getIsConnected(state: UserStateModel): boolean {\n    return state.isConnected;\n  }\n\n  @Selector()\n  static getIsDisconnected(state: UserStateModel): boolean {\n    return state.isDisconnected;\n  }\n\n  @Selector()\n  static getIsConnecting(state: UserStateModel): boolean {\n    return state.isConnecting;\n  }\n\n  @Selector()\n  static getIsDisconnecting(state: UserStateModel): boolean {\n    return state.isDisconnected;\n  }\n\n  @Selector()\n  static getConnectionFailed(state: UserStateModel): boolean {\n    return state.connectionFailed;\n  }\n\n  @Selector()\n  static getCodeConnectionError(state: UserStateModel): number {\n    return state.codeConnectionError;\n  }\n\n  @Selector()\n  static getConnectionErrorMessage(state: UserStateModel): boolean {\n    return state.connectionFailed;\n  }\n\n  @Selector()\n  static getDisconnectionFailed(state: UserStateModel): boolean {\n    return state.disconnectionFailed;\n  }\n\n  @Selector()\n  static getCodeDisconnectionError(state: UserStateModel): number {\n    return state.codeDisconnectionError;\n  }\n\n  @Selector()\n  static getDisonnectionErrorMessage(state: UserStateModel): string {\n    return state.disconnectionErrorMessage;\n  }\n\n  @Action(User.SetCurrentUserConfig)\n  setCurrentUserConfig(\n    ctx: StateContext<UserStateModel>,\n    action: User.SetCurrentUserConfig\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      id: action.payload.id,\n      userName: action.payload.userName,\n      displayName: action.payload.displayName,\n      photo: action.payload.photo,\n      canAssignOrMove: action.payload.canAssignOrMove,\n    });\n  }\n\n  @Action(User.UpdateCurrentUserConfig)\n  updateCurrentUserConfig(\n    ctx: StateContext<UserStateModel>,\n    action: User.UpdateCurrentUserConfig\n  ) {\n    ctx.setState({\n      ...ctx.getState(),\n      displayName: action.payload.userInfo.displayName,\n      photo: action.payload.userInfo.photo,\n    });\n  }\n\n  @Action(User.Connect)\n  connect(ctx: StateContext<UserStateModel>, action: User.Connect): void {\n    ctx.setState({\n      ...ctx.getState(),\n      displayName: action.payload.userInfo.displayName,\n      isConnecting: true,\n      connectionFailed: false,\n      codeConnectionError: null,\n      connectionErrorMessage: null,\n    });\n  }\n\n  @Action(User.ConnectError)\n  connectError(\n    ctx: StateContext<UserStateModel>,\n    action: User.ConnectError\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      displayName: null,\n      isConnecting: false,\n      connectionFailed: true,\n      codeConnectionError: action.payload.code,\n      connectionErrorMessage: action.payload.message,\n    });\n  }\n\n  @Action(User.ConnectSuccess)\n  connectSuccess(ctx: StateContext<UserStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isConnecting: false,\n      isConnected: true,\n      isDisconnected: false,\n    });\n  }\n\n  @Action(User.Disconnect)\n  disconnect(ctx: StateContext<UserStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isDisconnecting: true,\n      disconnectionFailed: false,\n      codeDisconnectionError: null,\n      disconnectionErrorMessage: null,\n    });\n  }\n\n  @Action(User.DisconnectError)\n  disconnectError(\n    ctx: StateContext<UserStateModel>,\n    action: User.ConnectError\n  ): void {\n    ctx.setState({\n      ...ctx.getState(),\n      isDisconnecting: false,\n      disconnectionFailed: true,\n      codeDisconnectionError: action.payload.code,\n      disconnectionErrorMessage: action.payload.message,\n    });\n  }\n\n  @Action(User.DisconnectSuccess)\n  disconnectSuccess(ctx: StateContext<UserStateModel>): void {\n    ctx.setState({\n      ...ctx.getState(),\n      displayName: null,\n      photo: null,\n      isDisconnecting: false,\n      isDisconnected: true,\n      isConnected: false,\n    });\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  animate,\n  query,\n  stagger,\n  style,\n  transition,\n} from '@angular/animations';\n\nexport function fadeTree(selector: ':enter', duration = '300ms ease-in') {\n  return [\n    transition('* => *', [\n      query(\n        selector,\n        [style({ opacity: 0 }), animate(duration, style({ opacity: 1 }))],\n        { optional: true }\n      ),\n    ]),\n  ];\n}\n\nexport function fadeIn(selector: ':enter', duration = '200ms ease-in') {\n  return [\n    transition('* => *', [\n      query(\n        selector,\n        [\n          style({ opacity: 0, transform: 'translateY(-2px)' }),\n          stagger('20ms', [\n            animate(\n              duration,\n              style({\n                opacity: 1,\n                transform: 'translateY(0px)',\n              })\n            ),\n          ]),\n        ],\n        { optional: true }\n      ),\n    ]),\n  ];\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\n// animations\nexport * from './animations/fade-animations';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './directives/color-search-letters.directive';\nexport * from './directives/disable-control.directive';\nexport * from './directives/flex-grow-fit-content.directive';\nexport * from './directives/infinite-scroll.directive';\nexport * from './directives/omit-chars.directive';\nexport * from './directives/unfocusable.directive';\nexport * from './helpers/augment-global-types.helper';\nexport * from './helpers/configs.helper';\nexport * from './helpers/custom-rxjs-operators.helper';\nexport * from './helpers/custom-validators';\nexport * from './helpers/data-detail.helper';\nexport * from './helpers/data-list.helper';\nexport * from './helpers/data-table.helper';\nexport * from './helpers/data-tree.helper';\nexport * from './helpers/ellipsis-menu.helper';\nexport * from './helpers/form.helper';\nexport * from './helpers/generic-array.helper';\nexport * from './helpers/jstable.helper';\nexport * from './helpers/resources.helper';\nexport * from './helpers/search.helper';\nexport * from './helpers/ui.helper';\nexport * from './interfaces/configs.interface';\nexport * from './interfaces/data.interface';\nexport * from './interfaces/form.interface';\nexport * from './interfaces/resources-types.interface';\nexport * from './interfaces/routing.interface';\nexport * from './interfaces/ui.interface';\nexport * from './pipes/type-casting';\nexport * from './services/configs.service';\nexport * from './services/data.service';\nexport * from './services/env.service';\nexport * from './services/env.service.provider';\nexport * from './services/errors-handler.service';\nexport * from './services/form.service';\nexport * from './services/interactions.service';\nexport * from './services/resources-types.service';\nexport * from './shared.module';\nexport * as Configs from './states/configs/configs.actions';\nexport * from './states/configs/configs.state';\nexport * as Data from './states/data/data.actions';\nexport * from './states/data/data.state';\nexport * as Error from './states/error/error.actions';\nexport * from './states/error/error.state';\nexport * as ExternalLinks from './states/external-links/external-links.actions';\nexport * from './states/external-links/external-links.state';\nexport * as Header from './states/header/header.actions';\nexport * from './states/header/header.state';\nexport * as Home from './states/home/home.actions';\nexport * from './states/home/home.state';\nexport * as LogoutDialog from './states/logout-dialog/logout-dialog.actions';\nexport * from './states/logout-dialog/logout-dialog.state';\nexport * as ResourcesTypes from './states/resources-types/resources-types.actions';\nexport * from './states/resources-types/resources-types.state';\nexport * as Routing from './states/routing/routing.actions';\nexport * from './states/routing/routing.state';\nexport * as Ui from './states/ui/ui.actions';\nexport * from './states/ui/ui.state';\nexport * as User from './states/user/user.actions';\nexport * from './states/user/user.state';\nexport * from './utils';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './public-api';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport const LANGUAGES: InjectionToken<string[]> = new InjectionToken<string[]>(\n  'available languages'\n);\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport abstract class AuthService {\n  run(): void {}\n  logout(): void {}\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Location } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n  NavigationCancel,\n  NavigationEnd,\n  NavigationStart,\n  Router,\n  RoutesRecognized,\n} from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, ReplaySubject, filter, tap, withLatestFrom } from 'rxjs';\nimport {\n  Data,\n  DataState,\n  ErrorState,\n  IEntryIds,\n  IErrorDetail,\n  IRouteDetail,\n  Routing,\n  RoutingState,\n} from '../../../../shared';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RoutingService {\n  @Select(DataState.getSelectedEntryIds)\n  selectedEntryIds$: Observable<IEntryIds>;\n\n  @Select(DataState.getSelectedEntryParentIds)\n  selectedEntryParentIds$: Observable<IEntryIds>;\n\n  @Select(RoutingState.getRoutingHistory) currentRouting$: Observable<\n    IRouteDetail[]\n  >;\n\n  @Select(ErrorState.getIsHandlingError) isHandlingError$: Observable<boolean>;\n\n  @Select(ErrorState.getErrorDetail) errorDetail$: Observable<IErrorDetail>;\n\n  private _isRestoringState = false;\n\n  private _isRedirectAllowed = false;\n\n  private _initializeRouting = true;\n\n  private _lastValidStoreState: any;\n\n  private _routerNavigationEnd = new ReplaySubject<NavigationEnd>(1);\n\n  public routerNavigationEnd$ = this._routerNavigationEnd.asObservable();\n\n  constructor(\n    private _router: Router,\n    private _store$: Store,\n    private _location: Location\n  ) {}\n\n  run(): void {\n    this._router.events\n      .pipe(\n        filter((event) => {\n          if (\n            event instanceof NavigationStart ||\n            (event instanceof RoutesRecognized && this._initializeRouting)\n          ) {\n            if (event instanceof NavigationStart) {\n              const isRestoringAPreviousState: boolean =\n                !!event.restoredState &&\n                event.restoredState.navigationId < event.id &&\n                event.navigationTrigger === 'popstate';\n              const isNavigatingToANewPage: boolean =\n                event.restoredState === null &&\n                event.navigationTrigger === 'imperative';\n              const isNavigatingViaUrlBar: boolean =\n                event.restoredState === null &&\n                event.navigationTrigger === 'popstate';\n              this._isRedirectAllowed =\n                isRestoringAPreviousState ||\n                isNavigatingToANewPage ||\n                isNavigatingViaUrlBar;\n            } else {\n              this._isRedirectAllowed = true;\n            }\n            this._initializeRouting = false;\n            this._store$.dispatch(\n              new Routing.SetIsRedirectAllowed(this._isRedirectAllowed)\n            );\n          }\n          return (\n            this._isRedirectAllowed ||\n            (event instanceof NavigationEnd && this._isRedirectAllowed) ||\n            event instanceof NavigationCancel\n          );\n        }),\n        withLatestFrom(\n          this.selectedEntryIds$,\n          this.selectedEntryParentIds$,\n          this.currentRouting$,\n          this.isHandlingError$,\n          this.errorDetail$\n        ),\n        tap(\n          ([\n            event,\n            elementIds,\n            elementParentIds,\n            currentRouting,\n            isHandlingError,\n            errorDetail,\n          ]) => {\n            if (event instanceof NavigationStart) {\n              if (event.restoredState !== null) {\n                this._store$.dispatch([\n                  new Data.ResetSelectedEntryIds(),\n                  new Data.ResetSelectedEntryParentIds(),\n                ]);\n                const newRouteIndex: number = currentRouting.findIndex(\n                  (value: IRouteDetail) =>\n                    value.navigationIds.includes(\n                      event.restoredState.navigationId\n                    )\n                );\n                if (!!newRouteIndex && newRouteIndex > -1) {\n                  this._isRestoringState = true;\n                  this._store$.dispatch(\n                    new Routing.RestoreRoute({\n                      newNavigationId: event.id,\n                      newRouteIndex,\n                    })\n                  );\n                  this._location.replaceState(\n                    currentRouting[newRouteIndex].url,\n                    '',\n                    this._location.getState()\n                  );\n                }\n              } else if (\n                event.restoredState === null &&\n                event.navigationTrigger === 'popstate'\n              ) {\n                this._store$.dispatch([\n                  new Data.ResetSelectedEntryIds(),\n                  new Data.ResetSelectedEntryParentIds(),\n                ]);\n              }\n            } else if (event instanceof NavigationEnd) {\n              if (Object.keys(localStorage).includes('redirectUrl')) {\n                localStorage.removeItem('redirectUrl');\n              }\n              const currentRoute: string = event.url;\n              if (!this._isRestoringState) {\n                const is404Error: boolean =\n                  !!errorDetail &&\n                  errorDetail.handledError instanceof HttpErrorResponse &&\n                  errorDetail.handledError.status === 404;\n                if (\n                  currentRoute.includes('not-found') &&\n                  isHandlingError &&\n                  is404Error\n                ) {\n                  this._store$.dispatch(new Routing.RemoveLastRoute());\n                }\n                this._store$.dispatch(\n                  new Routing.AddCurrentRoute({\n                    route: {\n                      url: currentRoute,\n                      navigationIds: [event.id],\n                      extras: { ids: elementIds, parentIds: elementParentIds },\n                    },\n                  })\n                );\n              } else {\n                const restoredRouteIndex: number = this._store$.selectSnapshot(\n                  RoutingState.geCurrentRouteIndex\n                );\n                const restoredRouteUrl: string =\n                  currentRouting[restoredRouteIndex].url;\n                this._location.replaceState(\n                  restoredRouteUrl,\n                  '',\n                  this._location.getState()\n                );\n                this._isRestoringState = false;\n              }\n              this._routerNavigationEnd.next(event);\n              if (\n                currentRoute === '/home' ||\n                currentRoute === '/home/not-found'\n              ) {\n                this._store$.dispatch([\n                  new Data.ResetSelectedResourceTypeId(),\n                  new Data.ResetSelectedEntryIds(),\n                  new Data.ResetSelectedEntryParentIds(),\n                  new Data.ResetRootIdSelectedResourceType(),\n                ]);\n              }\n              this._lastValidStoreState = this._store$.snapshot();\n            } else if (\n              event instanceof NavigationCancel &&\n              this._lastValidStoreState != null\n            ) {\n              this._store$.reset(this._lastValidStoreState);\n            }\n          }\n        )\n      )\n      .subscribe();\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  BreakpointObserver,\n  Breakpoints,\n  BreakpointState,\n} from '@angular/cdk/layout';\nimport { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Select, Store } from '@ngxs/store';\nimport { filter, Observable, Subject, takeUntil, tap } from 'rxjs';\nimport { ScreenSize, Ui, UiState } from '../../shared';\nimport { LANGUAGES } from './core/injection-tokens';\nimport { AuthService } from './shared/auth/auth.service.interface';\nimport { RoutingService } from './shared/services/routing.service';\n\n@Component({\n  selector: 'dm-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.scss'],\n})\nexport class AppComponent implements OnInit, OnDestroy {\n  @Select(UiState.getLanguage) language$: Observable<string>;\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _screenSizeMap = new Map([\n    [Breakpoints.XSmall, 'xs'],\n    [Breakpoints.Small, 'sm'],\n    [Breakpoints.Medium, 'md'],\n    [Breakpoints.Large, 'lg'],\n    [Breakpoints.XLarge, 'xl'],\n  ]);\n\n  constructor(\n    private _translate: TranslateService,\n    @Inject(LANGUAGES) public languages,\n    private _store$: Store,\n    private _breakpointObserver: BreakpointObserver,\n    private _authService: AuthService,\n    private _routingService: RoutingService\n  ) {}\n\n  ngOnInit(): void {\n    this._authService.run();\n    this._routingService.run();\n\n    this._breakpointObserver\n      .observe([\n        Breakpoints.XSmall,\n        Breakpoints.Small,\n        Breakpoints.Medium,\n        Breakpoints.Large,\n        Breakpoints.XLarge,\n      ])\n      .subscribe((breakpointChangeSize: BreakpointState) => {\n        let screenSize: string;\n        for (const query of Object.keys(breakpointChangeSize.breakpoints)) {\n          if (breakpointChangeSize.breakpoints[query]) {\n            screenSize = this._screenSizeMap.get(query) ?? 'Unknown';\n          }\n        }\n        this._store$.dispatch(\n          new Ui.ChangeScreenSize({\n            screenSize: screenSize as ScreenSize,\n          })\n        );\n      });\n\n    // default and fallback language\n    // if a translation isn't found in a language,\n    // it'll try to get it on the default language\n    // by default here, we take the first of the array\n    const browserLanguage: string = this._translate.getBrowserLang();\n    const languageToUse: string = browserLanguage || this.languages[0];\n\n    this._translate.setDefaultLang(languageToUse);\n    this._store$.dispatch(new Ui.SetLanguage({ language: languageToUse }));\n\n    // when the language changes in store,\n    // change it in translate provider\n    this.language$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        filter((language: string) => !!language),\n        tap((language: string) => this._translate.use(language))\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<router-outlet></router-outlet>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { CanActivate } from '@angular/router';\nimport { Actions, ofActionSuccessful, Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { first, map, Observable, ReplaySubject } from 'rxjs';\nimport {\n  Configs,\n  ConfigsState,\n  ErrorState,\n  IConfig,\n  IResourceType,\n  JsTable,\n  ResourcesTypes,\n  ResourcesTypesState,\n  Routing,\n} from '../../../../shared';\n\n/**\n * This guard class allows to control that user is trying to access\n * to an authorized route from the main page when he writes it in the url bar\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class HomepageGuard implements CanActivate {\n  private _allActionsSucces$ = new ReplaySubject<boolean>();\n  private _guard$: Observable<boolean> = this._allActionsSucces$.asObservable();\n  constructor(\n    private _store$: Store,\n    private _actions$: Actions,\n    private _toastrService: ToastrService\n  ) {}\n\n  canActivate(): Observable<boolean> {\n    const actions: any[] = [\n      ResourcesTypes.FetchResourcesTypesSuccess,\n      Configs.FetchConfigsSuccess,\n      ResourcesTypes.FetchResourcesTypesError,\n      Configs.FetchConfigsError,\n      Routing.SetAvailableRoutes,\n    ];\n\n    this._actions$\n      .pipe(\n        ofActionSuccessful(...actions),\n        map((action) => {\n          if (action instanceof Routing.SetAvailableRoutes) {\n            this._allActionsSucces$.next(true);\n          } else {\n            if (action instanceof ResourcesTypes.FetchResourcesTypesSuccess) {\n              this._store$.dispatch(new Configs.FetchConfigs());\n            } else if (action instanceof Configs.FetchConfigsSuccess) {\n              const resourcesTypesJsTable: JsTable<IResourceType> =\n                this._store$.selectSnapshot(\n                  ResourcesTypesState.getResourcesTypesJsTable\n                );\n\n              const configsJsTable: JsTable<IConfig> =\n                this._store$.selectSnapshot(ConfigsState.getConfigsJsTable);\n\n              this._store$.dispatch(\n                new Routing.SetAvailableRoutes({\n                  resourcesTypes: resourcesTypesJsTable,\n                  configs: configsJsTable,\n                })\n              );\n            } else if (\n              action instanceof ResourcesTypes.FetchResourcesTypesError ||\n              action instanceof Configs.FetchConfigsError\n            ) {\n              const unavailableHomepage = this._store$.selectSnapshot(\n                ErrorState.getUnavailableHomepageMsg\n              );\n              this._toastrService.error(unavailableHomepage, null, {\n                positionClass: 'toast-bottom-right',\n              });\n              this._allActionsSucces$.next(false);\n            }\n          }\n        })\n      )\n      .subscribe();\n\n    this._store$.dispatch(new ResourcesTypes.FetchResourcesTypes());\n\n    return this._guard$.pipe(first());\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  EComponentName,\n  EResourceComponent,\n  IAdvancedSearchChip,\n  IAttribute,\n  IConfig,\n  IData,\n  IFormData,\n  IPersistentUiData,\n  IResourceType,\n  IResourceTypeProperties,\n  IScimProperties,\n  JsTable,\n} from '../../../../shared';\nimport { IResourcesTypesProperties } from '../interfaces/resources-types.interface';\n\nexport function getResourcesTypesProperties(\n  selectedResourceTypeId: string,\n  resourcesTypes: JsTable<IResourceType>,\n  configs: JsTable<IConfig>\n): IResourcesTypesProperties {\n  const resourceTypeConfig: IConfig = configs.byId[selectedResourceTypeId];\n  let childId: string;\n  let resourceTypeProperties: IResourceTypeProperties;\n  resourceTypeProperties = {\n    ...resourcesTypes.byId[selectedResourceTypeId],\n    createForm: getCreateForm(resourceTypeConfig),\n    actions: resourceTypeConfig.actions,\n    canCreate: resourceTypeConfig.canCreate,\n  };\n\n  if (resourceTypeConfig.component === EResourceComponent.TREE) {\n    resourceTypeProperties = {\n      ...resourceTypeProperties,\n      nodeNameModelRef: resourceTypeConfig.attributes.find(\n        (attribute: IAttribute) => attribute.props.isTreeNodeName\n      )?.modelRef,\n    };\n  }\n\n  childId = configs.allIds.find(\n    (resourceTypeId: string) =>\n      configs.byId[resourceTypeId].props &&\n      configs.byId[resourceTypeId].props.parent &&\n      configs.byId[resourceTypeId].props.parent === selectedResourceTypeId\n  );\n\n  const resourcesTypesProperties: IResourcesTypesProperties = {\n    [selectedResourceTypeId]: { ...resourceTypeProperties },\n  };\n\n  if (!!childId) {\n    return {\n      ...resourcesTypesProperties,\n      ...getResourcesTypesProperties(childId, resourcesTypes, configs),\n    };\n  } else {\n    return resourcesTypesProperties;\n  }\n}\n\nexport function getCreateForm(config: IConfig): IFormData[] {\n  return config.attributes\n    .filter((field: IAttribute) => field.props.isInCreateForm !== false)\n    .map((field: IAttribute) => {\n      return {\n        ...field,\n        // by default slide-toggle value has to be false and not null\n        dataValue:\n          field.value.field.componentName === EComponentName.slideToggle\n            ? false\n            : field.value.field.componentName === EComponentName.array\n              ? []\n              : null,\n      };\n    });\n}\n\nexport function toScimProperties(schema: string): IScimProperties {\n  return {\n    schemas: [schema],\n  };\n}\n\nexport function dataByResourceType(\n  allResourcesTypesIds: string[],\n  allData: IData[]\n): { [resourceTypeId: string]: IData } {\n  return allResourcesTypesIds.reduce(\n    (acc, resourceTypeId) => {\n      const associatedData: IData = allData.find(\n        (data: IData) =>\n          !!data.Resources &&\n          data.Resources.length > 0 &&\n          data.Resources[0].schemas.some((schema: string) =>\n            schema\n              .toLocaleUpperCase()\n              .includes(resourceTypeId.toLocaleUpperCase())\n          )\n      );\n\n      return {\n        ...acc,\n        [resourceTypeId]: !!associatedData ? associatedData : getEmptyIData(),\n      };\n    },\n    {} as { [resourceTypeId: string]: IData }\n  );\n}\n\nfunction getEmptyIData(): IData {\n  return {\n    schemas: ['urn:ietf:params:scim:api:messages:2.0:ListResponse'],\n    startIndex: 0,\n    totalResults: 0,\n    itemsPerPage: 0,\n    Resources: [],\n  };\n}\n\nexport function getEmptyScimObject(): IData {\n  return {\n    schemas: [],\n    totalResults: 0,\n    itemsPerPage: 0,\n    startIndex: 0,\n    Resources: [],\n  };\n}\n\nexport function isFilteringData(\n  dataJsTable: JsTable<IPersistentUiData>,\n  resourceTypeId: string\n): boolean {\n  const searchFormValue: string = dataJsTable.byId[resourceTypeId]?.searchForm;\n  const advancedSearchChips: IAdvancedSearchChip[] =\n    dataJsTable.byId[resourceTypeId]?.advancedSearchChips;\n  return (\n    !!searchFormValue ||\n    (!!advancedSearchChips && advancedSearchChips.length > 0)\n  );\n}\n\nexport function getFullUrl(endpoint: string, suffix: string): string {\n  let link = '/home/';\n  return link.concat(endpoint, '/', suffix);\n}\n\nexport function getRootResourceTypeId(\n  selectedResourceTypeId: string,\n  configs: JsTable<IConfig>\n): string {\n  const parentResourceTypeId: string =\n    configs.byId[selectedResourceTypeId].props?.parent;\n  return !!parentResourceTypeId\n    ? getRootResourceTypeId(parentResourceTypeId, configs)\n    : selectedResourceTypeId;\n}\n\nexport function hasResourceTypeChildren(\n  configs: JsTable<IConfig>,\n  selectedRootResourceTypeId: string\n): boolean {\n  return configs.allIds.some(\n    (resourceTypeId: string) =>\n      configs.byId[resourceTypeId].props?.parent === selectedRootResourceTypeId\n  );\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  CanActivate,\n  CanDeactivate,\n  Router,\n  RouterStateSnapshot,\n  UrlTree,\n} from '@angular/router';\nimport { Actions, Select, Store, ofActionSuccessful } from '@ngxs/store';\nimport {\n  Observable,\n  ReplaySubject,\n  first,\n  map,\n  of,\n  take,\n  tap,\n  withLatestFrom,\n} from 'rxjs';\nimport {\n  ConfigsState,\n  Data,\n  DataState,\n  EResourceComponent,\n  ErrorState,\n  IConfig,\n  IErrorDetail,\n  IResourceTypeRoutesRegExp,\n  IRouteDetail,\n  JsTable,\n  RoutingState,\n} from '../../../../../../shared';\nimport { getRootResourceTypeId } from '../../../../shared/helpers/resources.helper';\n\n/**\n * This guard class allows to control that user is trying to access\n * to an authorized route from the main page when he writes it in the url bar\n */\n@Injectable()\nexport class DataDetailGuard implements CanActivate, CanDeactivate<unknown> {\n  @Select(RoutingState.getIsRedirectAllowed)\n  isRedirectAllowed$: Observable<boolean>;\n\n  @Select(ErrorState.getErrorDetail) errorDetail$: Observable<IErrorDetail>;\n\n  @Select(RoutingState.getRoutingHistory) routingHistory$: Observable<\n    IRouteDetail[]\n  >;\n\n  private _allActionsSuccess$ = new ReplaySubject<boolean>();\n  private _guard$: Observable<boolean> =\n    this._allActionsSuccess$.asObservable();\n\n  constructor(\n    protected store$: Store,\n    protected actions$: Actions,\n    protected router: Router\n  ) {}\n\n  canActivate(\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Observable<boolean | UrlTree> {\n    if (this._isUrlLastPart(route)) {\n      return this.fetchDataDetail(\n        state,\n        new Data.FetchDataDetail(),\n        [Data.FetchDataDetailSuccess, Data.FetchDataDetailError],\n        Data.FetchDataDetailSuccess\n      );\n    } else {\n      return of(true);\n    }\n  }\n\n  canDeactivate(\n    _component: unknown,\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot,\n    nextState: RouterStateSnapshot\n  ): Observable<boolean | UrlTree> {\n    if (nextState.url === '/home') {\n      return of(true);\n    }\n\n    const selectedResourceTypeId: string = this.store$.selectSnapshot(\n      DataState.getSelectedResourceTypeId\n    );\n\n    const routesRegexp: JsTable<IResourceTypeRoutesRegExp> =\n      this.store$.selectSnapshot(RoutingState.getAvailableRoutes);\n\n    const nextResourceTypeId: string = routesRegexp.allIds.find(\n      (id: string) =>\n        routesRegexp.byId[id].resourcePathRegExp?.test(nextState.url) ||\n        routesRegexp.byId[id].detailPathRegExp.test(nextState.url)\n    );\n\n    if (!!nextResourceTypeId && selectedResourceTypeId !== nextResourceTypeId) {\n      this.store$.dispatch(\n        new Data.SetSelectedResourceTypeId({\n          id: nextResourceTypeId,\n        })\n      );\n    }\n\n    let watchedActions: any[];\n    let successfulAction: any;\n    let action: any;\n    const configs: JsTable<IConfig> = this.store$.selectSnapshot(\n      ConfigsState.getConfigsJsTable\n    );\n    const selectedRootResourceTypeId: string =\n      this.store$.selectSnapshot(DataState.getRootIdSelectedResourceType) ??\n      getRootResourceTypeId(nextResourceTypeId, configs);\n    const parentDetailPath = new RegExp(`^${nextState.url}/.*`);\n    const isMatchingResourcePath: boolean = routesRegexp.byId[\n      selectedRootResourceTypeId\n    ].resourcePathRegExp.test(nextState.url);\n    if (isMatchingResourcePath) {\n      if (\n        configs.byId[selectedRootResourceTypeId].component ===\n        EResourceComponent.ARRAY\n      ) {\n        watchedActions = [Data.FetchResources];\n        successfulAction = Data.FetchResources;\n        action = new Data.FetchResources({\n          resourceTypeId: selectedResourceTypeId,\n          isRedirectingToDetail: false,\n        });\n      } else {\n        this.store$.dispatch([\n          new Data.ResetSelectedEntryParentIds(),\n          new Data.ResetSelectedEntryIds(),\n        ]);\n      }\n    } else if (\n      !isMatchingResourcePath &&\n      parentDetailPath.test(state.url) &&\n      this._isUrlLastPart(route)\n    ) {\n      watchedActions = [Data.FetchDataDetailSuccess, Data.FetchDataDetailError];\n      successfulAction = Data.FetchDataDetailSuccess;\n      action = new Data.FetchDataDetail();\n    }\n    return !!action\n      ? this.fetchDataDetail(\n          nextState,\n          action,\n          watchedActions,\n          successfulAction\n        )\n      : of(true);\n  }\n\n  private fetchDataDetail(\n    state: RouterStateSnapshot,\n    action: any,\n    watchedActions: any[],\n    successfulAction: any\n  ): Observable<boolean | UrlTree> {\n    this.actions$\n      .pipe(\n        ofActionSuccessful(...watchedActions),\n        take(1),\n        tap((executedAction) =>\n          this._allActionsSuccess$.next(\n            executedAction instanceof successfulAction\n          )\n        )\n      )\n      .subscribe();\n\n    this.store$.dispatch(action);\n\n    return this._guard$.pipe(\n      first(),\n      withLatestFrom(\n        this.isRedirectAllowed$,\n        this.errorDetail$,\n        this.routingHistory$\n      ),\n      map(([canRedirect, isRedirectAllowed, errorDetail, routingHistory]) => {\n        if (\n          !canRedirect &&\n          !!errorDetail &&\n          errorDetail.handledError instanceof HttpErrorResponse &&\n          errorDetail.handledError.status === 404\n        ) {\n          const notFoundRegex = new RegExp('[^/]*$');\n          const url: string = state.url.replace(notFoundRegex, 'not-found');\n          this.store$.dispatch([\n            new Data.ResetSelectedEntryIds(),\n            new Data.ResetSelectedEntryParentIds(),\n          ]);\n          return this.router.createUrlTree([url]);\n        } else if (!canRedirect && routingHistory.length === 0) {\n          return this.router.createUrlTree(['/home']);\n        } else {\n          return canRedirect && isRedirectAllowed;\n        }\n      })\n    );\n  }\n\n  private _isUrlLastPart(route: ActivatedRouteSnapshot): boolean {\n    // route.firstChild -> roles/:id\n    // route.firstChild.routeConfig.path -> :id\n    return (\n      route.firstChild === null || route.firstChild.routeConfig.path === ''\n    );\n  }\n\n  public resetGuardProperties(): void {\n    this._allActionsSuccess$ = new ReplaySubject<boolean>();\n    this._guard$ = this._allActionsSuccess$.asObservable();\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { Observable, first, map, of, switchMap } from 'rxjs';\nimport {\n  EnvService,\n  User,\n  UserState,\n  UserStateModel,\n} from '../../../../shared';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LoginGuard implements CanActivate {\n  @Select(UserState.getUser) user$: Observable<UserStateModel>;\n\n  public alreadyRedirectedToLoginPage: boolean;\n\n  constructor(\n    private _router: Router,\n    private _store$: Store,\n    private _oauthService: OAuthService,\n    private _env: EnvService\n  ) {\n    this.alreadyRedirectedToLoginPage = false;\n  }\n\n  canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n    if (this._env.auth.sso) {\n      this._store$.dispatch(\n        new User.Connect({\n          userInfo: { displayName: null, password: null },\n        })\n      );\n    }\n    return this.user$.pipe(\n      map((user: UserStateModel) => user.isConnected && !user.isDisconnecting),\n      first(),\n      switchMap((connectedUser: boolean) => {\n        if (connectedUser) {\n          return of(true);\n        } else {\n          // we fake the user who is logging and avoid to signin through another mechanism like oidc\n          if (this._env.auth.fake.fakeUser) {\n            console.log('Guard App: We fake the user');\n            this._store$.dispatch(\n              new User.Connect({\n                userInfo: this._env.auth.fake.fakeUserInfos,\n              })\n            );\n            if (route.routeConfig.path !== 'home') {\n              this._router.navigate(['/home']);\n            }\n            return of(true);\n          } else if (this._env.auth.sso) {\n            // we need a token, otherwise, we will ask for it through a login page\n            const hasIdToken = this._oauthService.hasValidIdToken();\n            const hasAccessToken = this._oauthService.hasValidAccessToken();\n            if (hasIdToken && hasAccessToken) {\n              this._store$.dispatch(new User.ConnectSuccess());\n            }\n            return of(hasIdToken && hasAccessToken);\n          } else if (this.alreadyRedirectedToLoginPage) {\n            this.alreadyRedirectedToLoginPage = false;\n            return of(true);\n          } else {\n            this.alreadyRedirectedToLoginPage = true;\n            this._router.navigate(['/signin']);\n            return of(false);\n          }\n        }\n      })\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  CanActivate,\n  Router,\n  RouterStateSnapshot,\n  UrlTree,\n} from '@angular/router';\nimport { Actions, Select, Store, ofActionSuccessful } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport {\n  Observable,\n  ReplaySubject,\n  first,\n  map,\n  of,\n  take,\n  tap,\n  withLatestFrom,\n} from 'rxjs';\nimport {\n  ConfigsState,\n  Data,\n  DataState,\n  EResourceComponent,\n  ErrorState,\n  IConfig,\n  IErrorDetail,\n  IResourceType,\n  IResourceTypeRoutesRegExp,\n  JsTable,\n  ResourcesTypesState,\n  RoutingState,\n} from '../../../../../shared';\n\n/**\n * This guard class allows to control that user is trying to access\n * to an authorized route from the main page when he writes it in the url bar\n */\n@Injectable()\nexport class ResourcePageGuard implements CanActivate {\n  @Select(RoutingState.getIsRedirectAllowed)\n  isRedirectAllowed$: Observable<boolean>;\n\n  @Select(ErrorState.getLastError) lastError$: Observable<IErrorDetail>;\n\n  private _allActionsSuccess$ = new ReplaySubject<boolean>();\n  private _guard$: Observable<boolean> =\n    this._allActionsSuccess$.asObservable();\n\n  constructor(\n    protected router: Router,\n    protected toastrService: ToastrService,\n    protected store$: Store,\n    protected actions$: Actions\n  ) {}\n\n  canActivate(\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Observable<boolean | UrlTree> {\n    let urlEndpoint: string =\n      route.paramMap.get('data') ||\n      route.routeConfig.path.replace(new RegExp('/[^/]*$'), '');\n\n    const resourcesTypes: JsTable<IResourceType> = this.store$.selectSnapshot(\n      ResourcesTypesState.getResourcesTypesJsTable\n    );\n    const resourceTypeId: string = resourcesTypes.allIds.find(\n      (resourceTypeId: string) =>\n        resourcesTypes.byId[resourceTypeId].endpoint === urlEndpoint\n    );\n\n    if (!!resourceTypeId) {\n      const currentRootResourceTypeId: string = this.store$.selectSnapshot(\n        DataState.getRootIdSelectedResourceType\n      );\n      const configs: JsTable<IConfig> = this.store$.selectSnapshot(\n        ConfigsState.getConfigsJsTable\n      );\n\n      this.setSelectedResourceTypeId(resourceTypeId, state.url);\n\n      if (\n        configs.byId[resourceTypeId].level === 0 &&\n        currentRootResourceTypeId !== resourceTypeId\n      ) {\n        const rootResourcesPath = new RegExp(`^/home/${urlEndpoint}$`);\n\n        const notFoundDetailPath = new RegExp(\n          `^/home/${urlEndpoint}/(.*/)*not-found$`\n        );\n        const isRedirectingToDetail =\n          !rootResourcesPath.test(state.url) &&\n          !notFoundDetailPath.test(state.url);\n        let action = new Data.FetchResources({\n          resourceTypeId,\n          isRedirectingToDetail,\n        });\n        let successfulActions: any[];\n\n        if (!isRedirectingToDetail) {\n          // TODO later we should set successfulActions with\n          // [Data.FetchResourcesSuccess,Data.FetchResourcesError] for better UX\n          successfulActions = [Data.FetchResources];\n        } else {\n          const resourceComponent: string =\n            configs.byId[resourceTypeId].component;\n          if (\n            resourceComponent === EResourceComponent.TREE ||\n            resourceComponent === EResourceComponent.LIST\n          ) {\n            successfulActions = [\n              Data.FetchResourcesSuccess,\n              Data.FetchResourcesError,\n            ];\n          } else {\n            return of(true);\n          }\n        }\n\n        this.actions$\n          .pipe(\n            ofActionSuccessful(...successfulActions),\n            take(1),\n            tap((action) =>\n              this._allActionsSuccess$.next(\n                action instanceof Data.FetchResourcesSuccess ||\n                  action instanceof Data.FetchResources ||\n                  action instanceof Data.SetSelectedResourceTypeId\n              )\n            )\n          )\n          .subscribe();\n\n        this.store$.dispatch(action);\n      } else {\n        return of(true);\n      }\n    } else {\n      const errorRouteMsg = this.store$.selectSnapshot(\n        ErrorState.getErrorRouteMsg\n      );\n      this.toastrService.error(errorRouteMsg, null, {\n        positionClass: 'toast-bottom-right',\n      });\n      this._allActionsSuccess$.next(false);\n    }\n\n    return this._guard$.pipe(\n      first(),\n      withLatestFrom(this.isRedirectAllowed$, this.lastError$),\n      map(([canRedirect, isRedirectAllowed, lastError]) => {\n        if (\n          !canRedirect &&\n          (lastError === null ||\n            (lastError?.handledError instanceof HttpErrorResponse &&\n              lastError?.handledError.status === 404))\n        ) {\n          const notFoundRegex = new RegExp('(?<=/home/).*$');\n          const url: string = state.url.replace(notFoundRegex, 'not-found');\n          return this.router.createUrlTree([url]);\n        } else {\n          return canRedirect && isRedirectAllowed;\n        }\n      })\n    );\n  }\n\n  protected setSelectedResourceTypeId(\n    nextResourceTypeId: string,\n    url: string\n  ): void {\n    const routesRegexp: JsTable<IResourceTypeRoutesRegExp> =\n      this.store$.selectSnapshot(RoutingState.getAvailableRoutes);\n\n    const resourceTypeIdMatchingRegexp = routesRegexp.allIds.find(\n      (id: string) =>\n        routesRegexp.byId[id].resourcePathRegExp?.test(url) ||\n        routesRegexp.byId[id].detailPathRegExp.test(url)\n    );\n\n    const currentResourceTypeId: string = this.store$.selectSnapshot(\n      DataState.getSelectedResourceTypeId\n    );\n\n    if (\n      !!resourceTypeIdMatchingRegexp &&\n      resourceTypeIdMatchingRegexp === nextResourceTypeId &&\n      currentResourceTypeId !== nextResourceTypeId\n    ) {\n      this.store$.dispatch(\n        new Data.SetSelectedResourceTypeId({\n          id: nextResourceTypeId,\n        })\n      );\n    }\n  }\n\n  public resetGuardProperties(): void {\n    this._allActionsSuccess$ = new ReplaySubject<boolean>();\n    this._guard$ = this._allActionsSuccess$.asObservable();\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  CanActivate,\n  CanDeactivate,\n  Router,\n  RouterStateSnapshot,\n  UrlTree,\n} from '@angular/router';\nimport { Actions, Store } from '@ngxs/store';\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable, first, of, switchMap } from 'rxjs';\nimport { EnvService } from '../../shared';\nimport { HomepageGuard } from './features/homepage/homepage.guard';\nimport { DataDetailGuard } from './features/homepage/resource-page/data-detail/data-detail.guard';\nimport { ResourcePageGuard } from './features/homepage/resource-page/resource-page.guard';\nimport { LoginGuard } from './features/login/login.guard';\n\nexport const GUARDS = {\n  LoginGuard: 'LoginGuard',\n  HomepageGuard: 'HomepageGuard',\n  ResourcePageGuard: 'ResourcePageGuard',\n  DataDetailGuard: 'DataDetailGuard',\n};\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AppGuard implements CanActivate, CanDeactivate<unknown> {\n  // you may need to include dependencies of individual guards if specified in guard constructor\n  constructor(\n    private _store$: Store,\n    private _actions$: Actions,\n    private _toastrService: ToastrService,\n    private _router: Router,\n    private _oauthService: OAuthService,\n    private _env: EnvService,\n    private _resourcePageGuard: ResourcePageGuard,\n    private _dataDetailGuard: DataDetailGuard\n  ) {}\n\n  private _route: ActivatedRouteSnapshot;\n  private _state: RouterStateSnapshot;\n  private _nextState: RouterStateSnapshot;\n  private _component: unknown;\n\n  // This method gets triggered when the route is hit\n  public canActivate(\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot\n  ): Observable<boolean | UrlTree> {\n    this._route = route;\n    this._state = state;\n\n    if (!route.data) {\n      of(true);\n      return;\n    }\n\n    // this.route.data.guards is an array of strings set in routing configuration\n\n    if (\n      !this._route.data.canActivateGuards ||\n      !this._route.data.canActivateGuards.length\n    ) {\n      of(true);\n      return;\n    }\n    return this.executeGuards('canActivateGuards');\n  }\n\n  public canDeactivate(\n    component: unknown,\n    route: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot,\n    nextState: RouterStateSnapshot\n  ): Observable<boolean | UrlTree> {\n    this._route = route;\n    this._state = state;\n    this._component = component;\n    this._nextState = nextState;\n\n    if (!route.data) {\n      of(true);\n      return;\n    }\n\n    // this.route.data.guards is an array of strings set in routing configuration\n\n    if (\n      !this._route.data.canDeactivateGuards ||\n      !this._route.data.canDeactivateGuards.length\n    ) {\n      of(true);\n      return;\n    }\n    return this.executeGuards('canDeactivateGuards');\n  }\n\n  // Execute the guards sent in the route data\n  private executeGuards(\n    guardType: string,\n    guardIndex = 0\n  ): Observable<boolean | UrlTree> {\n    return this.activateGuard(\n      guardType,\n      this._route.data[guardType][guardIndex]\n    ).pipe(\n      first(),\n      switchMap((guardResponse) => {\n        if (\n          guardResponse &&\n          guardIndex < this._route.data[guardType].length - 1\n        ) {\n          return this.executeGuards(guardType, guardIndex + 1);\n        } else {\n          return of(guardResponse);\n        }\n      })\n    );\n  }\n\n  // Create an instance of the guard and fire canActivate method returning a promise\n  private activateGuard(\n    guardType: string,\n    guardKey: string\n  ): Observable<boolean | UrlTree> {\n    let guard: LoginGuard | HomepageGuard | ResourcePageGuard | DataDetailGuard;\n\n    switch (guardKey) {\n      case GUARDS.LoginGuard:\n        guard = new LoginGuard(\n          this._router,\n          this._store$,\n          this._oauthService,\n          this._env\n        );\n        break;\n      case GUARDS.HomepageGuard:\n        guard = new HomepageGuard(\n          this._store$,\n          this._actions$,\n          this._toastrService\n        );\n        break;\n      case GUARDS.ResourcePageGuard:\n        this._resourcePageGuard.resetGuardProperties();\n        guard = this._resourcePageGuard;\n        break;\n      case GUARDS.DataDetailGuard:\n        this._dataDetailGuard.resetGuardProperties();\n        guard = this._dataDetailGuard;\n        break;\n      default:\n        break;\n    }\n    if (guardType === 'canActivateGuards') {\n      return guard.canActivate(this._route, this._state);\n    } else if (\n      guardType === 'canDeactivateGuards' &&\n      guard instanceof DataDetailGuard\n    ) {\n      return guard.canDeactivate(\n        this._component,\n        this._route,\n        this._state,\n        this._nextState\n      );\n    }\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Location } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\nimport { EnvService } from '../../../../shared';\nimport { AuthService } from './auth.service.interface';\n\n/**\n * Allows to manage the whole OpenId Connect process.\n * The used flow is declared in the environment.auth.oidc variable.\n * It is currently the default auth service activated when setting environment.sso\n * to true.\n */\n@Injectable()\nexport class AuthOidcService extends AuthService {\n  constructor(\n    private _oauthService: OAuthService,\n    private _router: Router,\n    private _env: EnvService,\n    private _location: Location\n  ) {\n    super();\n  }\n\n  run() {\n    super.run();\n\n    const authConfig: AuthConfig = this._env.auth.oidc;\n\n    // we load the configuration file.\n    // that will allows to open discovery url and load it automatically from\n    // REST api of auth manager\n    this._oauthService.configure(authConfig);\n\n    if (\n      this._oauthService.hasValidIdToken() &&\n      this._oauthService.hasValidAccessToken()\n    ) {\n      this._router.navigate([this._location.path()]);\n    } else {\n      if (!Object.keys(localStorage).includes('redirectUrl')) {\n        localStorage.setItem('redirectUrl', this._location.path());\n      }\n      this._oauthService\n        .loadDiscoveryDocumentAndLogin()\n        .then((connected: boolean) => {\n          if (connected) {\n            // redirection to home once token retrieved\n            this._router.navigate([localStorage.getItem('redirectUrl')]);\n          }\n        });\n    }\n  }\n\n  logout() {\n    this._oauthService.logOut(!this._env.auth.oidc.executeOidcLogoutProcess);\n    if (!this._env.auth.oidc.executeOidcLogoutProcess) {\n      location.href = this._env.auth.oidc.logoutUrl;\n    }\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\n// TODO oidc to be imported only if needed by providing it to an auth sub module\n// useful?\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';\nimport { EnvServiceProvider } from '../../../../shared';\nimport { AuthOidcService } from './auth-oidc.service';\nimport { AuthService } from './auth.service.interface';\n\n// We need a factory, since localStorage is not available during AOT build time.\nexport function storageFactory(): OAuthStorage {\n  return localStorage;\n}\n\n@NgModule({\n  imports: [\n    HttpClientModule,\n    OAuthModule.forRoot(\n      EnvServiceProvider.useFactory().auth.sso\n        ? {\n            resourceServer: {\n              // allows to send frontend token to backend token\n              allowedUrls: [EnvServiceProvider.useFactory().urlBackend],\n              sendAccessToken: true,\n            },\n          }\n        : null\n    ),\n  ],\n  exports: [],\n  providers: [\n    {\n      provide: AuthService,\n      useClass: EnvServiceProvider.useFactory().auth.sso\n        ? AuthOidcService\n        : null,\n    },\n    { provide: OAuthStorage, useFactory: storageFactory },\n  ],\n})\nexport class AuthModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\n\nexport function createTranslateLoader(http: HttpClient): TranslateHttpLoader {\n  if (http) {\n    return new TranslateHttpLoader(http, 'assets/i18n/', '.json');\n  } else {\n    throw new Error('http parameter is undefined or null');\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IData, IDataItem } from '../../../../shared';\n\nexport class DataListViewProperties {\n  private dataSource: IDataItem[];\n\n  constructor(object?: DataListViewProperties) {\n    this.dataSource = object && object.dataSource ? object.dataSource : [];\n  }\n\n  getDataSource(): IDataItem[] {\n    return this.dataSource;\n  }\n\n  setDataSource(dataSource: IDataItem[]): void {\n    this.dataSource = dataSource;\n  }\n}\n\nexport function buildList(values: IData): IDataItem[] {\n  return sortDataItemByName(\n    values.Resources.map((data: any) => {\n      return {\n        ids: { id: data.id, externalId: data.externalId },\n        name: data.externalId,\n        link: encodeURIComponent(data.externalId.toLowerCase()),\n        canDelete: data.meta.isDeletable,\n      };\n    })\n  );\n}\n\nexport function buildItemList(data: any): IDataItem {\n  return {\n    ids: { id: data.id, externalId: data.externalId },\n    name: data.externalId,\n    link: encodeURIComponent(data.externalId.toLowerCase()),\n    canDelete: data.meta.isDeletable,\n  };\n}\n\nexport function getDataListAfterDeletion(\n  listItem: IDataItem[],\n  deletedElementId: string\n): IDataItem[] {\n  return listItem.filter((item) => item.ids.id !== deletedElementId);\n}\n\nexport function getDataListAfterAdd(\n  items: IDataItem[],\n  itemToAdd: IDataItem\n): IDataItem[] {\n  return sortDataItemByName([...items, itemToAdd]);\n}\n\nexport function getItemById(id: string, list: IDataItem[]): IDataItem {\n  return list.find(\n    (item) => item.ids.id.toLocaleUpperCase() === id.toLocaleUpperCase()\n  );\n}\n\nexport function getItemByLink(link: string, list: IDataItem[]): IDataItem {\n  return list.find(\n    (item) => item.link.toLocaleUpperCase() === link.toLocaleUpperCase()\n  );\n}\n\nfunction updateItemName(item: IDataItem, newItemName: string): void {\n  item.name = newItemName;\n}\n\nfunction updateItemLink(item: IDataItem, newItemName: string): void {\n  item.link = item.link.replace(/[^/]+$/g, encodeURIComponent(newItemName));\n}\n\nexport function updateItem(\n  selectedItemId: string,\n  dataList: IDataItem[],\n  newItemName: string\n) {\n  const selectedItem: IDataItem = getItemById(selectedItemId, dataList);\n  updateItemName(selectedItem, newItemName);\n  updateItemLink(selectedItem, newItemName);\n}\n\nexport function sortDataItemByName(dataItem: IDataItem[]): IDataItem[] {\n  return dataItem.sort((itemA: IDataItem, itemB: IDataItem) =>\n    compareDataItemsNames(itemA, itemB)\n  );\n}\n\nexport function compareDataItemsNames(\n  itemA: IDataItem,\n  itemB: IDataItem\n): number {\n  return itemA.name\n    .toLocaleUpperCase()\n    .localeCompare(itemB.name.toLocaleUpperCase());\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  IConfig,\n  IDataNode,\n  IDataNodeIdsFields,\n  IResourceType,\n  IRouteDetail,\n  JsTable,\n  getFlattenTreeIds,\n  getNodeById,\n  sortDataNodeByName,\n} from '../../../../shared';\nimport { ITreeConfig } from '../interfaces/data.interface';\n\nexport class DataTreeViewProperties {\n  private dataSource: IDataNode[];\n\n  constructor(object?: DataTreeViewProperties) {\n    this.dataSource = object && object.dataSource ? object.dataSource : [];\n  }\n\n  getDataSource(): IDataNode[] {\n    return this.dataSource;\n  }\n\n  setDataSource(dataSource: IDataNode[]): void {\n    this.dataSource = dataSource;\n  }\n}\n\nexport function getBuildTreeConfig(\n  selectedResourceTypeId: string,\n  configs: JsTable<IConfig>,\n  resourcesTypes: JsTable<IResourceType>\n): ITreeConfig[] {\n  const resourceTypeProperties = resourcesTypes.byId[selectedResourceTypeId];\n  const buildTreeConfig: ITreeConfig[] = [];\n  buildTreeConfig.push({\n    endpoint: resourceTypeProperties.endpoint,\n    resourceTypeId: selectedResourceTypeId,\n  });\n  const childId: string = configs.allIds.find(\n    (resourceTypeId: string) =>\n      configs.byId[resourceTypeId].props &&\n      configs.byId[resourceTypeId].props.parent &&\n      configs.byId[resourceTypeId].props.parent === selectedResourceTypeId\n  );\n  if (childId === undefined) {\n    return buildTreeConfig;\n  } else {\n    return [\n      ...buildTreeConfig,\n      ...getBuildTreeConfig(childId, configs, resourcesTypes),\n    ];\n  }\n}\n\nfunction getType(parentNode: IDataNode, resourceTypesIds: string[]): string {\n  let type: string;\n  let resourceTypeId: string;\n  if (parentNode === null && resourceTypesIds.length > 0) {\n    resourceTypeId = resourceTypesIds[0];\n  } else {\n    resourceTypeId = resourceTypesIds.find(\n      (id: string) => id === parentNode.childrenType\n    );\n  }\n  type = !!resourceTypeId ? resourceTypeId : null;\n  return type;\n}\n\n// TODO for tree with multiple types and levels with same types\n// (level 0 type1 > level 2 type2 > level3 type 2)\n// we will have to find a solution to handle it\nfunction getChildrenType(\n  resourceTypesIds: string[],\n  parentNode: IDataNode\n): string {\n  let childrenType: string;\n  let resourceTypeIndex = 0;\n  if (!!parentNode) {\n    resourceTypeIndex = resourceTypesIds.findIndex(\n      (id: string) => id === parentNode.childrenType\n    );\n  }\n  if (resourceTypesIds.length === 1) {\n    childrenType = resourceTypesIds[0];\n  } else if (resourceTypeIndex + 1 < resourceTypesIds.length) {\n    childrenType = resourceTypesIds[resourceTypeIndex + 1];\n  } else {\n    childrenType = null;\n  }\n  return childrenType;\n}\n\nfunction getLink(\n  data: any,\n  parentNode: IDataNode,\n  endpointsByType: { [id: string]: string }\n) {\n  let link: string;\n  let encodedExternalId: string = encodeURIComponent(\n    data.externalId.toLowerCase()\n  );\n  if (parentNode === null) {\n    link = encodedExternalId;\n  } else {\n    if (parentNode.type !== parentNode.childrenType) {\n      link =\n        parentNode.link +\n        '/' +\n        endpointsByType[parentNode.childrenType] +\n        '/' +\n        encodedExternalId;\n    } else {\n      link = parentNode.link + '/' + encodedExternalId;\n    }\n  }\n  return link;\n}\n\nexport function buildNodeTree(\n  data: any,\n  endpointsByType: { [id: string]: string },\n  parentNode: IDataNode,\n  nameModelRef: { [id: string]: string }\n): IDataNode {\n  const resourceTypesIds: string[] = Object.keys(endpointsByType);\n  const link: string = getLink(data, parentNode, endpointsByType);\n  const type: string = getType(parentNode, resourceTypesIds);\n  const childrenType: string = getChildrenType(resourceTypesIds, parentNode);\n  const levelForPadding: number = !!parentNode\n    ? parentNode.levelForPadding + 1\n    : 0;\n  return {\n    ids: { id: data.id, externalId: data.externalId },\n    name: data[nameModelRef[type]] ?? data.externalId,\n    children: [],\n    link,\n    type,\n    childrenType,\n    canDelete: data.meta.isDeletable,\n    levelForPadding,\n    parentIds: !!parentNode ? parentNode.ids : { id: 'root', externalId: null },\n    parentIdForDisplay: !!parentNode ? parentNode.ids.id : 'root',\n  };\n}\n\nexport function getRemovedNodesSubTree(\n  removedNodesIds: string[],\n  triggerNode: IDataNode,\n  triggerNodeParent: IDataNode,\n  rootNodes: IDataNode[]\n): IDataNode[] {\n  const isRemovingChild = !removedNodesIds.includes(triggerNode.ids.id);\n  const isRemovingRoot = triggerNodeParent == null;\n  let removedNodesSubtree: IDataNode[] = [];\n  if (isRemovingChild) {\n    removedNodesSubtree = triggerNode.children;\n  } else if (isRemovingRoot) {\n    removedNodesSubtree = rootNodes;\n  } else {\n    removedNodesSubtree = triggerNodeParent.children;\n  }\n  return removedNodesSubtree;\n}\n\nexport function deleteTreeNodes(\n  deletedNodesSubtree: IDataNode[],\n  deletedNodesIds: string[]\n): void {\n  deletedNodesIds.forEach((deletedNodeId: string) => {\n    const deletedNodeIndex = deletedNodesSubtree.findIndex(\n      (currentNode: IDataNode) => currentNode.ids.id === deletedNodeId\n    );\n    deletedNodesSubtree.splice(deletedNodeIndex, 1);\n  });\n}\n\nexport function getNodeByLink(link: string, tree: IDataNode[]): IDataNode {\n  let node: IDataNode = tree.find(\n    (node) => node.link.toLocaleUpperCase() === link.toLocaleUpperCase()\n  );\n  for (let i = 0; i < tree.length && node === undefined; i++) {\n    node = getNodeByLink(link, tree[i].children);\n  }\n  return node;\n}\n\nexport function sortTree(dataTree: IDataNode[]) {\n  return sortDataNodeByName(dataTree).map((node: IDataNode) => ({\n    ...node,\n    children: sortTree(node.children),\n  }));\n}\n\nexport function getFlattenDisplayedTree(\n  dataTree: IDataNode[],\n  expandedNodesIds: Set<string>\n): IDataNode[] {\n  return dataTree.reduce((acc, node) => {\n    node.children.length > 0 && expandedNodesIds.has(node.ids.id)\n      ? (acc = acc.concat(\n          node,\n          getFlattenDisplayedTree(node.children, expandedNodesIds)\n        ))\n      : acc.push(node);\n    return acc;\n  }, []);\n}\n\nexport function getNodesIdsNamesParentIds(\n  dataTree: IDataNode[],\n  parentId: string = null\n): IDataNodeIdsFields[] {\n  let allNodesIdsNamesParentIds: IDataNodeIdsFields[] = [];\n  dataTree.forEach((node: IDataNode) => {\n    allNodesIdsNamesParentIds.push({\n      ids: node.ids,\n      name: node.name,\n      parentId,\n    });\n    if (node.children.length > 0) {\n      allNodesIdsNamesParentIds = allNodesIdsNamesParentIds.concat(\n        getNodesIdsNamesParentIds(node.children, node.ids.id)\n      );\n    }\n  });\n  return allNodesIdsNamesParentIds;\n}\n\nexport function updateLevelForPadding(\n  parentLevelForPadding: number,\n  node: IDataNode\n): IDataNode {\n  const levelForPadding: number =\n    parentLevelForPadding !== null ? parentLevelForPadding + 1 : 0;\n  return {\n    ...node,\n    levelForPadding,\n    children: node.children.map((childNode: IDataNode) =>\n      updateLevelForPadding(levelForPadding, childNode)\n    ),\n  };\n}\n\nexport function getParentNode(\n  childNode: IDataNode,\n  dataTree: IDataNode[]\n): IDataNode {\n  let parentNode: IDataNode = null;\n  if (childNode.parentIds.id !== null) {\n    parentNode = getNodeById(childNode.parentIds.id, dataTree);\n  }\n  return parentNode;\n}\n\nexport function updateRoutingHistory(\n  routingHistory: IRouteDetail[],\n  selectedNodeId: string,\n  dataTree: IDataNode[],\n  previousUrl: string,\n  updatedUrl: string,\n  newNodeExternalId: string = null\n): IRouteDetail[] {\n  const selectedNode: IDataNode = getNodeById(selectedNodeId, dataTree);\n  const firstChidlrenIds: string[] = selectedNode.children.map(\n    (childNode: IDataNode) => childNode.ids.id\n  );\n  const allOthersChidlrenIds: string[] = getFlattenTreeIds(\n    selectedNode.children\n  ).filter((id: string) => !firstChidlrenIds.includes(id));\n\n  return routingHistory.map((routeDetail: IRouteDetail) => {\n    if (routeDetail.extras.ids) {\n      const routeSelectedEntryId = routeDetail.extras.ids.id;\n      if (firstChidlrenIds.includes(routeSelectedEntryId)) {\n        if (newNodeExternalId) {\n          routeDetail.extras.parentIds.externalId = newNodeExternalId;\n        }\n        routeDetail.url = routeDetail.url.replace(\n          new RegExp(`^${previousUrl}`),\n          updatedUrl\n        );\n      } else if (allOthersChidlrenIds.includes(routeSelectedEntryId)) {\n        routeDetail.url = routeDetail.url.replace(\n          new RegExp(`^${previousUrl}`),\n          updatedUrl\n        );\n      }\n    }\n    return routeDetail;\n  });\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { FormGroup } from '@angular/forms';\nimport {\n  DetailDataValueTypes,\n  EComponentName,\n  FormDataValueTypes,\n  FormFieldsAllTypes,\n  FormFieldsPrimitiveTypes,\n  IAttribute,\n  IAutocompleteOption,\n  IDataDetail,\n  IDataDetailResource,\n  IFormData,\n  IFormFieldControl,\n  ILink,\n  ISelectOption,\n  getSelectionOptionValue,\n  isArrayOfLinkObjects,\n  isAutocompleteOption,\n  isAutocompleteOptionArray,\n  isLinkObject,\n  setFormFieldDataValue,\n} from '../../../../shared';\nimport { IAdvancedSearchFieldProperties } from '../interfaces/data.interface';\n\nexport function enableAllFormFields(form: FormGroup): void {\n  _enableOrDisableAllFormFields(form, true);\n}\n\nexport function disableAllFormFields(form: FormGroup): void {\n  _enableOrDisableAllFormFields(form, false);\n}\n\nexport function _enableOrDisableAllFormFields(\n  form: FormGroup,\n  enable: boolean\n): void {\n  for (const key in form.controls) {\n    if (Object.prototype.hasOwnProperty.call(form.controls, key)) {\n      if (enable) {\n        form.controls[key].enable();\n      } else {\n        form.controls[key].disable();\n      }\n    }\n  }\n}\n\nexport function convertCustomStringToBoolean(\n  valuesForm: any,\n  formConfig: IFormData[]\n): any {\n  formConfig.forEach((config) => {\n    if (\n      config.value.field.props.displayedValue &&\n      Object.prototype.hasOwnProperty.call(valuesForm, config.modelRef)\n    ) {\n      valuesForm = {\n        ...valuesForm,\n        [config.modelRef]:\n          valuesForm[config.modelRef] ===\n            config.value.field.props.displayedValue.true &&\n          !config.value.field.props.convertToString,\n      };\n    }\n  });\n  return valuesForm;\n}\n\nexport function convertAttributesToFormDataArray(\n  attibutes: IAttribute[],\n  formValues: { [modelRef: string]: string }\n): IFormData[] {\n  return attibutes.reduce(\n    (acc, attribute: IAttribute) =>\n      !!formValues[attribute.modelRef]\n        ? [...acc, { ...attribute, dataValue: formValues[attribute.modelRef] }]\n        : acc,\n    []\n  );\n}\n\nexport function getSearchFormProperties(formConfig: IFormData[]): {\n  [modelRef: string]: IAdvancedSearchFieldProperties;\n} {\n  return formConfig.reduce(\n    (acc, formData) => ({\n      ...acc,\n      [formData.modelRef]: {\n        componentName: formData.props.isSearchable\n          ? formData.value.field.componentName\n          : EComponentName.select,\n        inputType: formData.value.field.props.type,\n        dataValue: formData.value.field.props.convertToString\n          ? formData.dataValue\n            ? formData.value.field.props.trueConditionValue\n            : formData.value.field.props.falseConditionValue\n          : formData.dataValue,\n      },\n    }),\n    {} as { [modelRef: string]: IAdvancedSearchFieldProperties }\n  );\n}\n\nexport function getFormDataAttributes(\n  attributesConfig: IAttribute[],\n  allDataDetails: IDataDetail[],\n  editableAttributesFromBackend: string[],\n  dateDisplayFormat: string,\n  requiredFieldOnUpdate?: { id: string; value: string }\n): IFormData[] {\n  const allDataDetailsValues: {\n    [idField: string]: string | boolean | string[];\n  } = allDataDetails.reduce(\n    (acc, curr) => ({\n      ...acc,\n      [curr.id]: convertDetailAttributeValueToPrimitiveTypes(curr.dataValue),\n    }),\n    {}\n  );\n\n  const editableAttributes: string[] = editableAttributesFromBackend.filter(\n    (modelRef: string) => {\n      const attributeConfig = attributesConfig.find(\n        (attribute: IAttribute) => attribute.modelRef === modelRef\n      );\n      return (\n        attributeConfig.props.isEditable !== false &&\n        attributeConfig.value.field.props.disabled !== true &&\n        attributeConfig.value.field.componentName !== EComponentName.array\n      );\n    }\n  );\n\n  return attributesConfig\n    .filter((attribute: IAttribute) => {\n      const isEditableAttribute =\n        editableAttributes.includes(attribute.modelRef) &&\n        !(\n          attribute.props.isNotEditableWhenTrue &&\n          allDataDetailsValues[attribute.modelRef] === true\n        );\n\n      const isRequiredAttribute =\n        !!requiredFieldOnUpdate &&\n        attribute.modelRef === requiredFieldOnUpdate.id;\n\n      return isEditableAttribute || isRequiredAttribute;\n    })\n    .map((attribute: IAttribute) => {\n      let dataValue: FormDataValueTypes = null;\n      const currentField: IDataDetail = allDataDetails.find(\n        (detail: IDataDetail) => detail.id === attribute.modelRef\n      );\n      if (currentField) {\n        if (\n          !!requiredFieldOnUpdate &&\n          attribute.modelRef === requiredFieldOnUpdate.id\n        ) {\n          dataValue = requiredFieldOnUpdate.value;\n        } else {\n          dataValue = convertDetailAttributeValueToFormDataAttributeValue(\n            currentField.dataValue\n          );\n        }\n      }\n      const formData: IFormData = {\n        ...setDisabledProperty(attribute),\n        dataValue,\n      };\n      setFormFieldDataValue(formData, dataValue, dateDisplayFormat);\n      return formData;\n    });\n}\n\nfunction convertDataDetailResourceToLink(\n  attributeValue: IDataDetailResource\n): ILink {\n  return {\n    id: attributeValue.id,\n    label: attributeValue.value,\n  };\n}\n\nfunction convertDetailAttributeValueToFormDataAttributeValue(\n  detailAttributeValue: DetailDataValueTypes\n): FormDataValueTypes {\n  let formDataValue: FormDataValueTypes;\n  if (isDataDetailResourceObject(detailAttributeValue)) {\n    formDataValue = convertDataDetailResourceToLink(\n      detailAttributeValue as IDataDetailResource\n    );\n  } else if (isDataDetailResourceArray(detailAttributeValue)) {\n    formDataValue = (detailAttributeValue as IDataDetailResource[]).map(\n      (value: IDataDetailResource) =>\n        convertDataDetailResourceToLink(value as IDataDetailResource)\n    );\n  } else {\n    formDataValue = detailAttributeValue as string | boolean | string[];\n  }\n  return formDataValue;\n}\n\nfunction isDataDetailResourceObject(\n  detailAttributeValue: DetailDataValueTypes\n): boolean {\n  return (\n    typeof detailAttributeValue === 'object' &&\n    Object.keys(detailAttributeValue).length === 3 &&\n    'id' in detailAttributeValue &&\n    'value' in detailAttributeValue &&\n    'routerLinkValue' in detailAttributeValue\n  );\n}\n\nfunction isDataDetailResourceArray(\n  detailAttributeValue: DetailDataValueTypes\n): boolean {\n  return (\n    Array.isArray(detailAttributeValue) &&\n    detailAttributeValue.length > 0 &&\n    isDataDetailResourceObject(detailAttributeValue[0])\n  );\n}\n\nfunction convertDetailAttributeValueToPrimitiveTypes(\n  detailAttributeValue: DetailDataValueTypes\n): string | string[] | boolean {\n  let dataValue: string | string[] | boolean = null;\n  if (!!detailAttributeValue) {\n    if (isDataDetailResourceObject(detailAttributeValue)) {\n      dataValue = (detailAttributeValue as IDataDetailResource).value;\n    } else if (isDataDetailResourceArray(detailAttributeValue)) {\n      dataValue = (detailAttributeValue as IDataDetailResource[]).map(\n        (dataDetailResource: IDataDetailResource) => dataDetailResource.value\n      );\n    } else {\n      dataValue = detailAttributeValue as string | boolean | string[];\n    }\n  }\n  return dataValue;\n}\n\nexport function convertFormDataAttributeValueToPrimitiveTypes(\n  formDataValue: FormDataValueTypes\n): string | string[] | boolean {\n  let dataValue: string | string[] | boolean = null;\n  if (!!formDataValue) {\n    if (isLinkObject(formDataValue)) {\n      dataValue = (formDataValue as ILink).label;\n    } else if (isArrayOfLinkObjects(formDataValue)) {\n      dataValue = (formDataValue as ILink[]).map(\n        (dataDetailResource: ILink) => dataDetailResource.label\n      );\n    } else {\n      dataValue = dataValue as string | boolean | string[];\n    }\n  }\n  return dataValue;\n}\n\nfunction setDisabledProperty(attributeConfig: IAttribute): IAttribute {\n  return {\n    ...attributeConfig,\n    value: {\n      ...attributeConfig.value,\n      field: {\n        ...attributeConfig.value.field,\n        props: {\n          ...attributeConfig.value.field.props,\n          disabled: attributeConfig.value.field.props.disabled,\n        },\n      },\n    },\n  };\n}\n\nexport function convertFormFieldsAllTypesToPrimitiveTypes(\n  formFieldValue: FormFieldsAllTypes\n): FormFieldsPrimitiveTypes {\n  let fieldValue: FormFieldsPrimitiveTypes;\n  if (isAutocompleteOption(formFieldValue)) {\n    fieldValue = (formFieldValue as IAutocompleteOption).value.label;\n  } else if (isAutocompleteOptionArray(formFieldValue)) {\n    fieldValue = (formFieldValue as IAutocompleteOption[]).map(\n      (currFieldValue: IAutocompleteOption) => currFieldValue.value.label\n    );\n  } else if (isSelectOption(formFieldValue)) {\n    fieldValue = getSelectionOptionValue(formFieldValue as ISelectOption);\n  } else if (isSelectOptionArray(formFieldValue)) {\n    fieldValue = (formFieldValue as ISelectOption[]).map(\n      (currFieldValue: ISelectOption) => getSelectionOptionValue(currFieldValue)\n    );\n  } else {\n    fieldValue = formFieldValue as string | boolean | string[];\n  }\n  return fieldValue;\n}\n\nexport function getRawValues(formState: {\n  [modelRef: string]: IFormFieldControl;\n}): {\n  [modelRef: string]: FormFieldsAllTypes;\n} {\n  return Object.keys(formState).reduce(\n    (acc, curr) => ({\n      ...acc,\n      [curr]: formState[curr].value,\n    }),\n    {}\n  );\n}\n\nfunction isSelectOption(fieldValue: FormFieldsAllTypes): boolean {\n  const hasBasicProperties: boolean =\n    typeof fieldValue === 'object' &&\n    'value' in fieldValue &&\n    (typeof fieldValue.value === 'string' || isLinkObject(fieldValue.value)) &&\n    'option' in fieldValue;\n\n  const hasExtraProperties: boolean =\n    typeof fieldValue === 'object' && 'attributeId' in fieldValue;\n\n  return (\n    hasBasicProperties &&\n    (Object.keys(fieldValue).length === 2 ||\n      (Object.keys(fieldValue).length === 3 && hasExtraProperties))\n  );\n}\n\nfunction isSelectOptionArray(fieldValue: FormFieldsAllTypes): boolean {\n  return (\n    Array.isArray(fieldValue) &&\n    fieldValue.length > 0 &&\n    isSelectOption(fieldValue[0])\n  );\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  CHECK_ATTRIBUTE_PRESENCE,\n  Data,\n  EComponentName,\n  EResourceComponent,\n  EScimOperator,\n  IAdvancedSearchChip,\n  IAttribute,\n  IConfig,\n  ILink,\n  IPersistentUiData,\n  getDisplayedColumnsIds,\n  isLinkObject,\n  simpleSearchFormDataElement,\n} from '../../../../shared';\nimport { IAdvancedSearchFieldProperties } from '../interfaces/data.interface';\nimport {\n  convertAttributesToFormDataArray,\n  getSearchFormProperties,\n} from './form.helper';\n\n/**\n * Performs the specified search for each field type.\n *\n * @export\n * @param {{\n *   [modelRef: string]: IAdvancedSearchFieldProperties;\n * }} searchFormValues - An indexable object containing { componentName: '', inputType: '', dataType: formFieldsTypes }.\n * @returns {string}\n */\nexport function advancedSearchFormDataElement(searchFormValues: {\n  [modelRef: string]: IAdvancedSearchFieldProperties;\n}): string {\n  let filterScim = '';\n  const allModelRefs: string[] = Object.keys(searchFormValues).filter(\n    (modelRef) => !!searchFormValues[modelRef]\n  );\n  allModelRefs.forEach((modelRef: string, index: number) => {\n    switch (searchFormValues[modelRef].componentName) {\n      case EComponentName.textarea: {\n        const nbLines: number = (\n          searchFormValues[modelRef].dataValue as string[]\n        ).length;\n        for (let i = 0; i < nbLines; i++) {\n          filterScim =\n            filterScim +\n            modelRef +\n            ' co ' +\n            '\"' +\n            searchFormValues[modelRef].dataValue[i] +\n            '\"';\n          if (i < nbLines - 1) {\n            filterScim = filterScim + ' AND ';\n          }\n        }\n        break;\n      }\n\n      case EComponentName.select: {\n        let suffix: string =\n          searchFormValues[modelRef].dataValue === CHECK_ATTRIBUTE_PRESENCE\n            ? EScimOperator.PR\n            : EScimOperator.EQ +\n              ' ' +\n              '\"' +\n              searchFormValues[modelRef].dataValue +\n              '\"';\n        filterScim = filterScim + modelRef + ' ' + suffix;\n        break;\n      }\n\n      case EComponentName.datepicker:\n      case EComponentName.slideToggle:\n      case EComponentName.autocomplete:\n        filterScim =\n          filterScim +\n          modelRef +\n          ' eq ' +\n          '\"' +\n          searchFormValues[modelRef].dataValue +\n          '\"';\n        break;\n\n      case EComponentName.input:\n        if (searchFormValues[modelRef].inputType === 'date') {\n          filterScim =\n            filterScim +\n            modelRef +\n            ' eq ' +\n            '\"' +\n            searchFormValues[modelRef].dataValue +\n            '\"';\n        } else {\n          filterScim =\n            filterScim +\n            modelRef +\n            ' co ' +\n            '\"' +\n            searchFormValues[modelRef].dataValue +\n            '\"';\n        }\n        break;\n\n      default:\n        filterScim =\n          filterScim +\n          modelRef +\n          ' co ' +\n          '\"' +\n          searchFormValues[modelRef].dataValue +\n          '\"';\n        break;\n    }\n\n    if (index < allModelRefs.length - 1) {\n      filterScim = filterScim + ' AND ';\n    }\n  });\n  return filterScim;\n}\n\nfunction getSearchType(\n  searchBarValue: any,\n  advancedSearchChips: IAdvancedSearchChip[]\n): string {\n  let searchType: string = null;\n  if (searchBarValue !== null && searchBarValue !== '') {\n    searchType = 'simple';\n  } else if (advancedSearchChips.length > 0) {\n    searchType = 'advanced';\n  }\n  return searchType;\n}\n\nexport function isMatchingSearch(\n  searchBarValue: any,\n  advancedSearchChips: IAdvancedSearchChip[],\n  displayedColumns: string[],\n  flattenNewData: any\n): boolean {\n  const searchType: string = getSearchType(searchBarValue, advancedSearchChips);\n  let matchSearch = true;\n  switch (searchType) {\n    case 'simple':\n      matchSearch = Object.keys(flattenNewData)\n        .filter((key: string) => displayedColumns.includes(key))\n        .some((key: string) => flattenNewData[key].includes(searchBarValue));\n      break;\n    case 'advanced':\n      const chipsToCheckForNewData: IAdvancedSearchChip[] =\n        advancedSearchChips.filter((chip) => !!flattenNewData[chip.modelRef]);\n      if (chipsToCheckForNewData.length > 0) {\n        matchSearch = chipsToCheckForNewData.every(\n          (chip: IAdvancedSearchChip) => {\n            if (typeof flattenNewData[chip.modelRef] === 'string') {\n              return flattenNewData[chip.modelRef]\n                .toLocaleUpperCase()\n                .includes((chip.value as string).toLocaleUpperCase());\n            } else if (isLinkObject(flattenNewData[chip.modelRef])) {\n              return (\n                (\n                  flattenNewData[chip.modelRef] as ILink\n                ).id.toLocaleUpperCase() ===\n                (chip.value as ILink).id.toLocaleUpperCase()\n              );\n            } else {\n              return flattenNewData[chip.modelRef] === chip.value;\n            }\n          }\n        );\n      } else {\n        matchSearch = false;\n      }\n      break;\n    default:\n      break;\n  }\n  return matchSearch;\n}\n\nexport function getFilterScim(\n  searchFormValue: string,\n  advancedSearchChips: IAdvancedSearchChip[],\n  config: IConfig\n): string {\n  let filterScim: string;\n  if (!!searchFormValue) {\n    let filteredEntryFields: string[] = [];\n\n    const scimName: string = config.attributes.find(\n      (attribute: IAttribute) =>\n        attribute.props.isTreeNodeName || attribute.props.isListItemName\n    )?.modelRef;\n    switch (config.component) {\n      case EResourceComponent.ARRAY:\n        filteredEntryFields = getDisplayedColumnsIds(config);\n        break;\n      case EResourceComponent.TREE:\n      case EResourceComponent.LIST:\n        filteredEntryFields = [scimName];\n        break;\n\n      default:\n        break;\n    }\n\n    filterScim = simpleSearchFormDataElement(\n      searchFormValue,\n      filteredEntryFields\n    );\n  } else if (!!advancedSearchChips && advancedSearchChips.length > 0) {\n    const searchFormValues: {\n      [modelRef: string]: string;\n    } = advancedSearchChips.reduce(\n      (acc, chip) => ({\n        ...acc,\n        [chip.modelRef]: isLinkObject(chip.value)\n          ? (chip.value as ILink).id\n          : (chip.value as string),\n      }),\n      {} as { [modelRef: string]: string }\n    );\n\n    filterScim = advancedSearchFormDataElement(\n      getSearchFormProperties(\n        convertAttributesToFormDataArray(config.attributes, searchFormValues)\n      )\n    );\n  }\n  return filterScim;\n}\n\nexport function getValuesForFilterScim(\n  action: any,\n  persistentUiData: IPersistentUiData\n): {\n  searchFormValue: string;\n  advancedSearchChips: IAdvancedSearchChip[];\n} {\n  let searchFormValue: string;\n  let advancedSearchChips: IAdvancedSearchChip[];\n\n  if (action instanceof Data.FilterResources) {\n    if (typeof action.payload.filterPayload === 'string') {\n      searchFormValue = action.payload.filterPayload;\n    } else if (Array.isArray(action.payload.filterPayload)) {\n      advancedSearchChips = action.payload.filterPayload;\n    }\n  } else if (!!persistentUiData) {\n    searchFormValue = persistentUiData.searchForm;\n    advancedSearchChips = persistentUiData.advancedSearchChips;\n  }\n  return { searchFormValue, advancedSearchChips };\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Location } from '@angular/common';\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport {\n  Actions,\n  Store,\n  ofActionDispatched,\n  ofActionSuccessful,\n} from '@ngxs/store';\nimport * as _ from 'lodash';\nimport {\n  Observable,\n  Subject,\n  catchError,\n  filter,\n  forkJoin,\n  map,\n  switchMap,\n  takeUntil,\n  tap,\n  throwError,\n  withLatestFrom,\n} from 'rxjs';\nimport {\n  ConfigsStateModel,\n  Data,\n  DataService,\n  DataState,\n  DataStateModel,\n  EResourceComponent,\n  EScimOperator,\n  EUserAction,\n  Error as ErrorActions,\n  ErrorStateModel,\n  ErrorsHandlerService,\n  IAttribute,\n  IData,\n  IDataItem,\n  IDataNode,\n  IEntryIds,\n  IResourceTypeRequestDetail,\n  InteractionsService,\n  JsTable,\n  Ui,\n  buildTree,\n  getAttributeScimFilter,\n  getNodeById,\n  getRequestsDetails,\n  getResponseAttributesIds,\n  getSearchRequestScimBody,\n  getUserActionOnResourceRequest,\n  resourceRequest,\n  toJsTable,\n} from '../../../../shared';\nimport { buildList, getItemByLink } from '../helpers/data-list.helper';\nimport { getNodeByLink } from '../helpers/data-tree.helper';\nimport {\n  hasResourceTypeChildren,\n  isFilteringData,\n} from '../helpers/resources.helper';\nimport {\n  getFilterScim,\n  getValuesForFilterScim,\n} from '../helpers/search.helper';\n\n@Injectable({ providedIn: 'root' })\nexport class DataActionsHandler implements OnDestroy {\n  private _onDestroy$ = new Subject<void>();\n  private _requestsDetails: IResourceTypeRequestDetail[];\n  private _nextResources: IData | IDataNode[] | IDataItem[];\n  private _previousResources: IData | IDataNode[] | IDataItem[];\n  private _previousDetail: any;\n  private _nextRootIdSelectedResourceType: string;\n  private _nextTheme: string;\n  private _previousSelectedResourceTypeId: string;\n  private _previousSelectedEntryIds: IEntryIds;\n  private _previousSelectedEntryParentIds: IEntryIds;\n  private _isRedirectingToDetail: boolean;\n\n  constructor(\n    private _actions$: Actions,\n    private _dataService: DataService,\n    private _interactionsService: InteractionsService,\n    private _errorHandlerService: ErrorsHandlerService,\n    private _store$: Store,\n    private _location: Location\n  ) {\n    this._actions$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        ofActionDispatched(\n          Data.SetSelectedResourceTypeId,\n          Data.SetSelectedEntryIds,\n          Data.ResetSelectedEntryIds,\n          Data.SetSelectedEntryId,\n          Data.ResetSelectedEntryId,\n          Data.SetSelectedEntryParentIds,\n          Data.ResetSelectedEntryParentIds,\n          Data.FetchResources,\n          Data.SetDataDetail,\n          Data.FetchResourcesSuccess,\n          Data.SetResources\n        ),\n        withLatestFrom(\n          this._store$.select((state) => state.data),\n          this._store$.select((state) => state.configs),\n          this._store$.select((state) => state.resourcesTypes)\n        ),\n        tap(([action, data, configs, resourcesTypes]) => {\n          if (\n            (action instanceof Data.FetchResourcesSuccess &&\n              !this._isRedirectingToDetail) ||\n            action instanceof Data.SetResources\n          ) {\n            if (\n              action instanceof Data.FetchResourcesSuccess &&\n              !this._isRedirectingToDetail\n            ) {\n              this._previousDetail = null;\n            }\n            this._nextResources = null;\n            this._previousResources = action.payload.resources;\n          } else if (action instanceof Data.FetchResources) {\n            this._previousResources = data.resources;\n            this._nextResources = null;\n          }\n          if (action instanceof Data.SetDataDetail) {\n            this._previousDetail = action.payload.dataDetail;\n            this._previousSelectedResourceTypeId = data.selectedResourceTypeId;\n          }\n          if (action instanceof Data.SetSelectedResourceTypeId) {\n            this._previousSelectedResourceTypeId = data.selectedResourceTypeId;\n\n            // TODO this will only work with two levels of different types\n            const rootResourceTypeId: string =\n              configs.byId[action.payload.id].level === 0\n                ? action.payload.id\n                : configs.byId[action.payload.id].props.parent;\n\n            this._nextRootIdSelectedResourceType = rootResourceTypeId;\n            this._nextTheme =\n              resourcesTypes.byId[rootResourceTypeId].endpoint + '-theme';\n          } else if (action instanceof Data.ResetSelectedResourceTypeId) {\n            this._previousSelectedResourceTypeId = data.selectedResourceTypeId;\n            this._nextRootIdSelectedResourceType = null;\n            this._nextTheme = null;\n          } else if (\n            action instanceof Data.SetSelectedEntryIds ||\n            action instanceof Data.ResetSelectedEntryIds ||\n            action instanceof Data.SetSelectedEntryId ||\n            action instanceof Data.ResetSelectedEntryId\n          ) {\n            this._previousSelectedEntryIds = data.selectedEntryIds;\n          } else if (\n            action instanceof Data.SetSelectedEntryParentIds ||\n            action instanceof Data.ResetSelectedEntryParentIds\n          ) {\n            this._previousSelectedEntryParentIds = data.selectedEntryParentIds;\n          }\n        })\n      )\n      .subscribe();\n\n    this._actions$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        ofActionSuccessful(Data.FetchResources, Data.FilterResources),\n        withLatestFrom(\n          this._store$.select((state) => state.configs),\n          this._store$.select((state) => state.resourcesTypes),\n          this._store$.select((state) => state.data),\n          this._store$.select((state) => state.error)\n        ),\n        switchMap(\n          ([action, configs, resourcesTypes, dataState, errorState]) => {\n            const rootResourceTypeId: string =\n              action instanceof Data.FilterResources\n                ? dataState.selectedResourceTypeId\n                : action.payload.resourceTypeId;\n            this._isRedirectingToDetail = (\n              action.payload as {\n                resourceTypeId: string;\n                isRedirectingToDetail: boolean;\n              }\n            ).isRedirectingToDetail;\n            const isHandling404Eror: boolean =\n              errorState.isHandlingError &&\n              !!errorState.errorDetail &&\n              errorState.errorDetail.handledError instanceof\n                HttpErrorResponse &&\n              errorState.errorDetail.handledError.status === 404;\n            if (\n              action instanceof Data.FetchResources &&\n              !action.payload.isRedirectingToDetail &&\n              !isHandling404Eror\n            ) {\n              this._store$.dispatch([\n                new Data.ResetSelectedEntryParentIds(),\n                new Data.ResetSelectedEntryIds(),\n                new Data.SetRootIdSelectedResourceType({\n                  id: rootResourceTypeId,\n                }),\n                new Ui.ChangeTheme({\n                  theme: this._nextTheme,\n                }),\n              ]);\n            }\n\n            const resourceComponent: EResourceComponent =\n              configs.byId[rootResourceTypeId].component;\n            this._requestsDetails = getRequestsDetails(\n              rootResourceTypeId,\n              configs,\n              resourcesTypes\n            );\n            const isFiltering: boolean =\n              (action instanceof Data.FilterResources ||\n                isFilteringData(dataState, rootResourceTypeId)) &&\n              !hasResourceTypeChildren(configs, rootResourceTypeId);\n\n            const valuesForFilterScim = getValuesForFilterScim(\n              action,\n              dataState.byId[rootResourceTypeId]\n            );\n\n            let filterScim: string = isFiltering\n              ? getFilterScim(\n                  valuesForFilterScim.searchFormValue,\n                  valuesForFilterScim.advancedSearchChips,\n                  configs.byId[rootResourceTypeId]\n                )\n              : null;\n\n            let isGettingMatchingNodes = false;\n            // FIXME This will only work for trees which have only one resource type\n            if (\n              !!filterScim &&\n              resourceComponent === EResourceComponent.TREE &&\n              this._requestsDetails.length === 1\n            ) {\n              isGettingMatchingNodes = true;\n              if (action instanceof Data.FetchResources) {\n                this._requestsDetails.push(this._requestsDetails[0]);\n              }\n            }\n\n            this._interactionsService.isProcessingRequest(true);\n            let areTreeRequestsIn404Error = false;\n            return forkJoin(\n              this._requestsDetails.map(\n                (requestDetail: IResourceTypeRequestDetail, index: number) => {\n                  const configResourceTypeId: string =\n                    resourceComponent === EResourceComponent.ARRAY\n                      ? rootResourceTypeId\n                      : requestDetail.resourceTypeId;\n\n                  const responseAttributesIds: string[] =\n                    getResponseAttributesIds(\n                      configs.byId[configResourceTypeId],\n                      requestDetail.resourceTypeId\n                    );\n\n                  return resourceRequest(\n                    index === this._requestsDetails.length - 1\n                      ? filterScim\n                      : null,\n                    requestDetail,\n                    responseAttributesIds,\n                    this._dataService\n                  ).pipe(\n                    map((response: HttpResponse<IData> | IData) =>\n                      'body' in response\n                        ? (response as HttpResponse<IData>).body\n                        : response\n                    ),\n                    catchError((error: Error | HttpErrorResponse) => {\n                      const isTreeComponent: boolean =\n                        resourceComponent === EResourceComponent.TREE;\n                      const isArrayComponent: boolean =\n                        resourceComponent === EResourceComponent.ARRAY;\n\n                      // For errors on depending types we do not update store\n                      // only a notification will be displayed\n                      // For tree if a 404 occured on one of tree types then we do not update\n                      // the store anymore to keep 404 in lastError store field and to know\n                      // that we have to redirect to not-found page\n                      if (\n                        (index === 0 && isArrayComponent) ||\n                        !areTreeRequestsIn404Error\n                      ) {\n                        this._store$.dispatch([\n                          new ErrorActions.SetErrorDetail({\n                            error,\n                            userActionOnError:\n                              getUserActionOnResourceRequest(resourceComponent),\n                          }),\n                          new ErrorActions.IsHandlingError(true),\n                        ]);\n                      }\n                      areTreeRequestsIn404Error =\n                        !areTreeRequestsIn404Error &&\n                        isTreeComponent &&\n                        error instanceof HttpErrorResponse &&\n                        error.status === 404;\n                      return this._errorHandlerService.handleError(error);\n                    })\n                  );\n                }\n              )\n            ).pipe(\n              map((resources: (IData | Error | HttpErrorResponse)[]) => [\n                action,\n                resources,\n                resourceComponent,\n                configs,\n                isGettingMatchingNodes,\n              ])\n            );\n          }\n        ),\n        filter(\n          ([\n            _action,\n            resources,\n            _resourceComponent,\n            _configs,\n            _isGettingMatchingNodes,\n          ]) => {\n            this._interactionsService.isProcessingRequest(false);\n            const oneRequestFailed: boolean = resources.some(\n              (resource: IData | Error | HttpErrorResponse) =>\n                resource instanceof Error ||\n                resource instanceof HttpErrorResponse\n            );\n            if (oneRequestFailed) {\n              const actions: any[] = [new Data.FetchResourcesError()];\n              if (this._isRedirectingToDetail) {\n                actions.push(\n                  new Data.SetResources({\n                    resources: this._previousResources,\n                  }),\n                  new Data.SetSelectedResourceTypeId({\n                    id: this._previousSelectedResourceTypeId,\n                  })\n                );\n              }\n              this._store$.dispatch(actions);\n            }\n            return !oneRequestFailed;\n          }\n        ),\n        tap(\n          ([\n            action,\n            resources,\n            resourceComponent,\n            configs,\n            isGettingMatchingNodes,\n          ]) => {\n            let resourcesForStore: IData | IDataNode[] | IDataItem[];\n            let entriesIdsMatchingAdvancedSearch: { [id: string]: true } = {};\n            switch (resourceComponent) {\n              case EResourceComponent.ARRAY:\n                resourcesForStore = resources[0];\n                break;\n              case EResourceComponent.LIST:\n                resourcesForStore = buildList(resources[0]);\n                break;\n              case EResourceComponent.TREE:\n                if (isGettingMatchingNodes) {\n                  entriesIdsMatchingAdvancedSearch = _.fromPairs(\n                    resources\n                      .pop()\n                      .Resources.map((entry: any) => [entry.id, true])\n                  );\n                }\n                if (resources.length > 0) {\n                  const resourcesAsJsTable: JsTable<IData> = toJsTable<IData>(\n                    resources.reduce(\n                      (acc, curr, index) => ({\n                        ...acc,\n                        [this._requestsDetails[index].resourceTypeId]: curr,\n                      }),\n                      {}\n                    )\n                  );\n                  resourcesForStore = buildTree(\n                    resourcesAsJsTable,\n                    configs,\n                    this._requestsDetails\n                  );\n                } else {\n                  resourcesForStore = this._store$.selectSnapshot(\n                    DataState.getResources\n                  );\n                }\n                break;\n              default:\n                break;\n            }\n            let actions: any[] = [];\n            let fetchedResources: IData | IDataNode[] | IDataItem[];\n            if (\n              action instanceof Data.FetchResources &&\n              action.payload.isRedirectingToDetail\n            ) {\n              this._nextResources = resourcesForStore;\n              fetchedResources = null;\n            } else {\n              fetchedResources = resourcesForStore;\n            }\n            actions.push(\n              new Data.FetchResourcesSuccess({\n                resources: fetchedResources,\n                entriesIdsMatchingAdvancedSearch,\n              })\n            );\n            if (action instanceof Data.FilterResources) {\n              actions.push(action.payload.actionOnSuccess);\n            }\n            this._store$.dispatch(actions);\n          }\n        )\n      )\n      .subscribe();\n\n    this._actions$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        ofActionSuccessful(Data.FetchDataDetail),\n        withLatestFrom(\n          this._store$.select((state) => state.resourcesTypes),\n          this._store$.select((state) => state.data),\n          this._store$.select((state) => state.configs),\n          this._store$.select((state) => state.error)\n        ),\n        switchMap(\n          ([_action, resourcesTypes, dataState, configsState, errorState]) => {\n            this._interactionsService.isProcessingRequest(true);\n            const endpoint: string =\n              resourcesTypes.byId[dataState.selectedResourceTypeId].endpoint;\n            return this.getDetail(\n              endpoint,\n              configsState,\n              dataState,\n              errorState\n            ).pipe(\n              withLatestFrom(this._store$.select((state) => state.configs)),\n              tap(([[dataDetail, selectedEntryId], configs]) => {\n                this._interactionsService.isProcessingRequest(false);\n                const actions: any[] = [];\n                this._isRedirectingToDetail = false;\n                if (\n                  this._nextRootIdSelectedResourceType !==\n                  dataState.rootIdSelectedResourceType\n                ) {\n                  actions.push(\n                    new Data.SetSelectedEntryExternalId({\n                      externalId: dataDetail.externalId,\n                    })\n                  );\n\n                  const nextResourceComponentIsTree: boolean =\n                    configs.byId[this._nextRootIdSelectedResourceType]\n                      .component === EResourceComponent.TREE;\n                  if (nextResourceComponentIsTree) {\n                    actions.push(\n                      new Data.SetSelectedEntryParentIds({\n                        ids: getNodeById(\n                          selectedEntryId,\n                          this._nextResources as IDataNode[]\n                        )?.parentIds,\n                      })\n                    );\n                  }\n                  actions.push(\n                    new Data.SetRootIdSelectedResourceType({\n                      id: this._nextRootIdSelectedResourceType,\n                    }),\n                    new Ui.ChangeTheme({\n                      theme: this._nextTheme,\n                    }),\n                    new Data.SetResources({\n                      resources: this._nextResources,\n                    })\n                  );\n                }\n                actions.push(\n                  new Data.FetchDataDetailSuccess(),\n                  new Data.SetDataDetail({ dataDetail })\n                );\n                this._store$.dispatch(actions);\n              }),\n              catchError((error: Error | HttpErrorResponse) => {\n                this._interactionsService.isProcessingRequest(false);\n                this._isRedirectingToDetail = false;\n                const actions: any[] = [\n                  new ErrorActions.SetErrorDetail({\n                    error,\n                    userActionOnError: EUserAction.DETAIL_GET,\n                  }),\n                  new ErrorActions.IsHandlingError(true),\n                ];\n                if (\n                  error instanceof HttpErrorResponse &&\n                  error.status === 404\n                ) {\n                  this._previousDetail = null;\n                  if (\n                    this._nextRootIdSelectedResourceType !==\n                    dataState.rootIdSelectedResourceType\n                  ) {\n                    actions.push(\n                      new Data.SetRootIdSelectedResourceType({\n                        id: this._nextRootIdSelectedResourceType,\n                      }),\n                      new Ui.ChangeTheme({\n                        theme: this._nextTheme,\n                      }),\n                      new Data.SetResources({\n                        resources: this._nextResources,\n                      })\n                    );\n                  }\n                } else {\n                  if (\n                    this._nextRootIdSelectedResourceType !==\n                    dataState.rootIdSelectedResourceType\n                  ) {\n                    actions.push(\n                      new Data.SetResources({\n                        resources: this._previousResources,\n                      })\n                    );\n                  }\n                  if (!!this._previousSelectedResourceTypeId) {\n                    actions.push(\n                      new Data.SetSelectedResourceTypeId({\n                        id: this._previousSelectedResourceTypeId,\n                      })\n                    );\n                  }\n                  actions.push(\n                    new Data.SetSelectedEntryIds({\n                      ids: this._previousSelectedEntryIds,\n                    }),\n                    new Data.SetSelectedEntryParentIds({\n                      ids: this._previousSelectedEntryParentIds,\n                    })\n                  );\n                }\n                actions.push(new Data.FetchDataDetailError());\n                if (this._previousDetail !== null) {\n                  actions.push(\n                    new Data.SetDataDetail({\n                      dataDetail: this._previousDetail,\n                    })\n                  );\n                }\n                this._store$.dispatch(actions);\n                return this._errorHandlerService.handleError(error);\n              })\n            );\n          }\n        )\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  getDetail(\n    endpoint: string,\n    configsState: ConfigsStateModel,\n    dataState: DataStateModel,\n    errorState: ErrorStateModel\n  ): Observable<[any, string]> {\n    const resourceComponent: EResourceComponent =\n      configsState.byId[dataState.selectedResourceTypeId].component;\n    if (!!dataState.selectedEntryIds?.id) {\n      return this._dataService\n        .getDataDetail(endpoint, dataState.selectedEntryIds.id)\n        .pipe(\n          map((dataDetail) => [dataDetail, dataState.selectedEntryIds?.id])\n        );\n    } else {\n      const url: string =\n        localStorage.getItem('redirectUrl') || this._location.path();\n      if (resourceComponent === EResourceComponent.ARRAY) {\n        const filterScimKeyAttribute: IAttribute = configsState.byId[\n          dataState.selectedResourceTypeId\n        ].attributes.find((attribute: IAttribute) => attribute.keyForDetail);\n        if (!!filterScimKeyAttribute) {\n          const filterScimKeyModelRef: string = filterScimKeyAttribute.modelRef;\n          const filterScimValue: string = decodeURIComponent(\n            url.replace(/.*\\//g, '')\n          );\n          const filterScim: string = getAttributeScimFilter(\n            filterScimKeyModelRef,\n            EScimOperator.EQ,\n            filterScimValue\n          );\n          const searchRequestScimBody: any = getSearchRequestScimBody([]);\n          // FIXME when users will work with store then search request\n          // won't be necessary anymore. We will do a request to users\n          // first, then we will find selected entry id through all users\n          return this._dataService\n            .search(endpoint, filterScim, true, searchRequestScimBody)\n            .pipe(\n              map((response: HttpResponse<IData>) => {\n                if (response.body.totalResults === 1) {\n                  return response;\n                } else {\n                  throw new HttpErrorResponse({\n                    error: {\n                      message: errorState.genericErrorMessages.notFound.replace(\n                        '$1',\n                        filterScimValue\n                      ),\n                      code: 404,\n                    },\n                    status: 404,\n                    url: this._location.path(),\n                  });\n                }\n              }),\n              map((response: HttpResponse<IData>) => {\n                const id: string = response.body.Resources[0].id;\n                const actions: any[] = [\n                  new Data.SetSelectedEntryId({ id }),\n                  new Data.ResetSelectedEntryParentIds(),\n                ];\n                if (\n                  this._nextRootIdSelectedResourceType ===\n                  dataState.rootIdSelectedResourceType\n                ) {\n                  const externalId: string =\n                    response.body.Resources[0].externalId;\n                  actions.push(\n                    new Data.SetSelectedEntryExternalId({ externalId })\n                  );\n                }\n                this._store$.dispatch(actions);\n                return id;\n              }),\n              switchMap((entryId: string) =>\n                this._dataService\n                  .getDataDetail(endpoint, entryId)\n                  .pipe(map((dataDetail) => [dataDetail, entryId]))\n              ),\n              map(([dataDetail, entryId]) => [dataDetail, entryId])\n            );\n        } else {\n          return throwError(\n            () => new Error(errorState.genericErrorMessages.missingKeyForDetail)\n          );\n        }\n      } else {\n        // FIXME Special case when a users who shares url have not access\n        // to same entries in tree\n        const selectedEntryLink: string = url.replace(/\\/home\\/[^/]+\\//g, '');\n        const actions: any[] = [];\n        let selectedEntryIds: IEntryIds;\n        if (resourceComponent === EResourceComponent.TREE) {\n          const selectedNode: IDataNode = getNodeByLink(\n            selectedEntryLink,\n            this._isRedirectingToDetail\n              ? (this._nextResources as IDataNode[])\n              : (dataState.resources as IDataNode[])\n          );\n          selectedEntryIds = selectedNode?.ids;\n          actions.push(\n            new Data.SetSelectedEntryParentIds({\n              ids: selectedNode?.parentIds,\n            })\n          );\n        } else {\n          const selectedItem: IDataItem = getItemByLink(\n            selectedEntryLink,\n            this._isRedirectingToDetail\n              ? (this._nextResources as IDataItem[])\n              : (dataState.resources as IDataItem[])\n          );\n          selectedEntryIds = selectedItem?.ids;\n        }\n        actions.push(new Data.SetSelectedEntryId({ id: selectedEntryIds?.id }));\n        if (\n          this._nextRootIdSelectedResourceType ===\n          dataState.rootIdSelectedResourceType\n        ) {\n          const externalId: string = selectedEntryIds?.externalId;\n          actions.push(new Data.SetSelectedEntryExternalId({ externalId }));\n        }\n        this._store$.dispatch(actions);\n        return this._dataService\n          .getDataDetail(endpoint, selectedEntryIds?.id)\n          .pipe(map((dataDetail) => [dataDetail, selectedEntryIds?.id]));\n      }\n    }\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable, TemplateRef } from '@angular/core';\nimport { GenericFormComponent } from '../../../../feature';\nimport { FormService } from '../../../../shared';\n\n@Injectable()\nexport class DefaultFormService\n  implements FormService<any, GenericFormComponent>\n{\n  public customFormContentComponent: any;\n\n  setCustomFormContentComponent(): void {}\n\n  getCustomFormContentTemplate(): TemplateRef<any> {\n    return null;\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  HttpErrorResponse,\n  HttpEvent,\n  HttpHandler,\n  HttpInterceptor,\n  HttpRequest,\n} from '@angular/common/http';\nimport { Inject, Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { Observable, catchError, throwError, timeout } from 'rxjs';\nimport { ErrorState } from '../../../../shared';\nimport { AuthService } from '../auth/auth.service.interface';\nexport const DEFAULT_TIMEOUT = new InjectionToken<number>('defaultTimeout');\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class InterceptorService implements HttpInterceptor {\n  constructor(\n    @Inject(DEFAULT_TIMEOUT) private defaultTimeout: number,\n    private _authService: AuthService,\n    private _injector: Injector\n  ) {}\n\n  intercept(\n    request: HttpRequest<any>,\n    next: HttpHandler\n  ): Observable<HttpEvent<any>> {\n    const timeoutValue = request.headers.get('timeout') || this.defaultTimeout;\n    const timeoutValueNumeric = Number(timeoutValue);\n    const store = this._injector.get(Store);\n\n    if (request.headers.has('timeout')) {\n      request = request.clone({\n        headers: request.headers.delete('timeout'),\n      });\n    }\n\n    // this part of code provide some additional informations about data types that the client can send and receive\n    if (!request.headers.has('Content-Type')) {\n      request = request.clone({\n        headers: request.headers.set('Content-Type', 'application/json'),\n      });\n    }\n    request = request.clone({\n      headers: request.headers.set('Accept', 'application/json'),\n    });\n\n    return next.handle(request).pipe(\n      timeout(timeoutValueNumeric),\n      catchError((error: HttpErrorResponse) => {\n        let errorMessage = '';\n\n        if (error.status === 0) {\n          const unreachableServer = store.selectSnapshot(\n            ErrorState.getUnreachableServer\n          );\n          error = new HttpErrorResponse({\n            headers: error.headers,\n            error: new ErrorEvent(unreachableServer, {\n              error: new Error(unreachableServer),\n              message: unreachableServer,\n            }),\n            status: 503,\n            statusText: unreachableServer,\n            url: error.url || undefined,\n          });\n        }\n\n        if (error.error instanceof ErrorEvent) {\n          // Client-side error\n          errorMessage = `Error: ${error.error.message}`;\n        } else {\n          // Server-side error\n          errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n        }\n\n        if (error.status === 401) {\n          // logout and redirect to Identity Server Portal logout url\n          setTimeout(() => {\n            this._authService.logout();\n          }, 1000);\n        }\n\n        console.log(errorMessage);\n        return throwError(() => error);\n      })\n    );\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport {\n  ConfigsState,\n  IConfig,\n  IResourceType,\n  JsTable,\n  ResourcesTypesState,\n} from '../../../../shared';\nimport { IListItem } from '../interfaces/ui.interface';\n\nexport abstract class SidenavService {\n  abstract getSidenavItems(): IListItem[];\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DefaultSidenavService implements SidenavService {\n  public configsJsTable: JsTable<IConfig>;\n\n  constructor(public store$: Store) {\n    this.configsJsTable = this.store$.selectSnapshot(\n      ConfigsState.getConfigsJsTable\n    );\n  }\n  getSidenavItems(): IListItem[] {\n    const resourcesTypesJsTable: JsTable<IResourceType> =\n      this.store$.selectSnapshot(ResourcesTypesState.getResourcesTypesJsTable);\n\n    let sidenavItems: IListItem[] = [];\n\n    resourcesTypesJsTable.allIds.forEach((id: string) => {\n      // If it is a primary type then we have to create a button\n      if (this.configsJsTable.byId[id]?.level === 0) {\n        sidenavItems.push({\n          id,\n          name: this.configsJsTable.byId[id].label,\n          endpoint: resourcesTypesJsTable.byId[id].endpoint,\n          icon: this.configsJsTable.byId[id].icon,\n        });\n      }\n    });\n    return sidenavItems;\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HTTP_INTERCEPTORS, HttpClient } from '@angular/common/http';\nimport { APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport {\n  BrowserModule,\n  REMOVE_STYLES_ON_COMPONENT_DESTROY,\n} from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { NgxsReduxDevtoolsPluginModule } from '@ngxs/devtools-plugin';\nimport { NgxsModule } from '@ngxs/store';\nimport { StateClass } from '@ngxs/store/internals';\nimport {\n  AugmentGlobalTypesHelper,\n  ConfigsService,\n  ConfigsServiceImpl,\n  ConfigsState,\n  DataService,\n  DataServiceImpl,\n  DataState,\n  EnvService,\n  EnvServiceProvider,\n  ErrorState,\n  ErrorsHandlerService,\n  ExternalLinksState,\n  FormService,\n  HeaderState,\n  HomeState,\n  LogoutDialogState,\n  ResourcesTypesService,\n  ResourcesTypesServiceImpl,\n  ResourcesTypesState,\n  RoutingState,\n  UiState,\n  UserState,\n} from '../../../shared';\nimport { DataDetailGuard } from '../features/homepage/resource-page/data-detail/data-detail.guard';\nimport { ResourcePageGuard } from '../features/homepage/resource-page/resource-page.guard';\nimport { AuthModule } from '../shared/auth/auth.module';\nimport { createTranslateLoader } from '../shared/helpers/aot.helper';\nimport { DataActionsHandler } from '../shared/services/data.actions-handler';\nimport { DefaultFormService } from '../shared/services/form.service';\nimport {\n  DEFAULT_TIMEOUT,\n  InterceptorService,\n} from '../shared/services/interceptor.service';\nimport { RoutingService } from '../shared/services/routing.service';\nimport {\n  DefaultSidenavService,\n  SidenavService,\n} from '../shared/services/sidenav.service';\nimport { LANGUAGES } from './injection-tokens';\n\nexport const emptyFactory = () => () => {};\n\nexport const DEFAULT_STATES_CLASSES: StateClass<any>[] = [\n  ConfigsState,\n  ResourcesTypesState,\n  UiState,\n  DataState,\n  UserState,\n  RoutingState,\n  ExternalLinksState,\n  HomeState,\n  HeaderState,\n  ErrorState,\n  LogoutDialogState,\n];\n\n@NgModule({\n  imports: [\n    AuthModule,\n    BrowserModule,\n    BrowserAnimationsModule,\n    TranslateModule.forRoot({\n      loader: {\n        provide: TranslateLoader,\n        useFactory: createTranslateLoader,\n        deps: [HttpClient],\n      },\n    }),\n    NgxsModule.forRoot(DEFAULT_STATES_CLASSES),\n    NgxsReduxDevtoolsPluginModule.forRoot(),\n  ],\n  providers: [\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: InterceptorService,\n      multi: true,\n    },\n    {\n      provide: DEFAULT_TIMEOUT,\n      useValue: 120000,\n    },\n    {\n      provide: REMOVE_STYLES_ON_COMPONENT_DESTROY,\n      useValue: true,\n    },\n    {\n      provide: ErrorHandler,\n      useClass: ErrorsHandlerService,\n    },\n    {\n      provide: LANGUAGES,\n      useValue: ['fr', 'en'],\n    },\n    {\n      provide: MAT_DATE_LOCALE,\n      useValue: EnvServiceProvider.useFactory().ui.dateLocale,\n    },\n    {\n      provide: ResourcesTypesService,\n      useClass: ResourcesTypesServiceImpl,\n    },\n    {\n      provide: ConfigsService,\n      useClass: ConfigsServiceImpl,\n    },\n    {\n      provide: DataService,\n      useClass: DataServiceImpl,\n    },\n    {\n      provide: SidenavService,\n      useClass: DefaultSidenavService,\n    },\n    {\n      provide: APP_INITIALIZER,\n      useFactory: emptyFactory,\n      deps: [DataActionsHandler, AugmentGlobalTypesHelper],\n      multi: true,\n    },\n    {\n      provide: FormService,\n      useClass: DefaultFormService,\n    },\n    EnvService,\n    RoutingService,\n    DataDetailGuard,\n    ResourcePageGuard,\n  ],\n})\nexport class CoreModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ToastrModule } from 'ngx-toastr';\nimport { EnvServiceProvider, SharedModule } from '../../shared';\nimport { AppComponent } from './app.component';\nimport { CoreModule } from './core/core.module';\n\n@NgModule({\n  declarations: [AppComponent],\n  imports: [\n    SharedModule,\n    CoreModule,\n    ToastrModule.forRoot({\n      timeOut: EnvServiceProvider.useFactory().ui.notificationTimeout ?? 5000,\n    }),\n  ],\n})\nexport class AppModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  ActionsTypes,\n  EUserAction,\n  IActions,\n  IBtnLabel,\n  IUiEntryIds,\n  getSucceededNotifications,\n} from '../../../../shared';\nimport { ToastrService } from 'ngx-toastr';\n\nexport function getBtnLabel(\n  actions: IActions,\n  action: ActionsTypes\n): IBtnLabel {\n  let btnLabel: IBtnLabel = null;\n  switch (action.actionType) {\n    case EUserAction.TREE_ADD:\n      btnLabel = action.isAddingDifferentTypeChild\n        ? actions.primitives.addChildren\n        : actions.primitives.add;\n      break;\n    case EUserAction.TREE_DELETE:\n      if (action.removedNodesIds.length > 1) {\n        btnLabel = actions.primitives.deleteChildren;\n      } else if (\n        action.removedNodesIds.length === 1 &&\n        action.removedNodesIds[0] !== action.triggerNodeId\n      ) {\n        btnLabel = actions.primitives.deleteChild;\n      } else {\n        btnLabel = actions.primitives.delete;\n      }\n      break;\n    case EUserAction.TREE_MOVE_NODE:\n      btnLabel = actions.primitives.moveNode;\n      break;\n    case EUserAction.LIST_ADD:\n      btnLabel = actions.primitives.add;\n      break;\n    case EUserAction.LIST_DELETE:\n      btnLabel = actions.primitives.delete;\n      break;\n    default:\n      break;\n  }\n  return btnLabel;\n}\n\nexport function displayedSuccessNotification(\n  toastrService: ToastrService,\n  actions: IActions,\n  action: ActionsTypes,\n  succeededElements: IUiEntryIds[]\n): void {\n  const btnLabel: IBtnLabel = getBtnLabel(actions, action);\n  const message: string = getSucceededNotifications(\n    succeededElements,\n    btnLabel\n  );\n\n  toastrService.success(message, null, {\n    positionClass: 'toast-bottom-right',\n  });\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  DefaultUrlSerializer,\n  PRIMARY_OUTLET,\n  UrlSegment,\n  UrlSegmentGroup,\n  UrlSerializer,\n  UrlTree,\n} from '@angular/router';\n\nexport class CustomUrlSerializer implements UrlSerializer {\n  private static ENABLE_PATH_ENCODING = false;\n\n  parse(url: any): UrlTree {\n    let dus = new DefaultUrlSerializer();\n    return dus.parse(url);\n  }\n\n  /** Converts a `UrlTree` into a url */\n  serialize(tree: UrlTree): string {\n    const segment = `/${serializeSegment(\n      tree.root,\n      true,\n      CustomUrlSerializer.ENABLE_PATH_ENCODING\n    )}`;\n    const query = serializeQueryParams(tree.queryParams);\n    const fragment =\n      typeof tree.fragment === `string`\n        ? `#${encodeUriFragment(tree.fragment)}`\n        : '';\n\n    return `${segment}${query}${fragment}`;\n  }\n}\n\n/**\n * All the following code comes from\n * https://github.com/angular/angular/blob/bdf57ab14a310f6e6811d9f990cbbd3612bde538/packages/router/src/url_tree.ts\n */\nexport function serializePaths(\n  segment: UrlSegmentGroup,\n  enablePathEncoding: boolean\n): string {\n  return segment.segments\n    .map((p) => serializePath(p, enablePathEncoding))\n    .join('/');\n}\n\nfunction serializeSegment(\n  segment: UrlSegmentGroup,\n  root: boolean,\n  enablePathEncoding = true\n): string {\n  if (!segment.hasChildren()) {\n    return serializePaths(segment, enablePathEncoding);\n  }\n\n  if (root) {\n    const primary = segment.children[PRIMARY_OUTLET]\n      ? serializeSegment(\n          segment.children[PRIMARY_OUTLET],\n          false,\n          enablePathEncoding\n        )\n      : '';\n    const children: string[] = [];\n\n    forEach(segment.children, (v: UrlSegmentGroup, k: string) => {\n      if (k !== PRIMARY_OUTLET) {\n        children.push(`${k}:${serializeSegment(v, false, enablePathEncoding)}`);\n      }\n    });\n\n    return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n  } else {\n    const children = mapChildrenIntoArray(\n      segment,\n      (v: UrlSegmentGroup, k: string) => {\n        if (k === PRIMARY_OUTLET) {\n          return [\n            serializeSegment(\n              segment.children[PRIMARY_OUTLET],\n              false,\n              enablePathEncoding\n            ),\n          ];\n        }\n\n        return [`${k}:${serializeSegment(v, false, enablePathEncoding)}`];\n      }\n    );\n\n    // use no parenthesis if the only child is a primary outlet route\n    if (\n      Object.keys(segment.children).length === 1 &&\n      segment.children[PRIMARY_OUTLET] != null\n    ) {\n      return `${serializePaths(segment, enablePathEncoding)}/${children[0]}`;\n    }\n\n    return `${serializePaths(segment, enablePathEncoding)}/(${children.join(\n      '//'\n    )})`;\n  }\n}\n\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s: string): string {\n  return encodeURIComponent(s)\n    .replace(/%40/g, '@')\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',');\n}\n\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriQuery(s: string): string {\n  return encodeUriString(s).replace(/%3B/gi, ';');\n}\n\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriFragment(s: string): string {\n  return encodeURI(s);\n}\n\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriSegment(s: string): string {\n  return encodeUriString(s)\n    .replace(/\\(/g, '%28')\n    .replace(/\\)/g, '%29')\n    .replace(/%26/gi, '&');\n}\n\nexport function serializePath(path: UrlSegment, enablePathEncoding): string {\n  let urlPath: string = enablePathEncoding\n    ? encodeUriSegment(path.path)\n    : path.path;\n  return `${urlPath}${serializeMatrixParams(path.parameters)}`;\n}\n\nfunction serializeMatrixParams(params: { [key: string]: string }): string {\n  return Object.keys(params)\n    .map((key) => `;${encodeUriSegment(key)}=${encodeUriSegment(params[key])}`)\n    .join('');\n}\n\nfunction serializeQueryParams(params: { [key: string]: any }): string {\n  const strParams: string[] = Object.keys(params)\n    .map((name) => {\n      const value = params[name];\n      return Array.isArray(value)\n        ? value\n            .map((v) => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`)\n            .join('&')\n        : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n    })\n    .filter((s) => !!s);\n\n  return strParams.length ? `?${strParams.join('&')}` : '';\n}\n\nexport function mapChildrenIntoArray<T>(\n  segment: UrlSegmentGroup,\n  fn: (v: UrlSegmentGroup, k: string) => T[]\n): T[] {\n  let res: T[] = [];\n  forEach(segment.children, (child: UrlSegmentGroup, childOutlet: string) => {\n    if (childOutlet === PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  forEach(segment.children, (child: UrlSegmentGroup, childOutlet: string) => {\n    if (childOutlet !== PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  return res;\n}\n\nexport function forEach<V>(\n  map: { [key: string]: V },\n  callback: (v: V, k: string) => void\n): void {\n  for (const prop in map) {\n    if (prop in map) {\n      callback(map[prop], prop);\n    }\n  }\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable, filter, map, tap, withLatestFrom } from 'rxjs';\nimport {\n  ConfigsState,\n  DataState,\n  EResourceComponent,\n  EnvService,\n  HeaderState,\n  IBtnLabel,\n  IConfig,\n  ICurrentUserConfig,\n  IDataDetail,\n  IEntryIds,\n  IFormData,\n  IResourceType,\n  ITabProps,\n  JsTable,\n  ResourcesTypesState,\n  UserState,\n  setTabTitle,\n} from '../../../../shared';\nimport { RoutingService } from '../services/routing.service';\nimport { getFormDataAttributes } from './form.helper';\n\nexport class DataDetailViewProperties {\n  @Select(DataState.getDataDetail) dataDetail$: Observable<any>;\n\n  @Select(DataState.getSelectedResourceTypeId)\n  selectedResourceTypeId$: Observable<string>;\n\n  @Select(DataState.getSelectedEntryIds)\n  selectedEntryIds$: Observable<IEntryIds>;\n\n  @Select(DataState.getSelectedEntryParentIds)\n  selectedEntryParentIds$: Observable<IEntryIds>;\n\n  @Select(DataState.isFetchingDataDetailSuccess)\n  isFetchingDataDetailSuccess$: Observable<boolean>;\n\n  @Select(DataState.isFetchingDataDetail)\n  isFetchingDataDetail$: Observable<boolean>;\n\n  public dataDetail: any;\n  public editAction: IBtnLabel;\n  public configs: JsTable<IConfig>;\n  public currentUser: ICurrentUserConfig;\n  public resourcesTypes: JsTable<IResourceType>;\n  public parentDataComponent: string;\n  public selectedResourceTypeId: string;\n  public selectedEntryParentIds: IEntryIds;\n  public selectedEntryIds: IEntryIds;\n  public tab: ITabProps;\n  public areSimpleAttributesProcessed = false;\n  public areArrayAttributesProcessed = false;\n  public endpoint: string;\n  public editableAttributesFromBackend: string[] = [];\n  public editFormAttributes: IFormData[] = [];\n  public componentNameType = EResourceComponent;\n  public isUpdatingDataDetail = false;\n\n  constructor(\n    public store$: Store,\n    public toastrService: ToastrService,\n    public routingService: RoutingService,\n    public titleService: Title,\n    public envService: EnvService\n  ) {\n    this.tab = this.store$.selectSnapshot(HeaderState.getTabProps);\n    this.configs = this.store$.selectSnapshot(ConfigsState.getConfigsJsTable);\n    this.resourcesTypes = this.store$.selectSnapshot(\n      ResourcesTypesState.getResourcesTypesJsTable\n    );\n    this.currentUser = this.store$.selectSnapshot(\n      UserState.getCurrentUserDetail\n    );\n  }\n\n  initTabTitle(): Observable<NavigationEnd> {\n    return this.routingService.routerNavigationEnd$.pipe(\n      withLatestFrom(\n        this.selectedResourceTypeId$,\n        this.selectedEntryIds$,\n        this.selectedEntryParentIds$\n      ),\n      map(\n        ([\n          routing,\n          selectedResourceTypeId,\n          selectedEntryIds,\n          selectedEntryParentIds,\n        ]) => {\n          setTabTitle(\n            this.tab,\n            this.titleService,\n            undefined,\n            this.configs.byId[selectedResourceTypeId],\n            selectedEntryParentIds,\n            selectedEntryIds\n          );\n          return routing;\n        }\n      )\n    );\n  }\n\n  initDataDetail(): Observable<any> {\n    return this.dataDetail$.pipe(\n      filter((dataDetail) => !!dataDetail),\n      withLatestFrom(this.selectedEntryIds$),\n      filter(\n        ([_dataDetail, selectedEntryIds]) =>\n          !!selectedEntryIds &&\n          this.selectedEntryIds?.id !== selectedEntryIds.id\n      ),\n      withLatestFrom(\n        this.selectedResourceTypeId$,\n        this.selectedEntryParentIds$\n      ),\n      tap(\n        ([\n          [dataDetail, selectedEntryIds],\n          selectedResourceTypeId,\n          selectedEntryParentIds,\n        ]) => {\n          this.dataDetail = dataDetail;\n          const config: IConfig = this.configs.byId[selectedResourceTypeId];\n          this.selectedResourceTypeId = selectedResourceTypeId;\n          this.selectedEntryParentIds = selectedEntryParentIds;\n          this.selectedEntryIds = selectedEntryIds;\n          this.editableAttributesFromBackend =\n            this.dataDetail.meta.modifiableAttributes;\n          this.editAction = config.actions.primitives.edit;\n          this.parentDataComponent = config.component;\n          this.endpoint =\n            this.resourcesTypes.byId[selectedResourceTypeId].endpoint;\n        }\n      )\n    );\n  }\n\n  handleFetchingDetail(): Observable<boolean> {\n    return this.isFetchingDataDetail$.pipe(\n      tap((isFetchingDataDetail: boolean) => {\n        if (isFetchingDataDetail) {\n          this.dataDetail = null;\n          this.areSimpleAttributesProcessed = false;\n          this.areArrayAttributesProcessed = false;\n          this.editFormAttributes = [];\n        }\n      })\n    );\n  }\n\n  displaySuccessToast(message: string): void {\n    this.toastrService.success(message, null, {\n      positionClass: 'toast-bottom-right',\n    });\n    this.isUpdatingDataDetail = false;\n  }\n\n  setPropertiesOnSimpleAttributesProcessed(\n    dataDetailAttributes: IDataDetail[],\n    requiredFieldOnUpdate: { id: string; value: string } = null\n  ): void {\n    this.editFormAttributes = getFormDataAttributes(\n      this.configs.byId[this.selectedResourceTypeId].attributes,\n      dataDetailAttributes,\n      this.editableAttributesFromBackend,\n      this.envService.ui.displayDateFormat,\n      requiredFieldOnUpdate\n    );\n    this.areSimpleAttributesProcessed = true;\n  }\n\n  whenSimpleAttributesProcessed(dataDetailAttributes: IDataDetail[]): void {\n    if (!!dataDetailAttributes) {\n      this.setPropertiesOnSimpleAttributesProcessed(dataDetailAttributes);\n    }\n  }\n\n  whenArrayAttributesProcessed(areProcessed: boolean): void {\n    this.areArrayAttributesProcessed = areProcessed;\n  }\n\n  updateEntryAttributes(event: any): void {\n    this.isUpdatingDataDetail = true;\n    this.dataDetail = event;\n  }\n}\n\nexport function updateAttributeValue(\n  attributesValues: IDataDetail[],\n  updatedValue: IDataDetail,\n  attributeIndex: number,\n  attributeIndexOnAdd: number\n): void {\n  if (attributeIndex !== -1) {\n    attributesValues[attributeIndex] = updatedValue;\n  } else {\n    attributesValues.splice(attributeIndexOnAdd, 0, updatedValue);\n  }\n}\n\nexport function getDataDetailIndexForNewField(\n  detailAttributesIds: string[],\n  orderKeysByAttributeId: string[],\n  attributeId: string\n): number {\n  let newFieldIndex = null;\n  let i = 0;\n  let detailAttributeIndex = -1;\n  while (newFieldIndex === null) {\n    if (detailAttributesIds.includes(orderKeysByAttributeId[i])) {\n      detailAttributeIndex++;\n    }\n    if (orderKeysByAttributeId[i] === attributeId) {\n      newFieldIndex = detailAttributeIndex + 1;\n    }\n    i++;\n  }\n  return newFieldIndex;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  DataViewProperties,\n  IAttribute,\n  IColumn,\n  IConfig,\n  IGenericArrayColumn,\n} from '../../../../shared';\n\nexport function getViewProperties(\n  resourceTypeConfig: IConfig,\n  isClickableRow = true\n): DataViewProperties {\n  let dataViewProperties = new DataViewProperties();\n  let displayedColumns: string[] = [];\n  let columns: IGenericArrayColumn[] = [];\n  if (!!resourceTypeConfig.props?.columns) {\n    resourceTypeConfig.props.columns.forEach((column: IColumn) => {\n      const columnLabelFromAttribute: string =\n        resourceTypeConfig.attributes.find(\n          (attribute: IAttribute) => column.id === attribute.modelRef\n        ).value.label.value.long;\n      displayedColumns.push(column.id);\n      columns.push({\n        id: column.id,\n        label: column.label || columnLabelFromAttribute,\n        isBackendLinkObject: column.isBackendLinkObject,\n        width: column.width,\n        type: column.type,\n      });\n    });\n  }\n  dataViewProperties.setDisplayedColumns(displayedColumns);\n  dataViewProperties.setColumns(columns);\n  dataViewProperties.setAccessibility(resourceTypeConfig.accessibility.array);\n  dataViewProperties.setIsClickableRow(isClickableRow);\n  return dataViewProperties;\n}\n\nexport function createUUID(): string {\n  let dt: number = new Date().getTime();\n  const uuid: string = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n    /[xy]/g,\n    (c) => {\n      const r: number = (dt + Math.random() * 16) % 16 | 0;\n      dt = Math.floor(dt / 16);\n      return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n    }\n  );\n  return uuid;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Store } from '@ngxs/store';\nimport {\n  IData,\n  IResourceType,\n  JsTable,\n  ResourcesTypesState,\n} from '../../../../shared';\n\nexport function getEmptyResources(store: Store, resourceTypeId: string): IData {\n  const resourcesTypes: JsTable<IResourceType> = store.selectSnapshot(\n    ResourcesTypesState.getResourcesTypesJsTable\n  );\n\n  return {\n    schemas: [resourcesTypes.byId[resourceTypeId].schema],\n    totalResults: 0,\n    itemsPerPage: 0,\n    startIndex: 0,\n    Resources: [],\n  };\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './aot.helper';\nexport * from './configs.helper';\nexport * from './custom-url-serializer';\nexport * from './data-detail.helper';\nexport * from './data-list.helper';\nexport * from './data-table.helper';\nexport * from './data-tree.helper';\nexport * from './form.helper';\nexport * from './guards.helper';\nexport * from './resources.helper';\nexport * from './search.helper';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  FormDataValueTypes,\n  IDataDetail,\n  IDataTableCellElement,\n} from '../../../../shared';\n\nexport interface ITreeConfig {\n  endpoint: string;\n  resourceTypeId: string;\n}\n\nexport interface IListConfig {\n  endpoint: string;\n  resourceTypeId: string;\n}\n\nexport interface IAdvancedSearchFieldProperties {\n  componentName: string;\n  inputType?: string;\n  dataValue: FormDataValueTypes;\n}\n\nexport interface IMapsForDataTableCellElement {\n  attributesMapsValueId: {\n    [attributeId: string]: Map<string, string>;\n  };\n  attributesMapsIdCellElement: {\n    [attributeId: string]: Map<string, IDataTableCellElement>;\n  };\n}\n\nexport interface IDetailView {\n  hasEditableAttributes: boolean;\n  dataDetail: IDataDetail[];\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { IResourceTypeProperties } from '../../../../shared';\n\nexport interface IResourcesTypesProperties {\n  [resourceType: string]: IResourceTypeProperties;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport interface IListItem {\n  id: string;\n  name: string;\n  endpoint: string;\n  icon: string;\n}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './data.interface';\nexport * from './resources-types.interface';\nexport * from './ui.interface';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './form.service';\nexport * from './interceptor.service';\nexport * from './routing.service';\nexport * from './sidenav.service';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { Store } from '@ngxs/store';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport {\n  Data,\n  ICurrentUserConfig,\n  IEntryIds,\n  IHeaderConfig,\n  ILogoutDialogConfig,\n  Ui,\n  User,\n  isLargeScreen,\n} from '../../../../../shared';\nimport { AuthService } from '../../../shared/auth/auth.service.interface';\n\n@Component({\n  selector: 'dm-header',\n  templateUrl: './header.component.html',\n  styleUrls: ['./header.component.scss'],\n})\nexport class HeaderComponent implements OnDestroy, OnInit {\n  private _onDestroy$ = new Subject<void>();\n\n  @Input() currentUserDetail: ICurrentUserConfig;\n  @Input() isSidenavCollapsed: boolean;\n  @Input() headerDetail: IHeaderConfig;\n  @Input() logoutDialogDetail: ILogoutDialogConfig;\n\n  public isLargeScreen: boolean;\n\n  constructor(\n    private _store$: Store,\n    private _authService: AuthService,\n    private _dialog: MatDialog\n  ) {}\n\n  ngOnInit(): void {\n    isLargeScreen(this._store$)\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((isLargeScreen: boolean) => (this.isLargeScreen = isLargeScreen))\n      )\n      .subscribe();\n  }\n\n  toggleSidenav(): void {\n    this._store$.dispatch(new Ui.ToggleSidenav());\n  }\n\n  openLogoutDialog(): void {\n    const dialogRef = this._dialog.open(LogoutDialogComponent, {\n      data: { logoutDialogDetail: this.logoutDialogDetail },\n    });\n\n    dialogRef\n      .afterClosed()\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((result) => {\n          if (result) {\n            this._authService.logout();\n            this._store$.dispatch(new User.Disconnect());\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  getCurrentUserDetail(connectedUserIds: IEntryIds): void {\n    this._store$.dispatch(\n      new Data.SetSelectedEntryIds({\n        ids: connectedUserIds,\n      })\n    );\n  }\n}\n\n@Component({\n  selector: 'dm-logout-dialog',\n  templateUrl: './logout-dialog.component.html',\n  styleUrls: ['./logout-dialog.component.scss'],\n})\nexport class LogoutDialogComponent {\n  constructor(\n    @Inject(MAT_DIALOG_DATA)\n    public data: { logoutDialogDetail: ILogoutDialogConfig }\n  ) {}\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<header *ngIf=\"currentUserDetail\" fxLayout=\"column\" fxFlex>\n  <mat-toolbar class=\"header-toolbar mat-elevation-z4\">\n    <ng-container *ngIf=\"headerDetail\">\n      <ng-container *ngIf=\"!!headerDetail.sidenavBtn\">\n        <button\n          mat-button\n          [attr.aria-controls]=\"headerDetail.sidenavBtn.ariaControls\"\n          [attr.aria-label]=\"\n            isSidenavCollapsed\n              ? headerDetail.sidenavBtn.ariaLabel.collapsed\n              : headerDetail.sidenavBtn.ariaLabel.expanded\n          \"\n          [attr.aria-expanded]=\"!isSidenavCollapsed\"\n          (click)=\"toggleSidenav()\"\n          class=\"btn-sidenav-toggle\"\n        >\n          <mat-icon\n            aria-hidden=\"true\"\n            [ngClass]=\"{ 'rotate-90': isSidenavCollapsed }\"\n            >menu</mat-icon\n          >\n        </button>\n      </ng-container>\n      <ng-container *ngIf=\"!!headerDetail?.logoBtn\">\n        <button\n          mat-button\n          [attr.aria-label]=\"headerDetail.logoBtn.ariaLabel\"\n          [routerLink]=\"['/home']\"\n          class=\"btn-logo\"\n        >\n          <picture fxLayoutAlign=\"start center\">\n            <source [srcset]=\"headerDetail.logoBtn.path\" />\n            <img\n              draggable=\"false\"\n              src=\"assets/images/loading-animation.gif\"\n              [alt]=\"headerDetail.logoBtn.alt\"\n            />\n            <span *ngIf=\"isLargeScreen\">{{ headerDetail.logoBtn.label }}</span>\n          </picture>\n        </button>\n      </ng-container>\n      <picture\n        *ngIf=\"!!headerDetail?.logo && isLargeScreen\"\n        fxLayoutAlign=\"start center\"\n        class=\"logo\"\n      >\n        <source [srcset]=\"headerDetail.logo.path\" />\n        <img\n          draggable=\"false\"\n          src=\"assets/images/loading-animation.gif\"\n          [alt]=\"headerDetail.logo.alt\"\n        />\n      </picture>\n      <picture\n        *ngIf=\"!!headerDetail?.logo1 && isLargeScreen\"\n        fxLayoutAlign=\"start center\"\n        class=\"logo1\"\n      >\n        <source [srcset]=\"headerDetail.logo1.path\" />\n        <img\n          draggable=\"false\"\n          src=\"assets/images/loading-animation.gif\"\n          [alt]=\"headerDetail.logo1.alt\"\n        />\n      </picture>\n      <div fxFlex></div>\n      <ng-container *ngIf=\"!!headerDetail.accountDiv\">\n        <div fxLayout=\"row\" fxLayoutAlign=\"end center\" class=\"div-profile-text\">\n          <span\n            >{{ headerDetail.accountDiv.labelPrefix }},\n            {{ currentUserDetail.displayName }}</span\n          >\n        </div>\n        <button\n          #menuTrigger=\"matMenuTrigger\"\n          mat-mini-fab\n          fxLayoutAlign=\"center center\"\n          type=\"button\"\n          [attr.aria-label]=\"\n            headerDetail.accountDiv.ariaLabelPrefix +\n            ' ' +\n            currentUserDetail.displayName\n          \"\n          [matMenuTriggerFor]=\"accountMenu\"\n          class=\"btn-account\"\n        >\n          <div [ngClass]=\"{ 'account-wrapper': currentUserDetail.photo }\">\n            <img\n              *ngIf=\"currentUserDetail?.photo; else defaultIcon\"\n              #currentImg\n              draggable=\"false\"\n              [alt]=\"\n                headerDetail.accountDiv.altPrefix +\n                ' ' +\n                currentUserDetail.displayName\n              \"\n              [src]=\"'data:image/jpeg;base64,' + currentUserDetail.photo\"\n              [ngClass]=\"\n                currentImg.width / currentImg.height > 1\n                  ? 'detail-img-landscape'\n                  : 'detail-img-portrait'\n              \"\n            />\n            <ng-template #defaultIcon>\n              <mat-icon\n                aria-hidden=\"true\"\n                [ngClass]=\"{\n                  'toggle-account-menu-icon': menuTrigger.menuOpen\n                }\"\n                class=\"account-icon\"\n                >person</mat-icon\n              >\n            </ng-template>\n            <mat-icon\n              aria-hidden=\"true\"\n              [ngClass]=\"{\n                'toggle-account-arrow-icon': menuTrigger.menuOpen\n              }\"\n              class=\"arrow-icon\"\n              >arrow_drop_down</mat-icon\n            >\n          </div>\n        </button>\n      </ng-container>\n      <mat-menu #accountMenu=\"matMenu\" backdropClass=\"account-menu\">\n        <ul>\n          <ng-container *ngIf=\"!!headerDetail.profileBtn\">\n            <li>\n              <mat-nav-list fxLayout=\"column\" class=\"profile-list-btn\">\n                <a\n                  mat-menu-item\n                  draggable=\"false\"\n                  fxLayout=\"row\"\n                  fxLayoutAlign=\"start center\"\n                  [attr.aria-label]=\"headerDetail.profileBtn.ariaLabel\"\n                  [routerLink]=\"['/home/users/' + currentUserDetail.userName]\"\n                  (click)=\"\n                    getCurrentUserDetail({\n                      id: currentUserDetail.id,\n                      externalId: currentUserDetail.userName\n                    })\n                  \"\n                >\n                  <mat-icon aria-hidden=\"true\">person</mat-icon>\n                  <span class=\"profile-text\">{{\n                    headerDetail.profileBtn.label\n                  }}</span>\n                </a>\n              </mat-nav-list>\n            </li>\n          </ng-container>\n          <ng-container *ngIf=\"!!headerDetail.logoutBtn\">\n            <li>\n              <mat-action-list fxLayout=\"column\" class=\"logout-list-btn\">\n                <button\n                  mat-menu-item\n                  draggable=\"false\"\n                  fxLayout=\"row\"\n                  fxLayoutAlign=\"start center\"\n                  [attr.aria-label]=\"headerDetail.logoutBtn.ariaLabel\"\n                  (click)=\"openLogoutDialog()\"\n                >\n                  <mat-icon aria-hidden=\"true\">exit_to_app</mat-icon>\n                  <span class=\"logout-text\">{{\n                    headerDetail.logoutBtn.label\n                  }}</span>\n                </button>\n              </mat-action-list>\n            </li>\n          </ng-container>\n        </ul>\n      </mat-menu>\n    </ng-container>\n  </mat-toolbar>\n</header>\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<h3 mat-dialog-title class=\"title\">{{ data.logoutDialogDetail.title }}</h3>\n<mat-dialog-content>\n  <p>{{ data.logoutDialogDetail.content }}</p>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n  <button\n    mat-raised-button\n    color=\"accent\"\n    [mat-dialog-close]=\"false\"\n    [attr.aria-label]=\"data.logoutDialogDetail.cancelBtn.ariaLabel\"\n    cdkFocusInitial\n  >\n    {{ data.logoutDialogDetail.cancelBtn.label }}\n  </button>\n  <button\n    mat-raised-button\n    color=\"warn\"\n    [mat-dialog-close]=\"true\"\n    [attr.aria-label]=\"data.logoutDialogDetail.logoutBtn.ariaLabel\"\n  >\n    {{ data.logoutDialogDetail.logoutBtn.label }}\n  </button>\n</mat-dialog-actions>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { Component, HostBinding, OnDestroy, OnInit } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, Subject, takeUntil, tap } from 'rxjs';\nimport {\n  DataState,\n  EnvService,\n  ExternalLinksState,\n  HeaderState,\n  HomeState,\n  ICurrentUserConfig,\n  IExternalLinksConfig,\n  IHeaderConfig,\n  IHomepageConfig,\n  ILogoutDialogConfig,\n  ITabProps,\n  LogoutDialogState,\n  UiState,\n  UserState,\n  fadeIn,\n  setTabTitle,\n} from '../../../../shared';\nimport { IListItem } from '../../shared/interfaces/ui.interface';\nimport { SidenavService } from '../../shared/services/sidenav.service';\n\n@Component({\n  selector: 'dm-homepage',\n  templateUrl: './homepage.component.html',\n  styleUrls: ['./homepage.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class HomepageComponent implements OnInit, OnDestroy {\n  private _onDestroy$ = new Subject<void>();\n\n  private _tabPrefix: ITabProps;\n\n  private _homepageTabTitle: string;\n\n  @HostBinding('class') componentCssClass;\n\n  @Select(UiState.getSidenavMode) sidenavMode$: Observable<string>;\n\n  @Select(DataState.getSelectedResourceTypeId)\n  selectedResourceTypeId$: Observable<string>;\n\n  @Select(ExternalLinksState.getExternalLinksDetail)\n  externalLinks$: Observable<IExternalLinksConfig>;\n\n  @Select(HomeState.getHomeDetail) homepage$: Observable<IHomepageConfig>;\n\n  @Select(UiState.getTheme) theme$: Observable<string>;\n\n  @Select(UiState.getIsSidenavCollapsed)\n  isSidenavCollapsed$: Observable<boolean>;\n\n  @Select(UserState.getCurrentUserDetail)\n  currentUserDetail$: Observable<ICurrentUserConfig>;\n\n  @Select(HeaderState.getHeaderDetail) headerDetail$: Observable<IHeaderConfig>;\n\n  @Select(LogoutDialogState.getLogoutDialogDetail)\n  logoutDialogDetail$: Observable<ILogoutDialogConfig>;\n\n  // Allow to have buttons based on LDAP primary types\n  public allMainResourcesTypes: IListItem[] = [];\n\n  // Boolean indicating when user is leaving homepage so the interface will not display in sidenav-content big black buttons anymore\n  public leaveHomepage = false;\n\n  public currentTheme = 'dm-theme';\n\n  public hasSupportSubscription: boolean;\n\n  public sidenavItems: IListItem[] = [];\n\n  constructor(\n    public overlayContainer: OverlayContainer,\n    private _titleService: Title,\n    private _store$: Store,\n    private _router: Router,\n    private _env: EnvService,\n    private _sidenavService: SidenavService\n  ) {\n    this.hasSupportSubscription = this._env.hasSupportSubscription;\n  }\n\n  ngOnInit(): void {\n    this.theme$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((theme: string) => {\n          if (theme !== '') {\n            this.currentTheme = theme.toLowerCase();\n            this.componentCssClass = theme;\n            const classList =\n              this.overlayContainer.getContainerElement().classList;\n            const toRemove = Array.from(classList).filter((item: string) =>\n              item.includes('-theme')\n            );\n            classList.remove(...toRemove);\n            classList.add(this.currentTheme);\n          }\n        })\n      )\n      .subscribe();\n\n    this.sidenavItems = this._sidenavService.getSidenavItems();\n\n    this._tabPrefix = this._store$.selectSnapshot(HeaderState.getTabProps);\n    this._homepageTabTitle = this._store$.selectSnapshot(HomeState.getTabTitle);\n    setTabTitle(this._tabPrefix, this._titleService, this._homepageTabTitle);\n  }\n\n  onActivate(event: any): void {\n    if (event !== undefined) {\n      this.leaveHomepage = true;\n    }\n  }\n\n  onDeactivate(event: any): void {\n    if (event !== undefined) {\n      this.leaveHomepage = false;\n      setTabTitle(this._tabPrefix, this._titleService, this._homepageTabTitle);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  isResourceTypeSelected(endpoint: string): boolean {\n    return this._router.url.includes('/home/' + endpoint);\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div fxLayout=\"column\" class=\"homepage-container\">\n  <dm-header\n    [currentUserDetail]=\"currentUserDetail$ | async\"\n    [isSidenavCollapsed]=\"isSidenavCollapsed$ | async\"\n    [headerDetail]=\"headerDetail$ | async\"\n    [logoutDialogDetail]=\"logoutDialogDetail$ | async\"\n  ></dm-header>\n  <mat-sidenav-container\n    *ngIf=\"{\n      selectedResourceTypeId: selectedResourceTypeId$ | async,\n      sidenavMode: sidenavMode$ | async,\n      homepageDetail: homepage$ | async\n    } as homepageObservables\"\n  >\n    <mat-sidenav\n      fxLayout=\"column\"\n      position=\"start\"\n      role=\"navigation\"\n      mode=\"side\"\n      opened\n      [ngClass]=\"\n        homepageObservables.sidenavMode === 'sidenav'\n          ? 'lg-sidenav'\n          : 'sm-sidenav'\n      \"\n      [disableClose]=\"true\"\n    >\n      <div fxLayout=\"column\" fxFlex class=\"sidenav-container\">\n        <mat-nav-list fxLayout=\"column\" fxFlex>\n          <nav role=\"navigation\" fxLayout=\"column\" fxFlex>\n            <div\n              fxLayout=\"column\"\n              fxLayoutAlign=\"start center\"\n              class=\"sidenav-resources\"\n            >\n              <ul>\n                <li *ngFor=\"let sidenavItem of sidenavItems\">\n                  <a\n                    mat-list-item\n                    draggable=\"false\"\n                    routerLinkActive=\"active-link\"\n                    [attr.aria-label]=\"\n                      homepageObservables.sidenavMode !== 'sidenav'\n                        ? sidenavItem.name\n                        : ''\n                    \"\n                    [routerLink]=\"\n                      isResourceTypeSelected(sidenavItem.endpoint)\n                        ? []\n                        : ['/home', sidenavItem.endpoint]\n                    \"\n                    [ngClass]=\"{\n                      'sidenav-collapsed':\n                        homepageObservables.sidenavMode !== 'sidenav'\n                    }\"\n                    class=\"ldap-type-item\"\n                  >\n                    <mat-icon aria-hidden=\"true\">{{\n                      sidenavItem.icon\n                    }}</mat-icon>\n                    <span\n                      *ngIf=\"homepageObservables?.sidenavMode === 'sidenav'\"\n                      class=\"ldap-type-item-name\"\n                      >{{ sidenavItem.name }}</span\n                    >\n                  </a>\n                </li>\n              </ul>\n            </div>\n\n            <div fxFlex></div>\n            <mat-divider></mat-divider>\n\n            <div\n              *ngIf=\"externalLinks$ | async as externalLinksDetail\"\n              fxLayout=\"column\"\n              fxLayoutAlign=\"end center\"\n              class=\"sidenav-external-links\"\n            >\n              <ul>\n                <li *ngIf=\"!!externalLinksDetail?.userGuide\">\n                  <a\n                    mat-list-item\n                    draggable=\"false\"\n                    target=\"_blank\"\n                    [attr.aria-label]=\"externalLinksDetail.userGuide.ariaLabel\"\n                    [href]=\"externalLinksDetail.userGuide.link\"\n                    class=\"external-link-item\"\n                    fxLayoutAlign=\"start center\"\n                  >\n                    <mat-icon>{{\n                      externalLinksDetail.userGuide.icon\n                    }}</mat-icon>\n                    <span\n                      *ngIf=\"homepageObservables?.sidenavMode === 'sidenav'\"\n                      class=\"external-link-item-name\"\n                    >\n                      {{ externalLinksDetail.userGuide.label }}\n                    </span>\n                  </a>\n                </li>\n                <li *ngIf=\"!!externalLinksDetail?.rgaaChart\">\n                  <a\n                    mat-list-item\n                    target=\"_blank\"\n                    draggable=\"false\"\n                    [attr.aria-label]=\"externalLinksDetail.rgaaChart.ariaLabel\"\n                    [href]=\"externalLinksDetail.rgaaChart.link\"\n                    class=\"external-link-item\"\n                    fxLayoutAlign=\"start center\"\n                  >\n                    <mat-icon aria-hidden=\"true\">{{\n                      externalLinksDetail.rgaaChart.icon\n                    }}</mat-icon>\n                    <span\n                      *ngIf=\"homepageObservables?.sidenavMode === 'sidenav'\"\n                      class=\"external-link-item-name\"\n                    >\n                      {{ externalLinksDetail.rgaaChart.label }}\n                    </span>\n                  </a>\n                </li>\n              </ul>\n            </div>\n          </nav>\n          <mat-divider *ngIf=\"hasSupportSubscription\"></mat-divider>\n        </mat-nav-list>\n\n        <ng-container *ngIf=\"hasSupportSubscription\">\n          <picture\n            *ngIf=\"\n              homepageObservables?.sidenavMode === 'sidenav';\n              else smallSidenavFooter\n            \"\n            fxLayout=\"column\"\n            fxLayoutAlign=\"start center\"\n            class=\"linagora-logo\"\n          >\n            <span class=\"label\">LinID Directory Manager</span>\n            <source srcset=\"assets/images/linagora-logo.png\" type=\"image/png\" />\n            <img\n              draggable=\"false\"\n              src=\"assets/images/loading-animation.gif\"\n              [alt]=\"homepageObservables.homepageDetail.linagoraLogoAlt\"\n            />\n          </picture>\n          <ng-template #smallSidenavFooter>\n            <picture\n              fxLayout=\"column\"\n              fxLayoutAlign=\"start center\"\n              class=\"sm-linagora-logo\"\n            >\n              <source\n                srcset=\"assets/images/sm-linagora-logo.png\"\n                type=\"image/png\"\n              />\n              <img\n                draggable=\"false\"\n                src=\"assets/images/loading-animation.gif\"\n                [alt]=\"homepageObservables.homepageDetail.linagoraLogoAlt\"\n              />\n            </picture>\n          </ng-template>\n        </ng-container>\n      </div>\n    </mat-sidenav>\n\n    <mat-sidenav-content\n      fxLayout=\"column\"\n      fxFlex\n      role=\"main\"\n      [ngClass]=\"!leaveHomepage ? 'content-with-img' : 'content-without-img'\"\n      [style.marginLeft.px]=\"\n        homepageObservables.sidenavMode === 'sidenav' ? '250' : '56'\n      \"\n    >\n      <div\n        *ngIf=\"!leaveHomepage\"\n        [@fadeIn]=\"!leaveHomepage\"\n        fxLayout=\"column\"\n        class=\"homepage-sidenav-content\"\n      >\n        <div\n          fxLayout=\"column\"\n          fxLayoutAlign=\"center center\"\n          class=\"homepage-container\"\n        >\n          <div\n            fxLayout=\"column\"\n            fxLayoutAlign=\"center center\"\n            fxLayoutGap=\"20px\"\n            class=\"title-container-inline\"\n          >\n            <div\n              fxLayout=\"row\"\n              fxLayoutAlign=\"center center\"\n              class=\"linid-container\"\n            >\n              <span\n                [ngStyle.sm]=\"{ 'font-size': '0.8em' }\"\n                [ngStyle.xs]=\"{ 'font-size': '0.6em' }\"\n              >\n                {{ homepageObservables.homepageDetail.title }}\n              </span>\n            </div>\n            <div\n              fxLayout=\"row\"\n              fxLayoutAlign=\"center center\"\n              class=\"title-baseline-container\"\n            >\n              <h2\n                [ngStyle.sm]=\"{ 'font-size': '1.2em', 'max-width': '480px' }\"\n                [ngStyle.xs]=\"{ 'font-size': '1.2em', 'max-width': '480px' }\"\n                class=\"subtitle\"\n              >\n                {{ homepageObservables.homepageDetail.subtitle }}\n              </h2>\n            </div>\n          </div>\n          <nav fxLayoutAlign=\"center center\" class=\"nav-container-inline\">\n            <ul\n              fxFlex=\"80%\"\n              fxLayoutGap=\"30px grid\"\n              fxLayout=\"row wrap\"\n              fxLayoutAlign=\"space-evenly center\"\n            >\n              <li *ngFor=\"let sidenavItem of sidenavItems\">\n                <a\n                  draggable=\"false\"\n                  fxLayout=\"column\"\n                  fxLayoutAlign=\"center center\"\n                  [routerLink]=\"['/home', sidenavItem.endpoint]\"\n                  [ngStyle.gt-xs]=\"{ 'height.px': 210, 'width.px': 210 }\"\n                  [ngStyle.sm]=\"{ 'height.px': 150, 'width.px': 150 }\"\n                  [ngStyle.xs]=\"{ 'height.px': 60, 'width.px': 60 }\"\n                  class=\"resource-link\"\n                >\n                  <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\n                    <mat-icon\n                      fxLayoutAlign=\"center end\"\n                      aria-hidden=\"true\"\n                      [ngStyle.sm]=\"{ 'font-size': '1.7em' }\"\n                      [ngStyle.xs]=\"{ 'font-size': '1.5em' }\"\n                      >{{ sidenavItem.icon }}</mat-icon\n                    >\n                    <span\n                      [ngStyle.sm]=\"{ 'font-size': '0.8em' }\"\n                      [ngStyle.xs]=\"{ 'font-size': '0.6em' }\"\n                      >{{ sidenavItem.name }}</span\n                    >\n                  </div>\n                </a>\n              </li>\n            </ul>\n          </nav>\n        </div>\n      </div>\n      <router-outlet\n        (activate)=\"onActivate($event)\"\n        (deactivate)=\"onDeactivate($event)\"\n      ></router-outlet>\n    </mat-sidenav-content>\n  </mat-sidenav-container>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '../../../../shared';\nimport {\n  HeaderComponent,\n  LogoutDialogComponent,\n} from './header/header.component';\nimport { HomepageComponent } from './homepage.component';\n\n@NgModule({\n  declarations: [HomepageComponent, HeaderComponent, LogoutDialogComponent],\n  imports: [SharedModule],\n  exports: [HomepageComponent],\n})\nexport class HomepageModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { Component, Input } from '@angular/core';\nimport { fadeIn } from '../../shared';\n\n@Component({\n  selector: 'dm-generic-array-header',\n  templateUrl: './generic-array-header.component.html',\n  styleUrls: ['./generic-array-header.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class GenericArrayHeaderComponent {\n  @Input() dataLength?: number;\n  @Input() dataIcon?: string;\n  @Input() dataName?: string;\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"array-header\">\n  <mat-icon *ngIf=\"dataIcon\" aria-hidden=\"true\" [@fadeIn]=\"dataIcon\">\n    {{ dataIcon }}\n  </mat-icon>\n  <span *ngIf=\"dataName && dataLength >= 0\" [@fadeIn]=\"dataName\" class=\"label\">\n    {{ dataName }} ({{ dataLength }})\n  </span>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'dm-loading-spinner',\n  templateUrl: './loading-spinner.component.html',\n  styleUrls: ['./loading-spinner.component.scss'],\n})\nexport class LoadingSpinnerComponent {\n  constructor() {}\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div fxLayout=\"row\" fxLayoutAlign=\"center start\" class=\"spinner-container\">\n  <div class=\"spinner\">\n    <div></div>\n    <div></div>\n    <div></div>\n    <div></div>\n  </div>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatRow, MatTableDataSource } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport {\n  Observable,\n  Subject,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport {\n  Data,\n  DataState,\n  IArrayAccessibility,\n  IArrayGenericAccessibility,\n  IAttributeActions,\n  IConfig,\n  IDataSourceRow,\n  IDataTableCellElement,\n  IEntryIds,\n  IFilterAccessibility,\n  IGenericArrayColumn,\n  IPersistentUiData,\n  IPrimitiveActions,\n  IResourceTypeProperties,\n  IUiEntryIds,\n  JsTable,\n  UiState,\n  canDeleteEntry,\n  canMoveEntry,\n  emptyJsTable,\n  getSelectedElementIds,\n  getSelectedElementsDependsOnMode,\n  getUpdatedDisplayedColumns,\n  isRowEditable,\n  mergeInto,\n  optionsPaginator,\n  sortData,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-generic-array',\n  templateUrl: './generic-array.component.html',\n  styleUrls: ['./generic-array.component.scss'],\n})\n\n/**\n * This class is a generic and configurable table to be used for every data table.\n */\nexport class GenericArrayComponent implements OnInit, AfterViewInit {\n  private _dataSource: MatTableDataSource<any>;\n  private _selectedElementsUiIds: IUiEntryIds[];\n\n  public filter = '';\n\n  @Select(DataState.getDataJsTable)\n  dataJsTable$: Observable<JsTable<IPersistentUiData>>;\n\n  @Select(UiState.getFilterAccessibility)\n  filterAccessibility$: Observable<IFilterAccessibility>;\n\n  @Select(UiState.getArrayAccessibility)\n  arrayGenericAccessibility$: Observable<IArrayGenericAccessibility>;\n\n  @Input() isClickableRow = false;\n\n  @Input() isSelectOnlyModeEnabled = false;\n\n  @Input() set selectedElementsUiIds(selectedElementsUiIds: IUiEntryIds[]) {\n    if (selectedElementsUiIds) {\n      this._selectedElementsUiIds = selectedElementsUiIds;\n    }\n  }\n\n  get selectedElementsUiIds(): IUiEntryIds[] {\n    return this._selectedElementsUiIds;\n  }\n\n  @Input()\n  set dataSource(dataSource: MatTableDataSource<any>) {\n    if (dataSource) {\n      this._dataSource = dataSource;\n      this.dataSource.data = this.dataSource.data.map((row: any) => {\n        const canEditRow: boolean = isRowEditable(\n          this.isAttributeArray,\n          this.updateAffectAnotherResourceType,\n          this.fieldForUpdate,\n          this.isEditableArray,\n          row\n        );\n        return {\n          ...row,\n          isRowEditable: canEditRow,\n          canMoveEntry: canMoveEntry(\n            this.actions,\n            this.canAssignOrMoveEntries,\n            this.isSelectOnlyModeEnabled,\n            canEditRow\n          ),\n          canDeleteEntry: canDeleteEntry(\n            this.actions,\n            this.isSelectOnlyModeEnabled,\n            canEditRow\n          ),\n          selectionIds: getSelectedElementIds(row, this.selectionColumnId),\n        };\n      });\n      this.displayedColumns = getUpdatedDisplayedColumns(\n        this.actions,\n        this.initialDisplayedColumns,\n        this.isSelectOnlyModeEnabled,\n        this.canAssignOrMoveEntries,\n        this.isEditableArray,\n        this.updateAffectAnotherResourceType,\n        this.isAttributeArray,\n        this.dataSource.data\n      );\n      this.dataSource.filterPredicate = (data, filter: string) =>\n        this.initialDisplayedColumns\n          .filter(\n            (columnId: string) =>\n              columnId !== 'select' && columnId !== 'actions'\n          )\n          .some(\n            (columnId: string) =>\n              !!data[columnId] &&\n              ((Array.isArray(data[columnId]) &&\n                data[columnId].some(\n                  (cellElt: string | IDataTableCellElement) => {\n                    const value: string =\n                      typeof cellElt === 'string' ? cellElt : cellElt.value;\n                    return value\n                      .getRidOfDiacritics()\n                      .toLocaleUpperCase()\n                      .includes(\n                        filter.getRidOfDiacritics().toLocaleUpperCase()\n                      );\n                  }\n                )) ||\n                (typeof data[columnId] === 'string' &&\n                  data[columnId]\n                    .getRidOfDiacritics()\n                    .toLocaleUpperCase()\n                    .includes(filter.getRidOfDiacritics().toLocaleUpperCase())))\n          );\n\n      this.dataSource.sortData = (data, sort: MatSort) => sortData(data, sort);\n      if (this.filter && this.filter !== '') {\n        this.dataSource.filter = this.filter.trim();\n      }\n      const nbTotalResults = dataSource.data.length;\n      this.optionsNbItemsPerPage = optionsPaginator(nbTotalResults);\n      const pageSize = nbTotalResults > 10 ? 10 : nbTotalResults;\n      this.paginator._changePageSize(pageSize);\n      this._dataSource.paginator = this.paginator;\n    }\n    this.selection = new SelectionModel<any>(\n      true,\n      this._selectedElementsUiIds && this._selectedElementsUiIds.length > 0\n        ? this.dataSource.filteredData.filter((elt: any) =>\n            this._selectedElementsUiIds.find(\n              (selectedElementUiIds: IUiEntryIds) =>\n                selectedElementUiIds.id === elt.selectionIds.id\n            )\n          )\n        : []\n    );\n  }\n\n  get dataSource(): MatTableDataSource<any> {\n    return this._dataSource;\n  }\n\n  /** Array useful for Angular Material Table columns header */\n  @Input() columns: IGenericArrayColumn[];\n\n  /** Column ids array which allows to link Angular Material Table column headers and rows */\n  @Input() initialDisplayedColumns: string[];\n\n  @Input() processingRequest$?: Observable<boolean>;\n\n  @Input() actions: IPrimitiveActions | IAttributeActions;\n\n  @Input() resourcesTypesProperties: JsTable<IResourceTypeProperties>;\n\n  @Input() configs: JsTable<IConfig>;\n\n  @Input() accessibility: IArrayAccessibility;\n\n  @Input() endpoint: string;\n\n  @Input() canAssignOrMoveEntries = false;\n\n  @Input() set selectedResourceRootTypeId(selectedResourceRootTypeId: string) {\n    if (selectedResourceRootTypeId) {\n      this.filter = this._dataJsTable.byId[selectedResourceRootTypeId]\n        ? this._dataJsTable.byId[selectedResourceRootTypeId].filterValue\n        : '';\n      this._selectedResourceRootTypeId = selectedResourceRootTypeId;\n    }\n  }\n\n  get selectedResourceRootTypeId(): string {\n    return this._selectedResourceRootTypeId;\n  }\n\n  @Input() isAttributeArray = false;\n\n  @Input() updateAffectAnotherResourceType: boolean;\n\n  @Input() fieldForUpdate: string;\n\n  @Input() isEditableArray = false;\n\n  @Input() selectionColumnId: string;\n\n  @Input() actionsColumnTemplate: TemplateRef<any>;\n\n  @Output() selectedData = new EventEmitter<(IUiEntryIds | IDataSourceRow)[]>();\n\n  public selection: SelectionModel<any>;\n\n  public optionsNbItemsPerPage: number[] = [];\n\n  public displayEllipsisFromTableRow = true;\n\n  public displayedColumns: string[];\n\n  private _selectedDataBeforeApplyFilter = new Set();\n\n  private _selectedResourceRootTypeId: string;\n\n  private _dataJsTable: JsTable<IPersistentUiData> =\n    emptyJsTable<IPersistentUiData>();\n\n  private _modelChanged = new Subject<string>();\n\n  private _onDestroy$ = new Subject<void>();\n\n  @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n  @ViewChild(MatSort) sort: MatSort;\n\n  @ViewChildren(MatRow, { read: ElementRef }) matRows: QueryList<MatRow>;\n\n  constructor(\n    private _store$: Store,\n    private _router: Router\n  ) {}\n\n  ngOnInit(): void {\n    if (!this.isAttributeArray) {\n      this._modelChanged\n        .pipe(\n          debounceTime(300),\n          takeUntil(this._onDestroy$),\n          tap((currentSearch: string) => {\n            this._store$.dispatch(\n              new Data.SetFilterValue({\n                filterValue: currentSearch,\n                dataTypeId: this.selectedResourceRootTypeId,\n              })\n            );\n          })\n        )\n        .subscribe();\n\n      this.dataJsTable$\n        .pipe(\n          takeUntil(this._onDestroy$),\n          map((dataJsTable: JsTable<IPersistentUiData>) => {\n            this._dataJsTable = mergeInto(this._dataJsTable, dataJsTable);\n            return !!this.selectedResourceRootTypeId &&\n              this._dataJsTable.byId[this.selectedResourceRootTypeId]\n                ?.filterValue\n              ? this._dataJsTable.byId[this.selectedResourceRootTypeId]\n                  .filterValue\n              : '';\n          }),\n          distinctUntilChanged((prev, curr) => prev === curr),\n          filter(\n            (filterValue: string) =>\n              !this.isSelectOnlyModeEnabled &&\n              filterValue !== undefined &&\n              filterValue !== null\n          ),\n          tap((filterValue: string) => {\n            this.filter = filterValue;\n            this.applyFilter();\n          })\n        )\n        .subscribe();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (this._dataSource != null) {\n      this._dataSource.sort = this.sort;\n    }\n  }\n\n  updateArraySearch(search: string): void {\n    if (this.isAttributeArray) {\n      this.filter = search;\n      this.applyFilter();\n    } else {\n      this._modelChanged.next(search);\n    }\n  }\n\n  applyFilter(): void {\n    this.dataSource.filter = this.filter;\n    this.displayedColumns = getUpdatedDisplayedColumns(\n      this.actions,\n      this.initialDisplayedColumns,\n      this.isSelectOnlyModeEnabled,\n      this.canAssignOrMoveEntries,\n      this.isEditableArray,\n      this.updateAffectAnotherResourceType,\n      this.isAttributeArray,\n      this.dataSource.filteredData\n    );\n\n    const filteredDataIds = this.dataSource.filteredData.map(\n      (data: any) => data.id\n    );\n    this.selection.selected.forEach((selectedData: any) => {\n      if (!filteredDataIds.includes(selectedData.id)) {\n        this._selectedDataBeforeApplyFilter.add(selectedData);\n        this.selection.deselect(selectedData);\n      }\n    });\n    this._resetSelectedElementsBeforeFiltering(filteredDataIds);\n\n    this.selectedData.emit(\n      getSelectedElementsDependsOnMode(\n        this.isSelectOnlyModeEnabled,\n        this.selection\n      )\n    );\n  }\n\n  clearFilterInput(): void {\n    this._modelChanged.next('');\n    this.filter = '';\n    this.dataSource.filter = '';\n\n    this.displayedColumns = getUpdatedDisplayedColumns(\n      this.actions,\n      this.initialDisplayedColumns,\n      this.isSelectOnlyModeEnabled,\n      this.canAssignOrMoveEntries,\n      this.isEditableArray,\n      this.updateAffectAnotherResourceType,\n      this.isAttributeArray,\n      this.dataSource.filteredData\n    );\n    this._resetSelectedElementsBeforeFiltering(\n      this.dataSource.filteredData.map((data: any) => data.id)\n    );\n    this.selectedData.emit(\n      getSelectedElementsDependsOnMode(\n        this.isSelectOnlyModeEnabled,\n        this.selection\n      )\n    );\n  }\n\n  /** Whether the number of selected elements matches the total number of rows. */\n  isAllSelected(): boolean {\n    let numSelected = 0;\n    let numRows = 0;\n    if (this.dataSource) {\n      numSelected = this.selection.selected.length;\n      numRows =\n        this.dataSource.filteredData &&\n        this.dataSource.filteredData !== undefined\n          ? this.dataSource.filteredData.filter(\n              (data: any) => data.isRowEditable\n            ).length\n          : 0;\n    }\n    return numSelected === numRows && numSelected !== 0 && numRows !== 0;\n  }\n\n  /** Selects all rows if they are not all selected; otherwise clear selection. */\n  masterToggle(): void {\n    if (this.dataSource) {\n      this.isAllSelected()\n        ? this.selection.clear()\n        : this.dataSource.filteredData.forEach((row) => {\n            if (row.isRowEditable) {\n              this.selection.select(row);\n            }\n          });\n    } else {\n      this.selection.clear();\n    }\n    this.selectedData.emit(\n      getSelectedElementsDependsOnMode(\n        this.isSelectOnlyModeEnabled,\n        this.selection\n      )\n    );\n  }\n\n  /** The label for the checkbox on the passed row */\n  checkboxLabel(row?: any): string {\n    const arrayGenericAccessibility = this._store$.selectSnapshot(\n      UiState.getArrayAccessibility\n    );\n    if (!row) {\n      return this.isAllSelected()\n        ? arrayGenericAccessibility.multipleDeselectionLabel\n        : arrayGenericAccessibility.multipleSelectionLabel;\n    }\n    return `${\n      this.selection.isSelected(row)\n        ? arrayGenericAccessibility.singleDeselectionLabel\n        : arrayGenericAccessibility.singleSelectionLabel\n    } ${row.externalId}`;\n  }\n\n  checkSelection(): void {\n    this.selectedData.emit(\n      getSelectedElementsDependsOnMode(\n        this.isSelectOnlyModeEnabled,\n        this.selection\n      )\n    );\n  }\n\n  onKeyRedirect(link: string, id: string): void {\n    this._router.navigateByUrl(link);\n    this.setEntryIdInStore(id);\n  }\n\n  onKeyRedirectFromRow(link: string, ids: IEntryIds): void {\n    this._router.navigateByUrl(link);\n    this.setEntryIdsInStore(ids);\n  }\n\n  onKeyArrowDown(index: number): void {\n    if (index < this.matRows.length - 1) {\n      const newRow = (this.matRows.get(index + 1) as ElementRef).nativeElement;\n      if (newRow) {\n        newRow.focus();\n      }\n    }\n  }\n\n  onKeyArrowUp(index: number): void {\n    if (index > 0) {\n      const newRow = (this.matRows.get(index - 1) as ElementRef).nativeElement;\n      if (newRow) {\n        newRow.focus();\n      }\n    }\n  }\n\n  getRowLink(externalId: string): string {\n    let link = '';\n    return link.concat(\n      '/home',\n      '/',\n      this.endpoint,\n      '/',\n      encodeURIComponent(externalId)\n    );\n  }\n\n  isCellValueAnArray(elementValue: string | IDataTableCellElement[]): boolean {\n    return Array.isArray(elementValue);\n  }\n\n  getDisplayedValueForArray(\n    index: number,\n    arrayLength: number,\n    currentValue: string\n  ): string {\n    return index === arrayLength - 1 ? currentValue : currentValue.concat(', ');\n  }\n\n  setEntryIdInStore(id: string, event: any = null): void {\n    this._store$.dispatch(new Data.SetSelectedEntryId({ id }));\n    if (event !== null) {\n      event.stopPropagation();\n    }\n  }\n\n  setEntryIdsInStore(ids: IEntryIds): void {\n    this._store$.dispatch(new Data.SetSelectedEntryIds({ ids }));\n  }\n\n  getCellTitle(cellValue: string | IDataTableCellElement[]): string {\n    if (cellValue == null) {\n      return '';\n    }\n\n    return Array.isArray(cellValue)\n      ? cellValue.map((elt) => elt.value).join(', ')\n      : cellValue;\n  }\n\n  getTableMinHeight(): number {\n    const rowHeight = 48;\n    const tableHeaderHeight = 56;\n    let minHeight = 0;\n    if (!this.isSelectOnlyModeEnabled) {\n      minHeight =\n        this.dataSource.filteredData.length < 10\n          ? tableHeaderHeight + rowHeight * this.dataSource.filteredData.length\n          : tableHeaderHeight + rowHeight * 10;\n    }\n    return minHeight;\n  }\n\n  private _resetSelectedElementsBeforeFiltering(filteredIds: string[]): void {\n    this._selectedDataBeforeApplyFilter.forEach((selectedData: any) => {\n      if (filteredIds.includes(selectedData.id)) {\n        this.selection.select(selectedData);\n        this._selectedDataBeforeApplyFilter.delete(selectedData);\n      }\n    });\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div fxLayout=\"row wrap\" class=\"div-table-filter\">\n  <mat-form-field\n    *ngIf=\"filterAccessibility$ | async as filterAccessibility\"\n    color=\"accent\"\n    class=\"filter\"\n  >\n    <mat-label>\n      <mat-icon aria-hidden=\"true\">filter_list_alt</mat-icon>\n      {{ filterAccessibility.label }}\n    </mat-label>\n    <input\n      type=\"text\"\n      matInput\n      [ngModel]=\"filter\"\n      (ngModelChange)=\"updateArraySearch($event)\"\n    />\n    <button\n      *ngIf=\"filter\"\n      matSuffix\n      mat-icon-button\n      [attr.aria-label]=\"filterAccessibility.clearSearch\"\n      (click)=\"clearFilterInput()\"\n      class=\"reset-input-btn\"\n      matTooltip=\"{{ filterAccessibility.clearSearch }}\"\n    >\n      <mat-icon aria-hidden=\"true\"> clear </mat-icon>\n    </button>\n  </mat-form-field>\n  <mat-paginator\n    color=\"accent\"\n    [pageSizeOptions]=\"optionsNbItemsPerPage\"\n    showFirstLastButtons\n  ></mat-paginator>\n</div>\n<div\n  *ngIf=\"arrayGenericAccessibility$ | async as arrayGenericAccessibility\"\n  class=\"div-table\"\n>\n  <table\n    mat-table\n    [dataSource]=\"dataSource\"\n    matSort\n    [attr.role]=\"accessibility.table\"\n  >\n    <caption>\n      {{\n        accessibility.table\n      }}\n    </caption>\n    <ng-container matColumnDef=\"select\">\n      <th\n        mat-header-cell\n        [attr.role]=\"arrayGenericAccessibility.selectColumn\"\n        scope=\"col\"\n        *matHeaderCellDef\n      >\n        <mat-checkbox\n          [aria-label]=\"checkboxLabel()\"\n          [checked]=\"selection.hasValue() && isAllSelected()\"\n          [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n          (change)=\"$event ? masterToggle() : null\"\n        >\n        </mat-checkbox>\n      </th>\n      <td\n        mat-cell\n        [attr.role]=\"arrayGenericAccessibility.selectRow\"\n        *matCellDef=\"let row\"\n        (click)=\"$event.stopPropagation()\"\n      >\n        <mat-checkbox\n          *ngIf=\"row.isRowEditable\"\n          [aria-label]=\"checkboxLabel(row)\"\n          [checked]=\"selection.isSelected(row)\"\n          (click)=\"$event.stopPropagation()\"\n          (change)=\"$event ? selection.toggle(row) : null; checkSelection()\"\n        >\n        </mat-checkbox>\n      </td>\n    </ng-container>\n\n    <ng-container [matColumnDef]=\"column.id\" *ngFor=\"let column of columns\">\n      <th\n        mat-header-cell\n        scope=\"col\"\n        [attr.role]=\"\n          arrayGenericAccessibility.columnHeader +\n          column.label.toLocaleLowerCase()\n        \"\n        *matHeaderCellDef\n        mat-sort-header\n        [style.width]=\"column.width\"\n      >\n        {{ column.label }}\n      </th>\n      <td\n        mat-cell\n        [attr.role]=\"\n          arrayGenericAccessibility.cell + column.label.toLocaleLowerCase()\n        \"\n        [title]=\"getCellTitle(element[column.id])\"\n        [style.width]=\"column.width\"\n        *matCellDef=\"let element\"\n      >\n        <div\n          *ngIf=\"isCellValueAnArray(element[column?.id]); else oneStringValue\"\n        >\n          <span\n            *ngFor=\"let cellObject of element[column.id]; let i = index\"\n            [ngClass]=\"{\n              'element-link':\n                !isSelectOnlyModeEnabled && cellObject.isClickable,\n              element: i > 0\n            }\"\n            [routerLink]=\"\n              !isSelectOnlyModeEnabled && cellObject.isClickable\n                ? cellObject.routerLinkValue\n                : []\n            \"\n            (click)=\"\n              !isSelectOnlyModeEnabled && cellObject.isClickable\n                ? setEntryIdInStore(cellObject.id, $event)\n                : null\n            \"\n            (keydown.enter)=\"\n              !isSelectOnlyModeEnabled && cellObject.isClickable\n                ? onKeyRedirect(cellObject.routerLinkValue, cellObject.id)\n                : null\n            \"\n          >\n            {{\n              getDisplayedValueForArray(\n                i,\n                element[column.id].length,\n                cellObject.value || cellObject\n              )\n            }}\n          </span>\n        </div>\n        <ng-template #oneStringValue>\n          <span>\n            {{ element[column.id] }}\n          </span>\n        </ng-template>\n      </td>\n    </ng-container>\n\n    <ng-container *ngIf=\"actionsColumnTemplate != null\" matColumnDef=\"actions\">\n      <th\n        mat-header-cell\n        [attr.role]=\"arrayGenericAccessibility.actionsColumn\"\n        scope=\"col\"\n        *matHeaderCellDef\n      >\n        {{ arrayGenericAccessibility.actionsColumnLabel }}\n      </th>\n      <td\n        mat-cell\n        [attr.role]=\"arrayGenericAccessibility.actionsMenu\"\n        *matCellDef=\"let row\"\n        (click)=\"$event.stopPropagation()\"\n      >\n        <ng-container\n          [ngTemplateOutlet]=\"actionsColumnTemplate\"\n          [ngTemplateOutletContext]=\"{\n            row\n          }\"\n        >\n        </ng-container></td\n    ></ng-container>\n\n    <tr\n      mat-header-row\n      [attr.role]=\"accessibility.headerRow\"\n      *matHeaderRowDef=\"displayedColumns; sticky: true\"\n    ></tr>\n    <tr\n      mat-row\n      *matRowDef=\"let row; columns: displayedColumns; let i = index\"\n      [id]=\"i\"\n      [attr.role]=\"\n        row.externalId ? accessibility.row + row.externalId : accessibility.row\n      \"\n      [ngClass]=\"{\n        highlighted: selection.isSelected(row),\n        hovered: !selection.isSelected(row) && isClickableRow,\n        'clickable-row-pointer': isClickableRow\n      }\"\n      [routerLink]=\"isClickableRow ? getRowLink(row.externalId) : []\"\n      (click)=\"\n        isClickableRow\n          ? setEntryIdsInStore({ id: row.id, externalId: row.externalId })\n          : null\n      \"\n      (keydown.enter)=\"\n        isClickableRow\n          ? onKeyRedirectFromRow(getRowLink(row.externalId), {\n              id: row.id,\n              externalId: row.externalId\n            })\n          : null\n      \"\n      (keydown.arrowdown)=\"onKeyArrowDown(i)\"\n      (keydown.arrowup)=\"onKeyArrowUp(i)\"\n    ></tr>\n\n    <tr class=\"mat-row\" *matNoDataRow>\n      <div fxLayoutAlign=\"center start\">\n        <span\n          class=\"placeholder-text\"\n          [ngClass]=\"{ 'placeholder-detail-page-text': isAttributeArray }\"\n        >\n          {{\n            isSelectOnlyModeEnabled && isAttributeArray\n              ? (actions | asAttributeActions).assign.noFilterResult\n              : actions.search.filter.noResult\n          }}\n        </span>\n      </div>\n    </tr>\n  </table>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { Data, IDataItem, IEntryIds, fadeTree, filterList } from '../../shared';\n@Component({\n  selector: 'dm-generic-list',\n  templateUrl: './generic-list.component.html',\n  styleUrls: ['./generic-list.component.scss'],\n  animations: [trigger('fadeTree', fadeTree(':enter'))],\n})\nexport class GenericListComponent {\n  @ViewChild('divMatList') divMatList: ElementRef;\n  @ViewChild('ulGenericList') ulGenericList: ElementRef;\n\n  @Input() selectedItemId: string;\n\n  @Input()\n  set initialDataList(initialDataList: IDataItem[]) {\n    if (initialDataList) {\n      this._initialDataList = initialDataList;\n      this.updateDataListOnSetAndOnSearch();\n    }\n  }\n\n  get initialDataList(): IDataItem[] {\n    return this._initialDataList;\n  }\n\n  @Input()\n  set search(search: string) {\n    this._search = search;\n    this.updateDataListOnSetAndOnSearch();\n  }\n\n  get search(): string {\n    return this._search;\n  }\n\n  @Input() isSelectOnlyModeEnabled = false;\n\n  @Input() isLargeScreen: boolean;\n\n  @Input() actionsMenuTemplate: TemplateRef<any>;\n\n  @Output() selectedItem = new EventEmitter<IDataItem>();\n\n  private _initialDataList: IDataItem[] = [];\n\n  private _search: string;\n\n  public activeItem: IDataItem;\n\n  public filteredDataList: IDataItem[];\n\n  public dataList: IDataItem[];\n\n  public elementRef: ElementRef;\n\n  constructor(\n    private _store$: Store,\n    private _el: ElementRef\n  ) {\n    this.elementRef = this._el;\n  }\n\n  getLink(item: IDataItem): string {\n    return item.link.toLowerCase();\n  }\n\n  getActiveItem(item: IDataItem): void {\n    this.activeItem = item;\n    this.selectedItem.emit(this.activeItem);\n  }\n\n  setEntryIdsInStore(ids: IEntryIds): void {\n    this._store$.dispatch(new Data.SetSelectedEntryIds({ ids }));\n  }\n\n  updateDataListOnSetAndOnSearch(): void {\n    if (!this.isSelectOnlyModeEnabled && this.search !== '') {\n      this.filteredDataList = filterList(this.initialDataList, this._search);\n      this.dataList = [...this.filteredDataList];\n    } else {\n      this.dataList = [...this.initialDataList];\n    }\n  }\n\n  public getItemCssClass(itemId: string): string {\n    if (!this.isSelectOnlyModeEnabled && itemId === this.selectedItemId) {\n      return 'active-item-link';\n    } else if (this.isSelectOnlyModeEnabled) {\n      if (itemId === this.selectedItemId) {\n        return 'disabled-div';\n      } else if (this.activeItem && this.activeItem.ids.id === itemId) {\n        return 'active-item-link';\n      }\n    }\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  [ngClass]=\"\n    isSelectOnlyModeEnabled\n      ? 'div-mat-list-dialog'\n      : isLargeScreen\n        ? 'div-mat-list-lg-screen'\n        : 'div-mat-list-sm-screen'\n  \"\n  class=\"div-generic-list\"\n  #divMatList\n>\n  <mat-nav-list>\n    <nav role=\"navigation\">\n      <ul class=\"gnc-list\" #ulGenericList>\n        <li\n          mat-list-item\n          fxLayout=\"row\"\n          *ngFor=\"let data of dataList\"\n          class=\"gnc-list-item\"\n        >\n          <a\n            fxFlex\n            draggable=\"false\"\n            disableRipple=\"true\"\n            [routerLink]=\"!isSelectOnlyModeEnabled ? [getLink(data)] : []\"\n            (click)=\"\n              isSelectOnlyModeEnabled && data.ids.id !== selectedItemId\n                ? getActiveItem(data)\n                : !isSelectOnlyModeEnabled\n                  ? setEntryIdsInStore(data.ids)\n                  : null\n            \"\n            [title]=\"data.name\"\n            [id]=\"data.ids.externalId\"\n            [ngClass]=\"getItemCssClass(data.ids.id)\"\n            class=\"ldap-item\"\n          >\n            <button [title]=\"data.name\" class=\"btn-item\">\n              <span\n                appColorSearchedLetters\n                [name]=\"data.name\"\n                [title]=\"data.name\"\n                [search]=\"search\"\n                classToApply=\"highlight\"\n                id=\"{{ data.ids.id }}\"\n                class=\"ldap-item-name ellipsis\"\n              ></span>\n            </button>\n          </a>\n          <div\n            *ngIf=\"!isSelectOnlyModeEnabled\"\n            (click)=\"$event.preventDefault(); $event.stopPropagation()\"\n            class=\"ellipsis-menu\"\n          >\n            <ng-container\n              [ngTemplateOutlet]=\"actionsMenuTemplate\"\n              [ngTemplateOutletContext]=\"{\n                data\n              }\"\n            ></ng-container>\n          </div>\n        </li>\n      </ul>\n    </nav>\n  </mat-nav-list>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { ListRange, SelectionModel } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport {\n  MatTree,\n  MatTreeFlatDataSource,\n  MatTreeFlattener,\n} from '@angular/material/tree';\nimport { Store } from '@ngxs/store';\nimport _ from 'lodash';\nimport { ReplaySubject, Subject, delay, filter, takeUntil, tap } from 'rxjs';\nimport {\n  ActionsTypes,\n  Data,\n  ETreeSelectMode,\n  EUserAction,\n  IAdvancedSearchValues,\n  IDataNode,\n  IDataNodeIdsFields,\n  IEntryIds,\n  IFlatDataNode,\n  IPrimitiveActions,\n  IUiEntryIds,\n  addNodeInDataTree,\n  cloneDataTree,\n  fadeTree,\n  filterTree,\n  getAllChildrenLength,\n  getFirstDisplayedIndex,\n  getFlattenDisplayedTreeIds,\n  getFlattenTree,\n  getGreatestNodesMinWidth,\n  getNodeById,\n  getSelectedNodes,\n  isNodeMatchingSearch,\n  setNodeIdWidthMap,\n  updateNodeName,\n  updateSubTreelinks,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-generic-tree',\n  templateUrl: './generic-tree.component.html',\n  styleUrls: ['./generic-tree.component.scss'],\n  animations: [trigger('fadeTree', fadeTree(':enter'))],\n})\nexport class GenericTreeComponent implements OnDestroy, AfterViewInit {\n  @ViewChild('tree') tree: MatTree<IDataNode>;\n  @ViewChild('divGenericTree') divGenericTree: ElementRef;\n  @ViewChild('divMatTree') divMatTree: ElementRef;\n  @ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;\n\n  @Input() viewportHeight: number;\n\n  @Input() allNodesIdsNames: IDataNodeIdsFields[];\n\n  @Input() selectedNodeId: string;\n\n  @Input() flattenInitialDataTree: IDataNode[];\n\n  @Input()\n  set initialDataTree(initialDataTree: IDataNode[]) {\n    if (initialDataTree) {\n      this._initialDataTree = initialDataTree;\n      this.updateDataSourceOnInitAndOnSearch();\n    }\n  }\n\n  get initialDataTree(): IDataNode[] {\n    return this._initialDataTree;\n  }\n\n  @Input()\n  set search(search: string) {\n    this._search = search;\n    if (!this.isSettingData) {\n      this.updateDataSourceOnInitAndOnSearch();\n      setTimeout(() => {\n        this.enableAnimation = false;\n        this.addedChildrenIds = [];\n      }, 1);\n    }\n  }\n\n  get search(): string {\n    return this._search;\n  }\n\n  @Input() expandedTreeNodesUuids: string[];\n\n  @Input() actions: IPrimitiveActions;\n\n  @Input() set selectedResourceRootTypeId(selectedResourceRootTypeId: string) {\n    if (selectedResourceRootTypeId) {\n      this.isSettingData = true;\n      this.dataSource.data = [];\n      this.flattenDataTreeIds = [];\n      this.nodesIdWidth = new Map<string, number>();\n      this.nodesMinWidthAsNumber = 0;\n      this._selectedResourceRootTypeId = selectedResourceRootTypeId;\n    }\n  }\n\n  get selectedResourceRootTypeId(): string {\n    return this._selectedResourceRootTypeId;\n  }\n\n  @Input() selectedResourceTypeId: string;\n\n  @Input() isSelectOnlyModeEnabled = false;\n\n  @Input() isAdvancedSearchActivated = false;\n\n  @Input() selectMode: ETreeSelectMode;\n\n  @Input() set refresh(refresh: ReplaySubject<ActionsTypes>) {\n    if (refresh) {\n      this.isSettingData = true;\n      this._refresh = refresh;\n      refresh\n        .pipe(\n          takeUntil(this._onDestroy$),\n          filter((_) => !this.isSettingData),\n          delay(10),\n          tap((refreshActionDetail: ActionsTypes) => {\n            if (!!refreshActionDetail) {\n              this.updateDataTreeOnRefresh(refreshActionDetail);\n              this.updateFlattenTreePropertiesOnRefresh(refreshActionDetail);\n              this.updateDataSource();\n            }\n          }),\n          delay(1),\n          tap((refreshActionDetail: ActionsTypes) => {\n            if (\n              refreshActionDetail.actionType === EUserAction.TREE_ADD ||\n              (refreshActionDetail.actionType === EUserAction.TREE_DELETE &&\n                refreshActionDetail.hasRemovedSelectedNode) ||\n              (refreshActionDetail.actionType === EUserAction.TREE_MOVE_NODE &&\n                refreshActionDetail.hasMovedSelectedNode)\n            ) {\n              this.scrollToSelectedNode();\n            }\n          })\n        )\n        .subscribe();\n    }\n  }\n\n  get refresh(): ReplaySubject<ActionsTypes> {\n    return this._refresh;\n  }\n\n  @Input() nodesIdsMatchingAdvancedSearch: { [id: string]: true } = {};\n\n  @Input() set advancedSearch(_advancedSearch: IAdvancedSearchValues) {\n    if (!this.isSettingData && this.isAdvancedSearchActivated) {\n      this.updateDataSourceOnInitAndOnSearch();\n      setTimeout(() => {\n        this.enableAnimation = false;\n        this.addedChildrenIds = [];\n      }, 1);\n    }\n  }\n\n  @Input() set isLargeScreen(isLargeScreen: boolean) {\n    this._isLargeScreen = isLargeScreen;\n    if (!this.isSettingData) {\n      this.viewportMinWidth = 'inherit';\n      setTimeout((_) => this.getVirtualScrollViewportMinWidth(), 1);\n    }\n  }\n\n  get isLargeScreen(): boolean {\n    return this._isLargeScreen;\n  }\n\n  @Input() selectedNodesId: string[] = [];\n\n  @Input() isFilteringOnExternalId = false;\n\n  @Input() isScrollDisable = false;\n\n  @Input() actionsMenuTemplate: TemplateRef<any>;\n\n  @Output() widthUpdated = new EventEmitter<string>();\n\n  @Output() selectedNode = new EventEmitter<IDataNode>();\n\n  @Output() selectedNodes = new EventEmitter<IDataNode[]>();\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _initialDataTree: IDataNode[] = [];\n\n  private _search: string;\n\n  private _selectedResourceRootTypeId: string;\n\n  private _refresh: ReplaySubject<ActionsTypes>;\n\n  private _isLargeScreen: boolean;\n\n  private _flattenDataTree: IDataNode[] = [];\n\n  private _mapDataNodeById: { [id: string]: IDataNode } = {};\n\n  private _hasMadeInitialScroll = false;\n\n  public isSettingData = false;\n\n  public viewportMinWidth = '100%';\n\n  public activeNode: IDataNode;\n\n  public dataTree: IDataNode[];\n\n  public STANDARD_NODE_PADDING_LEFT = 20;\n\n  public STANDARD_NODE_HEIGHT = 40;\n\n  // Workaround to avoid scrollbar in mat-dialog-content\n  public MAX_WINDOW_HEIGHT_PERCENTAGE = 0.5;\n\n  public MAX_NB_DISPLAYED_NODES = 50;\n\n  public flattenDataTreeIds: string[];\n\n  public filteredDataTree: IDataNode[];\n\n  public expandedNodesIds: Set<string>;\n\n  public nbDisplayedNodes = 0;\n\n  public firstDisplayedIndex = 0;\n\n  public enableAnimation = true;\n\n  public addedChildrenIds: string[] = [];\n\n  public nodesIdWidth: Map<string, number> = new Map<string, number>();\n\n  public nodesMinWidthAsNumber = 0;\n\n  public treeControl: FlatTreeControl<IFlatDataNode>;\n\n  public treeFlattener: MatTreeFlattener<IDataNode, IFlatDataNode>;\n\n  public dataSource: MatTreeFlatDataSource<IDataNode, IFlatDataNode>;\n\n  public allTreeSelectMode = ETreeSelectMode;\n\n  public checklistSelection = new SelectionModel<IDataNode>(true);\n\n  private _getLevel = (node: IFlatDataNode) => node.level;\n\n  private _isExpandable = (node: IFlatDataNode) => node.expandable;\n\n  private _getChildren = (node: IDataNode): IDataNode[] => node.children;\n\n  hasChild = (_: number, node: IFlatDataNode) => node.expandable;\n\n  private _transformer = (node: IDataNode, level: number) => {\n    return {\n      ...node,\n      expandable: !!node.children && node.children.length > 0,\n      level,\n    };\n  };\n\n  constructor(private _store$: Store) {\n    this.treeControl = new FlatTreeControl<IFlatDataNode>(\n      this._getLevel,\n      this._isExpandable\n    );\n\n    this.treeFlattener = new MatTreeFlattener<IDataNode, IFlatDataNode>(\n      this._transformer,\n      this._getLevel,\n      this._isExpandable,\n      this._getChildren\n    );\n\n    this.dataSource = new MatTreeFlatDataSource(\n      this.treeControl,\n      this.treeFlattener\n    );\n  }\n\n  ngAfterViewInit(): void {\n    this.virtualScroll.renderedRangeStream.subscribe((range: ListRange) => {\n      if (this.firstDisplayedIndex !== range.start) {\n        this.firstDisplayedIndex = range.start;\n        this.updateDataSource();\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  expand(selectedNodesIds: string[]): void {\n    const mapFlatDataNodeById: { [id: string]: IFlatDataNode } = _.fromPairs(\n      this.treeControl.dataNodes.map((node) => [node.ids.id, node])\n    );\n    selectedNodesIds.forEach((id: string) => {\n      if (!!mapFlatDataNodeById[id]) {\n        this.treeControl.expand(mapFlatDataNodeById[id]);\n      }\n    });\n  }\n\n  getNodesForDeleteActions(node: IDataNode): IUiEntryIds[] {\n    let actionsKeys: string[] = Object.keys(this.actions[node.type].primitives);\n    if (\n      node.children.length === 0 ||\n      (!actionsKeys.includes('deleteChild') &&\n        !actionsKeys.includes('deleteChildren'))\n    ) {\n      return [{ ...node.ids, label: node.name }];\n    } else {\n      return node.children.map((child: IDataNode) => ({\n        ...child.ids,\n        label: child.name,\n      }));\n    }\n  }\n\n  getNbChildren(children: IDataNode[]): number {\n    return children.length > 1\n      ? children.length\n      : children.some((child) => child.children.length > 0)\n        ? 2\n        : children.length;\n  }\n\n  getLink(node: IDataNode): string {\n    return node.link.toLowerCase();\n  }\n\n  getActiveNode(node: IDataNode): void {\n    this.activeNode = node;\n    this.selectedNode.emit(this.activeNode);\n  }\n\n  onToggleFold(toggledNode: IFlatDataNode): void {\n    this.enableAnimation = true;\n\n    this.updateFlattenTreePropertiesOnToggle(toggledNode);\n    const isCollapsing: boolean = this.treeControl.isExpanded(toggledNode);\n    this.updateDataSourceOnToggle(isCollapsing);\n    if (isCollapsing) {\n      this.treeControl.collapse(toggledNode);\n    }\n    this.expand([...this.expandedNodesIds]);\n    if (this.isSelectOnlyModeEnabled) {\n      this._setVirtualScrollViewportHeight();\n    } else {\n      this._store$.dispatch(\n        new Data.ToggleFoldTreeNode({\n          treeNodeId: toggledNode.ids.id,\n          isFolding: !this.treeControl.isExpanded(toggledNode),\n          dataTypeId: this.selectedResourceRootTypeId,\n        })\n      );\n    }\n    this.getVirtualScrollViewportMinWidth();\n    this.enableAnimation = false;\n    this.addedChildrenIds = [];\n  }\n\n  setEntryIdsInStore(ids: IEntryIds, parentIds: IEntryIds): void {\n    this._store$.dispatch([\n      new Data.SetSelectedEntryIds({ ids }),\n      new Data.SetSelectedEntryParentIds({ ids: parentIds }),\n    ]);\n  }\n\n  buildDisplayedTree(\n    nodesByParentId: {\n      [id: string]: IDataNode[];\n    },\n    parentIdForDisplay = 'root'\n  ): IDataNode[] {\n    return nodesByParentId[parentIdForDisplay].map((node: IDataNode) => {\n      let children: IDataNode[] = node.children;\n      if (\n        this.expandedNodesIds.has(node.ids.id) &&\n        !!nodesByParentId[node.ids.id]\n      ) {\n        const displayedChildren: IDataNode[] = this.buildDisplayedTree(\n          nodesByParentId,\n          node.ids.id\n        );\n        children = displayedChildren.length > 0 ? displayedChildren : children;\n      }\n      return {\n        ...node,\n        children,\n      };\n    });\n  }\n\n  setExpandedNodesIds() {\n    if (!!this.expandedTreeNodesUuids) {\n      this.expandedNodesIds = new Set<string>(this.expandedTreeNodesUuids);\n    }\n    if (!!this.selectedNodeId) {\n      getSelectedNodes(this.selectedNodeId, this.initialDataTree).forEach(\n        (id: string) => this.expandedNodesIds.add(id)\n      );\n    }\n  }\n\n  updateFlattenTreePropertiesOnToggle(node: IFlatDataNode) {\n    const updateStartIndex: number =\n      this.flattenDataTreeIds.indexOf(node.ids.id) + 1;\n    if (this.treeControl.isExpanded(node)) {\n      const allChidrenLength: number = getAllChildrenLength(\n        getNodeById(node.ids.id, this.dataTree),\n        [...this.expandedNodesIds]\n      );\n      this.flattenDataTreeIds.splice(updateStartIndex, allChidrenLength);\n      this.expandedNodesIds.delete(node.ids.id);\n    } else {\n      this.addedChildrenIds = getFlattenDisplayedTreeIds(\n        getNodeById(node.ids.id, this.dataTree).children,\n        this.expandedNodesIds\n      );\n      this.flattenDataTreeIds.splice(\n        updateStartIndex,\n        0,\n        ...this.addedChildrenIds\n      );\n      this.nbDisplayedNodes =\n        this.flattenDataTreeIds.length - this.firstDisplayedIndex >\n        this.MAX_NB_DISPLAYED_NODES\n          ? this.MAX_NB_DISPLAYED_NODES\n          : this.flattenDataTreeIds.length - this.firstDisplayedIndex;\n      this.expandedNodesIds.add(node.ids.id);\n    }\n    this.flattenDataTreeIds = [...this.flattenDataTreeIds];\n  }\n\n  updateDataTreeOnSetAndOnSearch(): void {\n    if (\n      !this.isSelectOnlyModeEnabled &&\n      (this.search !== '' || this.isAdvancedSearchActivated)\n    ) {\n      this.filteredDataTree = filterTree(\n        this.initialDataTree,\n        this.allNodesIdsNames,\n        this.search,\n        this.isFilteringOnExternalId,\n        this.isAdvancedSearchActivated,\n        this.nodesIdsMatchingAdvancedSearch\n      );\n      this.dataTree = cloneDataTree(this.filteredDataTree);\n    } else {\n      this.dataTree = cloneDataTree(this.initialDataTree);\n    }\n  }\n\n  updateFlattenTreePropertiesOnSetAndOnSearch(): void {\n    if (\n      !this.isSelectOnlyModeEnabled &&\n      (this.search !== '' || this.isAdvancedSearchActivated)\n    ) {\n      this.expandedNodesIds = new Set<string>(\n        this.allNodesIdsNames.map(\n          (nodeIds: IDataNodeIdsFields) => nodeIds.ids.id\n        )\n      );\n    } else {\n      this.expandedNodesIds = new Set<string>();\n      if (!this.isSelectOnlyModeEnabled) {\n        this.setExpandedNodesIds();\n      }\n    }\n    this._flattenDataTree =\n      this.search !== '' || this.isAdvancedSearchActivated\n        ? getFlattenTree(this.dataTree)\n        : this.flattenInitialDataTree;\n    this._mapDataNodeById = _.fromPairs(\n      this._flattenDataTree.map((node: IDataNode) => [node.ids.id, node])\n    );\n    this.flattenDataTreeIds = getFlattenDisplayedTreeIds(\n      this.dataTree,\n      this.expandedNodesIds\n    );\n  }\n\n  updateDataTreeOnRefresh(refreshActionDetail: ActionsTypes): void {\n    if (this.search !== '' || this.isAdvancedSearchActivated) {\n      switch (refreshActionDetail.actionType) {\n        case EUserAction.TREE_ADD:\n          if (\n            isNodeMatchingSearch(\n              this.search,\n              refreshActionDetail.addedNode.name,\n              this.isFilteringOnExternalId,\n              refreshActionDetail.addedNode.ids,\n              this.isAdvancedSearchActivated,\n              this.nodesIdsMatchingAdvancedSearch\n            )\n          ) {\n            addNodeInDataTree(\n              this.filteredDataTree,\n              refreshActionDetail.triggerNodeId,\n              refreshActionDetail.addedNode\n            );\n          }\n          break;\n        case EUserAction.TREE_DELETE:\n          this.filteredDataTree = filterTree(\n            this.initialDataTree,\n            this.allNodesIdsNames,\n            this.search,\n            this.isFilteringOnExternalId,\n            this.isAdvancedSearchActivated,\n            this.nodesIdsMatchingAdvancedSearch\n          );\n          break;\n        case EUserAction.TREE_UPDATE:\n          const selectedNodeIds: IDataNodeIdsFields =\n            this.allNodesIdsNames.find(\n              (nodeIds: IDataNodeIdsFields) =>\n                nodeIds.ids.id === this.selectedNodeId\n            );\n\n          const isUpdatedNodeMatchingSearch: boolean = isNodeMatchingSearch(\n            this.search,\n            refreshActionDetail.newNodeName ?? selectedNodeIds.name,\n            this.isFilteringOnExternalId,\n            {\n              id: refreshActionDetail.triggerNodeId,\n              externalId: refreshActionDetail.newNodeExternalId,\n            } ?? selectedNodeIds.ids,\n            this.isAdvancedSearchActivated,\n            this.nodesIdsMatchingAdvancedSearch\n          );\n          if (\n            refreshActionDetail.newNodeName &&\n            isUpdatedNodeMatchingSearch &&\n            this.flattenDataTreeIds.includes(refreshActionDetail.triggerNodeId)\n          ) {\n            updateNodeName(\n              refreshActionDetail.triggerNodeId,\n              this.filteredDataTree,\n              refreshActionDetail.newNodeName\n            );\n          } else if (\n            refreshActionDetail.newNodeExternalId &&\n            isUpdatedNodeMatchingSearch &&\n            this.flattenDataTreeIds.includes(refreshActionDetail.triggerNodeId)\n          ) {\n            updateSubTreelinks(\n              refreshActionDetail.triggerNodeId,\n              this.filteredDataTree,\n              refreshActionDetail.newNodeExternalId\n            );\n          } else {\n            this.filteredDataTree = filterTree(\n              this.initialDataTree,\n              this.allNodesIdsNames,\n              this.search,\n              this.isFilteringOnExternalId,\n              this.isAdvancedSearchActivated,\n              this.nodesIdsMatchingAdvancedSearch\n            );\n          }\n          break;\n        case EUserAction.TREE_MOVE_NODE:\n          this.filteredDataTree = filterTree(\n            this.initialDataTree,\n            this.allNodesIdsNames,\n            this.search,\n            this.isFilteringOnExternalId,\n            this.isAdvancedSearchActivated,\n            this.nodesIdsMatchingAdvancedSearch\n          );\n          break;\n        default:\n          break;\n      }\n    }\n    this.dataTree = cloneDataTree(\n      this.search === '' && !this.isAdvancedSearchActivated\n        ? this.initialDataTree\n        : this.filteredDataTree\n    );\n  }\n\n  updateFlattenTreePropertiesOnRefresh(\n    refreshActionDetail: ActionsTypes\n  ): void {\n    let flattenDataTreeIdsBeforeUpdate: string[] = [];\n    switch (refreshActionDetail.actionType) {\n      case EUserAction.TREE_ADD:\n        if (\n          isNodeMatchingSearch(\n            this.search,\n            refreshActionDetail.addedNode.name,\n            this.isFilteringOnExternalId,\n            refreshActionDetail.addedNode.ids,\n            this.isAdvancedSearchActivated,\n            this.nodesIdsMatchingAdvancedSearch\n          )\n        ) {\n          if (this.search !== '' || this.isAdvancedSearchActivated) {\n            this.expandedNodesIds.add(refreshActionDetail.addedNode.ids.id);\n          }\n          this.expandedNodesIds.add(refreshActionDetail.addedNode.parentIds.id);\n          this.enableAnimation = true;\n          this.addedChildrenIds.push(refreshActionDetail.addedNode.ids.id);\n        }\n        break;\n      case EUserAction.TREE_DELETE:\n        this.expandedNodesIds.forEach((nodeId: string) => {\n          if (\n            !this.allNodesIdsNames\n              .map((nodeIds: IDataNodeIdsFields) => nodeIds.ids.id)\n              .includes(nodeId)\n          ) {\n            this.expandedNodesIds.delete(nodeId);\n          }\n        });\n        break;\n      case EUserAction.TREE_UPDATE:\n        const selectedNodeIds: IDataNodeIdsFields = this.allNodesIdsNames.find(\n          (nodeIds: IDataNodeIdsFields) =>\n            nodeIds.ids.id === this.selectedNodeId\n        );\n\n        const isUpdatedNodeMatchingSearch: boolean = isNodeMatchingSearch(\n          this.search,\n          refreshActionDetail.newNodeName ?? selectedNodeIds.name,\n          this.isFilteringOnExternalId,\n          {\n            id: refreshActionDetail.triggerNodeId,\n            externalId: refreshActionDetail.newNodeExternalId,\n          } ?? selectedNodeIds.ids,\n          this.isAdvancedSearchActivated,\n          this.nodesIdsMatchingAdvancedSearch\n        );\n\n        if (\n          isUpdatedNodeMatchingSearch &&\n          !this.flattenDataTreeIds.includes(refreshActionDetail.triggerNodeId)\n        ) {\n          flattenDataTreeIdsBeforeUpdate = [...this.flattenDataTreeIds];\n        }\n        break;\n      case EUserAction.TREE_MOVE_NODE:\n        const movedNode: IDataNode = getNodeById(\n          refreshActionDetail.triggerNodeId,\n          this.dataTree\n        );\n        const allMovedNodesIds: string[] = [\n          movedNode.ids.id,\n          ...getFlattenDisplayedTreeIds(\n            movedNode.children,\n            this.expandedNodesIds\n          ),\n        ];\n        if (\n          this.search !== '' ||\n          this.isAdvancedSearchActivated ||\n          refreshActionDetail.destinationNode === null ||\n          (this.expandedNodesIds.has(\n            refreshActionDetail.destinationNode.ids.id\n          ) &&\n            this.flattenDataTreeIds.includes(\n              refreshActionDetail.destinationNode.ids.id\n            ))\n        ) {\n          flattenDataTreeIdsBeforeUpdate = [...this.flattenDataTreeIds];\n          this.addedChildrenIds.push(...allMovedNodesIds);\n        }\n        break;\n      default:\n        break;\n    }\n    this._flattenDataTree =\n      this.search !== '' || this.isAdvancedSearchActivated\n        ? getFlattenTree(this.dataTree)\n        : this.flattenInitialDataTree;\n    this._mapDataNodeById = _.fromPairs(\n      this._flattenDataTree.map((node: IDataNode) => [node.ids.id, node])\n    );\n    this.flattenDataTreeIds = getFlattenDisplayedTreeIds(\n      this.dataTree,\n      this.expandedNodesIds\n    );\n    if (flattenDataTreeIdsBeforeUpdate.length > 0) {\n      this.enableAnimation = true;\n      this.addedChildrenIds.push(\n        ..._.difference(this.flattenDataTreeIds, flattenDataTreeIdsBeforeUpdate)\n      );\n    }\n  }\n\n  getDisplayedNodes(): IDataNode[] {\n    this.nbDisplayedNodes = 0;\n    const displayedNodesIds: string[] = this.flattenDataTreeIds.slice(\n      this.firstDisplayedIndex,\n      this.firstDisplayedIndex + this.MAX_NB_DISPLAYED_NODES\n    );\n    this.nbDisplayedNodes = displayedNodesIds.length;\n    return displayedNodesIds.map((id: string) => ({\n      ...this._mapDataNodeById[id],\n      parentIdForDisplay: displayedNodesIds.includes(\n        this._mapDataNodeById[id].parentIdForDisplay\n      )\n        ? this._mapDataNodeById[id].parentIdForDisplay\n        : 'root',\n    }));\n  }\n\n  private _getTreeForDataSource(): IDataNode[] {\n    const displayedNodes: IDataNode[] = this.getDisplayedNodes();\n    const nodesByParentIdForDisplay: {\n      [id: string]: IDataNode[];\n    } = _.groupBy(displayedNodes, 'parentIdForDisplay');\n    return Object.keys(nodesByParentIdForDisplay).length > 0\n      ? this.buildDisplayedTree(nodesByParentIdForDisplay)\n      : [];\n  }\n\n  // TODO updateDataSource is call too many times on init tree\n  updateDataSource(): void {\n    this.setDataSource();\n    // TODO maybe find a solution for this\n    setTimeout(() => {\n      if (this.isSelectOnlyModeEnabled) {\n        this._setVirtualScrollViewportHeight();\n      }\n      this.getVirtualScrollViewportMinWidth();\n    }, 1);\n  }\n\n  setDataSource(): void {\n    if (this.isSettingData && !this.isSelectOnlyModeEnabled) {\n      this.firstDisplayedIndex = getFirstDisplayedIndex(\n        this.flattenDataTreeIds,\n        this.selectedNodeId,\n        this.MAX_NB_DISPLAYED_NODES\n      );\n      setTimeout(() => {\n        if (this.firstDisplayedIndex > 0 && !this._hasMadeInitialScroll) {\n          this.scrollToSelectedNode();\n          this._hasMadeInitialScroll = true;\n        } else if (\n          this.firstDisplayedIndex === 0 ||\n          this._hasMadeInitialScroll\n        ) {\n          this.dataSource.data = this._getTreeForDataSource();\n          this.expand([...this.expandedNodesIds]);\n          if (!this._hasMadeInitialScroll) {\n            this.scrollToSelectedNode();\n          }\n          this._hasMadeInitialScroll = false;\n          this.enableAnimation = false;\n          this.addedChildrenIds = [];\n          this.isSettingData = false;\n        }\n      }, 1);\n    } else {\n      this.dataSource.data = this._getTreeForDataSource();\n      this.checklistSelection = new SelectionModel<IDataNode>(\n        true,\n        this.treeControl.dataNodes.filter((node: IDataNode) =>\n          this.selectedNodesId.includes(node.ids.id)\n        )\n      );\n      this.expand([...this.expandedNodesIds]);\n      this.enableAnimation = false;\n      this.addedChildrenIds = [];\n    }\n  }\n\n  updateDataSourceOnToggle(isCollapsing: boolean): void {\n    if (isCollapsing) {\n      this.treeControl.dataNodes.push(\n        ..._.differenceBy(\n          this.treeFlattener.flattenNodes(this._getTreeForDataSource()),\n          this.treeControl.dataNodes,\n          (node: IFlatDataNode) => node.ids.id\n        )\n      );\n    } else {\n      const lastDisplayedNodeIndex: number =\n        this.firstDisplayedIndex + this.nbDisplayedNodes - 1;\n\n      const mapFlatDataNodeIndexById: {\n        [id: string]: { node: IFlatDataNode; index: number };\n      } = _.fromPairs(\n        this.treeControl.dataNodes.map((node, index) => [\n          node.ids.id,\n          { node, index },\n        ])\n      );\n\n      this.treeControl.dataNodes.splice(\n        mapFlatDataNodeIndexById[\n          this.flattenDataTreeIds[lastDisplayedNodeIndex]\n        ].index +\n          getAllChildrenLength(\n            mapFlatDataNodeIndexById[\n              this.flattenDataTreeIds[lastDisplayedNodeIndex]\n            ].node\n          ) +\n          1\n      );\n    }\n  }\n\n  getVirtualScrollViewportMinWidth(): void {\n    setNodeIdWidthMap(\n      this.nodesIdWidth,\n      this.flattenDataTreeIds,\n      this.isSelectOnlyModeEnabled\n    );\n    this.nodesMinWidthAsNumber = getGreatestNodesMinWidth(\n      this.nodesIdWidth,\n      this.nodesMinWidthAsNumber\n    );\n    let standardMinWidth = 0;\n    if (this.divMatTree) {\n      if (!this.isSelectOnlyModeEnabled) {\n        standardMinWidth = Number(\n          getComputedStyle(this.divMatTree.nativeElement)\n            .getPropertyValue('min-width')\n            .replace('px', '')\n        );\n      } else {\n        standardMinWidth = this.divMatTree.nativeElement.offsetWidth;\n      }\n    }\n    if (this.nodesMinWidthAsNumber < standardMinWidth) {\n      if (this.isSelectOnlyModeEnabled) {\n        this.viewportMinWidth = '100%';\n      } else {\n        this.nodesMinWidthAsNumber = standardMinWidth;\n        this.viewportMinWidth = this.nodesMinWidthAsNumber + 'px';\n      }\n    } else {\n      if (\n        this.isSelectOnlyModeEnabled ||\n        (!this.isSelectOnlyModeEnabled && this.isLargeScreen)\n      ) {\n        this.viewportMinWidth = this.nodesMinWidthAsNumber + 'px';\n      } else {\n        this.viewportMinWidth = '100%';\n      }\n    }\n    this.widthUpdated.emit(this.viewportMinWidth);\n  }\n\n  updateDataSourceOnInitAndOnSearch(): void {\n    this.updateDataTreeOnSetAndOnSearch();\n    this.updateFlattenTreePropertiesOnSetAndOnSearch();\n    this.enableAnimation = true;\n    this.addedChildrenIds = [...this.flattenDataTreeIds];\n    this.updateDataSource();\n  }\n\n  scrollToSelectedNode(): void {\n    if (this.virtualScroll) {\n      const indexToScroll: number = this.flattenDataTreeIds.includes(\n        this.selectedNodeId\n      )\n        ? this.flattenDataTreeIds.indexOf(this.selectedNodeId)\n        : 0;\n      this.virtualScroll.scrollToIndex(indexToScroll);\n    }\n  }\n\n  private _setVirtualScrollViewportHeight(): void {\n    const displayedNodesHeight: number =\n      (this.nbDisplayedNodes + 1) * this.STANDARD_NODE_HEIGHT;\n\n    const maxTreeHeightInDialog: number =\n      this.MAX_WINDOW_HEIGHT_PERCENTAGE * window.innerHeight;\n\n    this.viewportHeight =\n      displayedNodesHeight < maxTreeHeightInDialog || this.isScrollDisable\n        ? displayedNodesHeight\n        : maxTreeHeightInDialog;\n  }\n\n  public isActiveNodeLink(\n    nodeId: string,\n    type: string = null,\n    childrenType: string = null\n  ): boolean {\n    return (\n      (!this.isSelectOnlyModeEnabled && nodeId === this.selectedNodeId) ||\n      (this.isSelectOnlyModeEnabled &&\n        this.selectMode === ETreeSelectMode.SINGLE &&\n        this.activeNode &&\n        this.activeNode.ids.id === nodeId &&\n        (childrenType === null || type === childrenType))\n    );\n  }\n\n  public onCheckMatBox(node: IDataNode): void {\n    this.checklistSelection.toggle(node);\n    this.selectedNodes.emit(this.checklistSelection.selected);\n  }\n\n  public onClickOnTreeNode(node: IDataNode): void {\n    if (\n      this.isSelectOnlyModeEnabled &&\n      node.ids.id !== this.selectedNodeId &&\n      this.selectMode === ETreeSelectMode.SINGLE &&\n      node.type === this.selectedResourceTypeId\n    ) {\n      this.getActiveNode(node);\n    } else if (!this.isSelectOnlyModeEnabled) {\n      this.setEntryIdsInStore(node.ids, node.parentIds);\n    }\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  #divGenericTree\n  fxLayout=\"column\"\n  [ngClass]=\"\n    isSelectOnlyModeEnabled\n      ? 'div-generic-tree-dialog'\n      : 'div-generic-tree-component'\n  \"\n>\n  <div\n    [ngClass]=\"\n      isSelectOnlyModeEnabled\n        ? 'div-mat-tree-dialog'\n        : isLargeScreen\n          ? 'div-mat-tree-lg-screen'\n          : 'div-mat-tree-sm-screen'\n    \"\n    #divMatTree\n  >\n    <cdk-virtual-scroll-viewport\n      [style.height.px]=\"viewportHeight\"\n      [style.width]=\"viewportMinWidth\"\n      [itemSize]=\"STANDARD_NODE_HEIGHT\"\n      [minBufferPx]=\"viewportHeight\"\n    >\n      <ng-container\n        *cdkVirtualFor=\"let item of flattenDataTreeIds\"\n      ></ng-container>\n      <mat-tree\n        #tree\n        [dataSource]=\"dataSource\"\n        [treeControl]=\"treeControl\"\n        class=\"gnc-tree\"\n      >\n        <!-- This is the template for the common part of any node -->\n        <ng-template #nodeInfo let-node=\"node\">\n          <div\n            fxFlex\n            fxLayout=\"row\"\n            [ngClass]=\"\n              isSelectOnlyModeEnabled &&\n              (node.ids.id === selectedNodeId ||\n                node.type !== selectedResourceTypeId)\n                ? 'disabled-div'\n                : ''\n            \"\n            class=\"data-info\"\n          >\n            <button\n              fxFlexFill\n              fxLayout=\"row\"\n              fxLayoutAlign=\"start center\"\n              [title]=\"node.name\"\n              class=\"btn-node\"\n            >\n              <span\n                appColorSearchedLetters\n                [name]=\"node.name\"\n                [nodeIds]=\"node.ids\"\n                [title]=\"node.name\"\n                [search]=\"search\"\n                [isFilteringOnExternalId]=\"isFilteringOnExternalId\"\n                [isAdvancedSearchActivated]=\"isAdvancedSearchActivated\"\n                [nodesIdsMatchingAdvancedSearch]=\"\n                  nodesIdsMatchingAdvancedSearch\n                \"\n                classToApply=\"highlight\"\n                nodesMatchingSearchClass=\"node-matching-search\"\n                class=\"data-name ellipsis\"\n                id=\"{{ node.ids.id }}\"\n              ></span>\n            </button>\n          </div>\n        </ng-template>\n\n        <!-- mat-tree-node is used for ending nodes (without children) -->\n        <mat-tree-node\n          *matTreeNodeDef=\"let node\"\n          @fadeTree\n          [@.disabled]=\"\n            !(enableAnimation && addedChildrenIds.includes(node.ids.id))\n          \"\n          class=\"gnc-tree-node parent-node-without-children\"\n          [style.paddingLeft.px]=\"\n            node.levelForPadding * STANDARD_NODE_PADDING_LEFT\n          \"\n          id=\"{{\n            !isSelectOnlyModeEnabled\n              ? 'node-' + node.ids.id\n              : 'selected-mode-node-' + node.ids.id\n          }}\"\n        >\n          <div\n            fxFlex\n            fxLayout=\"row\"\n            fxLayoutAlign=\"start center\"\n            tabindex=\"-1\"\n            [routerLink]=\"!isSelectOnlyModeEnabled ? [getLink(node)] : []\"\n            [ngClass]=\"{\n              'active-node-link': isActiveNodeLink(\n                node.ids.id,\n                node.type,\n                node.childrenType\n              )\n            }\"\n            (click)=\"onClickOnTreeNode(node)\"\n            class=\"gnc-tree-node-content\"\n          >\n            <button mat-icon-button disabled></button>\n            <mat-checkbox\n              *ngIf=\"\n                isSelectOnlyModeEnabled &&\n                selectMode === allTreeSelectMode.MULTIPLE &&\n                node.type === selectedResourceTypeId\n              \"\n              [checked]=\"checklistSelection.isSelected(node)\"\n              (change)=\"onCheckMatBox(node)\"\n            ></mat-checkbox>\n            <ng-container\n              [ngTemplateOutlet]=\"nodeInfo\"\n              [ngTemplateOutletContext]=\"{ node: node }\"\n            ></ng-container>\n          </div>\n          <div\n            *ngIf=\"!isSelectOnlyModeEnabled\"\n            fxLayout=\"row\"\n            class=\"ellipsis-menu\"\n          >\n            <ng-container\n              [ngTemplateOutlet]=\"actionsMenuTemplate\"\n              [ngTemplateOutletContext]=\"{\n                node,\n                selectedElementsUiIds: [\n                  {\n                    id: node.ids.id,\n                    externalId: node.ids.externalId,\n                    label: node.name\n                  }\n                ]\n              }\"\n            ></ng-container>\n          </div>\n        </mat-tree-node>\n\n        <!-- mat-nested-tree-node is used for branching nodes (with childrens) -->\n        <mat-tree-node\n          *matTreeNodeDef=\"let node; when: hasChild\"\n          @fadeTree\n          [@.disabled]=\"\n            !(enableAnimation && addedChildrenIds.includes(node.ids.id))\n          \"\n          [ngClass]=\"\n            !treeControl.isExpandable(node)\n              ? 'parent-node-without-children'\n              : ''\n          \"\n          class=\"gnc-tree-node\"\n          [style.paddingLeft.px]=\"\n            node.levelForPadding * STANDARD_NODE_PADDING_LEFT\n          \"\n          id=\"{{\n            !isSelectOnlyModeEnabled\n              ? 'node-' + node.ids.id\n              : 'selected-mode-node-' + node.ids.id\n          }}\"\n        >\n          <div fxLayout=\"row\">\n            <div\n              fxFlex\n              fxLayout=\"row\"\n              fxLayoutAlign=\"start center\"\n              tabindex=\"-1\"\n              [routerLink]=\"!isSelectOnlyModeEnabled ? [getLink(node)] : []\"\n              [ngClass]=\"{\n                'active-node-link': isActiveNodeLink(\n                  node.ids.id,\n                  node.type,\n                  node.childrenType\n                )\n              }\"\n              (click)=\"onClickOnTreeNode(node)\"\n              class=\"gnc-tree-node-content\"\n            >\n              <button\n                *ngIf=\"treeControl.isExpandable(node)\"\n                mat-icon-button\n                (click)=\"$event.stopPropagation(); onToggleFold(node)\"\n                class=\"btn-toggle\"\n              >\n                <mat-icon aria-hidden=\"true\" class=\"mat-icon-rtl-mirror\">\n                  {{\n                    treeControl.isExpanded(node)\n                      ? 'arrow_drop_down'\n                      : 'arrow_right'\n                  }}\n                </mat-icon>\n              </button>\n              <mat-checkbox\n                *ngIf=\"\n                  isSelectOnlyModeEnabled &&\n                  selectMode === allTreeSelectMode.MULTIPLE &&\n                  node.type === selectedResourceTypeId\n                \"\n                [checked]=\"checklistSelection.isSelected(node)\"\n                (click)=\"onClickOnTreeNode(node)\"\n              ></mat-checkbox>\n              <ng-container\n                [ngTemplateOutlet]=\"nodeInfo\"\n                [ngTemplateOutletContext]=\"{ node: node }\"\n              ></ng-container>\n            </div>\n            <div\n              *ngIf=\"!isSelectOnlyModeEnabled\"\n              fxLayout=\"row\"\n              class=\"ellipsis-menu\"\n            >\n              <ng-container\n                [ngTemplateOutlet]=\"actionsMenuTemplate\"\n                [ngTemplateOutletContext]=\"{\n                  node,\n                  selectedElementsUiIds: getNodesForDeleteActions(node)\n                }\"\n              ></ng-container>\n            </div>\n          </div>\n          <div *ngIf=\"treeControl.isExpanded(node)\" class=\"data-info\">\n            <ng-container matTreeNodeOutlet></ng-container>\n          </div>\n        </mat-tree-node>\n      </mat-tree>\n    </cdk-virtual-scroll-viewport>\n  </div>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpResponse } from '@angular/common/http';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Select } from '@ngxs/store';\nimport {\n  Observable,\n  Subject,\n  catchError,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  of,\n  startWith,\n  switchMap,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport {\n  DataService,\n  EResourceComponent,\n  ErrorsHandlerService,\n  IConfig,\n  IData,\n  IDataItem,\n  IDataNode,\n  ISearchBarAccessibility,\n  InteractionsService,\n  UiState,\n  getDisplayedColumnsIds,\n  getFlattenTreeWithoutTriggeredNodeChildren,\n  getParentNodeId,\n  getSearchRequestScimBody,\n  simpleSearchFormDataElement,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-search-bar',\n  templateUrl: './search-bar.component.html',\n  styleUrls: ['./search-bar.component.scss'],\n})\nexport class SearchBarComponent implements OnInit, OnDestroy {\n  @Select(UiState.getSearchBarAccessibility)\n  searchBarAccessibility$: Observable<ISearchBarAccessibility>;\n\n  private _onDestroy$ = new Subject<void>();\n\n  public searchForm: FormGroup;\n\n  public elementRef: ElementRef;\n\n  public lastSearchValueHandled = '';\n  public isFetchingResources = false;\n\n  @Input() placeholder: string;\n  @Input() triggerElementId: string;\n\n  // Backend search inputs\n  @Input() config: IConfig;\n  @Input() endpoint: string;\n  @Input() searchRequestAttributes: string[];\n  @Input() extendedMeta: boolean;\n\n  // Local search inputs\n  @Input() isLocalSearchModeEnabled = false;\n  @Input() dataToFilter: IDataNode[] | IData | IDataItem[];\n  @Input() resourceTypeComponent: EResourceComponent;\n\n  @Output() searchResult = new EventEmitter<IData | IDataNode[]>();\n  @Output() resetSearch = new EventEmitter<void>();\n  @Output() isActiveSearch = new EventEmitter<boolean>();\n\n  constructor(\n    private fb: FormBuilder,\n    private _errorsHandlerService: ErrorsHandlerService,\n    private _dataService: DataService,\n    private _interactionsService: InteractionsService,\n    private _el: ElementRef\n  ) {\n    this.elementRef = this._el;\n  }\n\n  ngOnInit(): void {\n    this.searchForm = this.fb.group({\n      search: '',\n    });\n\n    this.searchForm\n      .get('search')\n      .valueChanges.pipe(\n        debounceTime(600),\n        takeUntil(this._onDestroy$),\n        startWith(this.searchForm.value),\n        distinctUntilChanged((prev, curr) => prev === curr),\n        filter((curr: string) => {\n          if (curr === null || curr.length <= 2) {\n            this.isFetchingResources = false;\n            this._interactionsService.cancelRequest();\n            this.resetSearch.emit();\n            this.isActiveSearch.emit(false);\n          } else if (curr === this.lastSearchValueHandled) {\n            this.isFetchingResources = false;\n            this._interactionsService.cancelRequest();\n          }\n          return (\n            curr !== null &&\n            curr.length > 2 &&\n            curr !== this.lastSearchValueHandled\n          );\n        }),\n        switchMap((_) => {\n          if (this.isLocalSearchModeEnabled) {\n            switch (this.resourceTypeComponent) {\n              case EResourceComponent.TREE:\n                const flattenDataTree: IDataNode[] =\n                  getFlattenTreeWithoutTriggeredNodeChildren(\n                    this.dataToFilter as IDataNode[],\n                    this.triggerElementId\n                  );\n                const parentNodeId: string = getParentNodeId(\n                  this.triggerElementId,\n                  this.dataToFilter as IDataNode[]\n                );\n                this.searchResult.emit(\n                  flattenDataTree\n                    .map((node: IDataNode) => ({\n                      ...node,\n                      link: node.link\n                        .split('/')\n                        .map((linkPart: string) => decodeURIComponent(linkPart))\n                        .join('/'),\n                    }))\n                    .filter(\n                      (node: IDataNode) =>\n                        node.link\n                          .getRidOfDiacritics()\n                          .toLocaleUpperCase()\n                          .includes(\n                            this.searchForm\n                              .get('search')\n                              .value.getRidOfDiacritics()\n                              .toLocaleUpperCase()\n                          ) && node.ids.id !== parentNodeId\n                    )\n                );\n                this.isActiveSearch.emit(true);\n                break;\n              default:\n                break;\n            }\n            return of(null);\n          } else {\n            const filterScim: string = simpleSearchFormDataElement(\n              this.searchForm.get('search').value,\n              getDisplayedColumnsIds(this.config)\n            );\n            const searchRequestScimBody: any = getSearchRequestScimBody(\n              this.searchRequestAttributes\n            );\n            this.isFetchingResources = true;\n            return this._dataService\n              .search(\n                this.endpoint,\n                filterScim,\n                true,\n                searchRequestScimBody,\n                this.extendedMeta\n              )\n              .pipe(\n                tap((response: HttpResponse<IData>) => {\n                  this.isFetchingResources = false;\n                  if (response.status === 200 || response.status === 201) {\n                    this.searchResult.emit(response.body);\n                    this.isActiveSearch.emit(true);\n                    this.lastSearchValueHandled =\n                      this.searchForm.get('search').value;\n                  }\n                }),\n                catchError((err) => {\n                  this.lastSearchValueHandled =\n                    this.searchForm.get('search').value;\n                  this.isFetchingResources = false;\n                  this.isActiveSearch.emit(false);\n                  return this._errorsHandlerService.handleError(err);\n                })\n              );\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  resetSearchForm(): void {\n    this._interactionsService.cancelRequest();\n    this.searchForm.reset();\n    this.searchForm.enable({ emitEvent: false });\n    this.resetSearch.emit();\n    this.isActiveSearch.emit(false);\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<form [formGroup]=\"searchForm\" class=\"search-form\">\n  <div class=\"div-form-search-input\">\n    <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n      <mat-form-field\n        *ngIf=\"searchBarAccessibility$ | async as searchBarAccessibility\"\n        fxFlex\n        color=\"accent\"\n        appearance=\"fill\"\n        class=\"search-form-field\"\n      >\n        <mat-label>\n          <mat-icon aria-hidden=\"true\">search</mat-icon>\n          {{ searchBarAccessibility.label }}\n        </mat-label>\n        <input\n          #searchInput\n          type=\"text\"\n          matInput\n          cdkFocusInitial\n          formControlName=\"search\"\n          [placeholder]=\"placeholder\"\n          (keydown.enter)=\"$event.preventDefault()\"\n          class=\"search-input\"\n        />\n        <mat-hint *ngIf=\"searchInput?.value?.length < 3\">\n          {{ searchBarAccessibility.hint }}\n        </mat-hint>\n        <div\n          *ngIf=\"searchInput?.value?.length > 0\"\n          matSuffix\n          class=\"div-search-suffix-btn\"\n        >\n          <button\n            mat-icon-button\n            [attr.aria-label]=\"searchBarAccessibility.clearSearch\"\n            (click)=\"resetSearchForm()\"\n            class=\"clear-input-btn\"\n            [matTooltip]=\"searchBarAccessibility.clearSearch\"\n          >\n            <mat-icon aria-hidden=\"true\"> clear </mat-icon>\n          </button>\n        </div>\n      </mat-form-field>\n    </div>\n  </div>\n</form>\n<dm-loading-spinner *ngIf=\"isFetchingResources\"></dm-loading-spinner>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport {\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { Select, Store } from '@ngxs/store';\nimport {\n  Observable,\n  Subject,\n  catchError,\n  defaultIfEmpty,\n  filter,\n  forkJoin,\n  map,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport {\n  ConfigsState,\n  CustomValidators,\n  Data,\n  DataService,\n  DataState,\n  EEllipsisMenuActions,\n  EResourceComponent,\n  ETreeSelectMode,\n  Error as ErrorActions,\n  ErrorsHandlerService,\n  IArrayAttributeUpdateParams,\n  IAssignArrayViewProperties,\n  IAttribute,\n  IConfig,\n  IData,\n  IDataItem,\n  IDataNode,\n  IDataSourceRow,\n  IEditParams,\n  IResourceType,\n  IResourceTypeRequestDetail,\n  IUiEntryIds,\n  InteractionsService,\n  JsTable,\n  ResourcesTypesState,\n  buildTree,\n  cleanAssignDialogTree,\n  convertDataNodeToDataItem,\n  getClickableCellsEndpoints,\n  getDataSourceForGenericArray,\n  getElementIds,\n  getFlattenTree,\n  getFormFieldError,\n  getNodeById,\n  getRequestsDetails,\n  getResponseAttributesIds,\n  getUserActionOnResourceRequest,\n  isDataNode,\n  resourceRequest,\n  toJsTable,\n} from '../../shared';\nimport { GenericListComponent } from '../generic-list/generic-list.component';\nimport { GenericTreeComponent } from '../generic-tree/generic-tree.component';\nimport { SearchBarComponent } from '../search-bar/search-bar.component';\n\nenum EBrowseState {\n  PREVIOUS = 'previous',\n  NEXT = 'NEXT',\n}\n\n@Component({\n  selector: 'dm-confirm-dialog',\n  templateUrl: './confirm-dialog.component.html',\n  styleUrls: ['./confirm-dialog.component.scss'],\n})\nexport class ConfirmDialogComponent implements OnInit, OnDestroy {\n  public onDestroy$ = new Subject<void>();\n  public dataTree: IDataNode[];\n  public dataList: IDataItem[];\n  public dataSource = new MatTableDataSource<any>();\n  public dataTreeAssignAction: IDataNode[];\n  public flattenDataTree: IDataNode[];\n  public selectedElementsIdsForEdit: IUiEntryIds[] = [];\n  public editForm: FormGroup;\n  public selectedResourceTypeId: string;\n  public resourceTypeComponent: EResourceComponent;\n\n  public selectedNode: IDataNode;\n  public selectedNodesId: string[] = [];\n  public selectedItem: IDataItem;\n  public selectedElements: (IDataSourceRow | IDataNode)[] = [];\n  public selectedElementsUiIds: IUiEntryIds[] = [];\n\n  public title: SafeHtml;\n\n  public isActiveSearch = false;\n\n  public isAssignAction = false;\n  public isTwoStepsAssignAction = false;\n  public isReassignAction = false;\n  public isRemovingAction = false;\n  public isEditingAction = false;\n  public isMovingNodeAction = false;\n\n  public stepNumber = 1;\n  public browseStates = EBrowseState;\n  public attributeConfig: IAttribute;\n  public formErrors: { [id: string]: string };\n\n  public resourcesComponents = EResourceComponent;\n  public treeSelectMode = ETreeSelectMode;\n\n  public isMovingToAnotherEntry = false;\n\n  @Select(DataState.getSelectedEntryId)\n  selectedEntryId$: Observable<string>;\n\n  @ViewChild('searchBar') searchBar: SearchBarComponent;\n  @ViewChild('divArrayHeader') divArrayHeader: ElementRef;\n  @ViewChild('divContentArray') divContentArray: ElementRef;\n  @ViewChild('genericList') genericList: GenericListComponent;\n  @ViewChild('assignTree') assignTree: GenericTreeComponent;\n\n  @Output() action$ = new EventEmitter<any>();\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA)\n    public data: {\n      selectedElementsUiIds: IUiEntryIds[];\n      attributeModelRef?: string;\n      title?: string;\n      placeholder?: string;\n      noSearchResult?: string;\n      cancelButtonText?: string;\n      confirmButtonText?: string;\n      moveToRootButtonText?: string;\n      moveToAnotherEntryButtonText?: string;\n      previousStepButtonText?: string;\n      nextStepButtonText?: string;\n      dialogAction?: EEllipsisMenuActions | string;\n      endpoint?: string;\n      assignArrayViewProperties?: IAssignArrayViewProperties;\n      displayedArrayRowsIds?: string[];\n      assignedElementsAttributes?: string[];\n      updateActionsParams?: IArrayAttributeUpdateParams;\n      mapSelectedElementIdEditableValue: Map<string, string>;\n      triggerElementId?: string;\n      fieldForUpdate?: string;\n    },\n    private _interactionsService: InteractionsService,\n    private _store$: Store,\n    private _dataService: DataService,\n    private _errorHandlerService: ErrorsHandlerService,\n    private _fb: FormBuilder\n  ) {}\n\n  ngOnInit(): void {\n    this.selectedElementsUiIds = this.data.selectedElementsUiIds;\n\n    this.isAssignAction = this.data.dialogAction === 'assign';\n\n    this.isTwoStepsAssignAction =\n      this.isAssignAction &&\n      this.data.updateActionsParams.assign.isMultipleStepsAssign;\n\n    this.isReassignAction =\n      this.data.dialogAction === EEllipsisMenuActions.SINGLE_REASSIGN ||\n      this.data.dialogAction === EEllipsisMenuActions.MULTIPLE_REASSIGN;\n\n    this.isRemovingAction =\n      this.data.dialogAction === EEllipsisMenuActions.DELETE ||\n      this.data.dialogAction === EEllipsisMenuActions.DELETE_CHILD ||\n      this.data.dialogAction === EEllipsisMenuActions.DELETE_CHILDREN ||\n      this.data.dialogAction === EEllipsisMenuActions.SINGLE_DELETE ||\n      this.data.dialogAction === EEllipsisMenuActions.MULTIPLE_DELETE ||\n      this.data.dialogAction === EEllipsisMenuActions.SINGLE_UNASSIGN ||\n      this.data.dialogAction === EEllipsisMenuActions.MULTIPLE_UNASSIGN;\n\n    this.isEditingAction =\n      this.data.dialogAction === EEllipsisMenuActions.SINGLE_EDIT ||\n      this.data.dialogAction === EEllipsisMenuActions.MULTIPLE_EDIT;\n\n    this.isMovingNodeAction =\n      this.data.dialogAction === EEllipsisMenuActions.MOVE_NODE;\n\n    if (\n      this.isReassignAction ||\n      this.isTwoStepsAssignAction ||\n      this.isEditingAction\n    ) {\n      this.selectedResourceTypeId = this._store$.selectSnapshot(\n        DataState.getSelectedResourceTypeId\n      );\n    }\n\n    if (this.isEditingAction || this.isTwoStepsAssignAction) {\n      const allAttributesConfig: IAttribute[] = this._store$.selectSnapshot(\n        ConfigsState.getConfigsById\n      )[this.selectedResourceTypeId]?.attributes;\n\n      this.attributeConfig = allAttributesConfig.find(\n        (attribute: IAttribute) =>\n          attribute.modelRef === this.data.attributeModelRef\n      );\n    }\n\n    if (this.isReassignAction) {\n      switch (this.data.updateActionsParams.reassign.resourceTypeComponent) {\n        case EResourceComponent.TREE:\n          this._interactionsService.displayedDataTree$\n            .pipe(\n              takeUntil(this.onDestroy$),\n              tap((dataTree: IDataNode[]) => {\n                this.dataTree = [...dataTree];\n                this.flattenDataTree = getFlattenTree(this.dataTree);\n              })\n            )\n            .subscribe();\n          break;\n        case EResourceComponent.LIST:\n          this._interactionsService.displayedDataList$\n            .pipe(\n              takeUntil(this.onDestroy$),\n              tap((dataList: IDataItem[]) => (this.dataList = [...dataList]))\n            )\n            .subscribe();\n          break;\n      }\n    } else if (this.isMovingNodeAction) {\n      const selectedResourceTypeId: string = this._store$.selectSnapshot(\n        DataState.getSelectedResourceTypeId\n      );\n      this.resourceTypeComponent = this._store$.selectSnapshot(\n        ConfigsState.getConfigsById\n      )[selectedResourceTypeId]?.component;\n\n      this._interactionsService.displayedDataTree$\n        .pipe(\n          takeUntil(this.onDestroy$),\n          tap((dataTree: IDataNode[]) => {\n            this.dataTree = [...dataTree];\n            this.flattenDataTree = getFlattenTree(this.dataTree);\n            const triggerNode: IDataNode = this.flattenDataTree.find(\n              (node: IDataNode) => node.ids.id === this.data.triggerElementId\n            );\n            if (triggerNode) {\n              this.isMovingToAnotherEntry = triggerNode.parentIds.id === 'root';\n            }\n          })\n        )\n        .subscribe();\n    } else if (\n      this.isAssignAction &&\n      this.data.updateActionsParams.assign.resourceTypeComponent ===\n        EResourceComponent.TREE\n    ) {\n      const resourcesTypes: JsTable<IResourceType> =\n        this._store$.selectSnapshot(\n          ResourcesTypesState.getResourcesTypesJsTable\n        );\n      const configs: JsTable<IConfig> = this._store$.selectSnapshot(\n        ConfigsState.getConfigsJsTable\n      );\n\n      const treeRequestsDetails: IResourceTypeRequestDetail[] =\n        getRequestsDetails(\n          this.data.updateActionsParams.assign.requestedResourceTypeId,\n          configs,\n          resourcesTypes,\n          this.data.updateActionsParams.assign.assignedResourceTypeId\n        );\n\n      this._interactionsService.isProcessingRequest(true);\n      let areTreeRequestsIn404Error = false;\n      forkJoin(\n        treeRequestsDetails.map(\n          (treeRequestDetail: IResourceTypeRequestDetail) => {\n            const responseAttributesIds: string[] = getResponseAttributesIds(\n              configs.byId[treeRequestDetail.resourceTypeId],\n              treeRequestDetail.resourceTypeId\n            );\n\n            return resourceRequest(\n              null,\n              treeRequestDetail,\n              responseAttributesIds,\n              this._dataService\n            ).pipe(\n              map((response: HttpResponse<IData> | IData) =>\n                'body' in response\n                  ? (response as HttpResponse<IData>).body\n                  : response\n              ),\n              catchError((error) => {\n                if (!areTreeRequestsIn404Error) {\n                  this._store$.dispatch([\n                    new ErrorActions.SetErrorDetail({\n                      error,\n                      userActionOnError: getUserActionOnResourceRequest(\n                        this.data.updateActionsParams.assign\n                          .resourceTypeComponent\n                      ),\n                    }),\n                    new ErrorActions.IsHandlingError(true),\n                  ]);\n                }\n                areTreeRequestsIn404Error =\n                  !areTreeRequestsIn404Error &&\n                  error instanceof HttpErrorResponse &&\n                  error.status === 404;\n                return this._errorHandlerService.handleError(error);\n              })\n            );\n          }\n        )\n      )\n        .pipe(\n          takeUntil(this.onDestroy$),\n          filter((resources) => {\n            this._interactionsService.isProcessingRequest(false);\n            const oneRequestFailed: boolean = resources.some(\n              (resource: IData | Error | HttpErrorResponse) =>\n                resource instanceof Error ||\n                resource instanceof HttpErrorResponse\n            );\n            if (oneRequestFailed) {\n              this._store$.dispatch(new Data.FetchResourcesError());\n              this.dataTreeAssignAction = [];\n            }\n            return !oneRequestFailed;\n          }),\n          defaultIfEmpty([]),\n          tap((resources: IData[]) => {\n            const resourcesAsJsTable: JsTable<IData> = toJsTable<IData>(\n              resources.reduce(\n                (acc, curr, index) => ({\n                  ...acc,\n                  [treeRequestsDetails[index].resourceTypeId]: {\n                    ...curr,\n                    Resources: curr.Resources.filter(\n                      (data: any) =>\n                        !this.data.displayedArrayRowsIds.includes(data.id)\n                    ),\n                  },\n                }),\n                {}\n              )\n            );\n            this.dataTreeAssignAction = cleanAssignDialogTree(\n              buildTree(resourcesAsJsTable, configs, treeRequestsDetails),\n              this.data.updateActionsParams.assign.assignedResourceTypeId\n            );\n            this.flattenDataTree = getFlattenTree(this.dataTreeAssignAction);\n          })\n        )\n        .subscribe();\n    } else if (this.isEditingAction) {\n      this.selectedElementsIdsForEdit = this.data.selectedElementsUiIds;\n      this._setEditForm();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  onSelectedNode(node: IDataNode): void {\n    this.selectedNode = node;\n  }\n\n  onSelectedItem(item: IDataItem): void {\n    this.selectedItem = item;\n    if (this.isMovingNodeAction) {\n      switch (this.resourceTypeComponent) {\n        case EResourceComponent.TREE:\n          this.selectedNode = getNodeById(\n            this.selectedItem.ids.id,\n            this.dataTree\n          );\n          break;\n        default:\n          break;\n      }\n    }\n  }\n\n  onSearch(event: IData | IDataNode[]): void {\n    if (this.isMovingNodeAction) {\n      this.dataList = (event as IDataNode[]).map((node: IDataNode) =>\n        convertDataNodeToDataItem(node, 'link')\n      );\n    } else if (this.isAssignAction) {\n      if (this.data.fieldForUpdate) {\n        (event as IData).Resources?.forEach((data) => {\n          data = {\n            ...data,\n            meta: {\n              ...data.meta,\n              isModifiable:\n                data.meta.isModifiable &&\n                data.meta.modifiableAttributes.includes(\n                  this.data.fieldForUpdate\n                ),\n            },\n          };\n        });\n      }\n\n      const dataResourcesAsFlatArray: any[] = getDataSourceForGenericArray(\n        event as IData,\n        this.data.assignArrayViewProperties.resourceTypeConfig,\n        getClickableCellsEndpoints(\n          this._store$.selectSnapshot(\n            ResourcesTypesState.getResourcesTypesJsTable\n          ),\n          this._store$.selectSnapshot(ConfigsState.getConfigsAllIds),\n          this.data.assignArrayViewProperties.resourceTypeConfig\n        ),\n        true\n      );\n      this.dataSource = new MatTableDataSource<any>(\n        dataResourcesAsFlatArray.filter(\n          (resource: any) =>\n            !this.data.displayedArrayRowsIds.includes(resource.id)\n        )\n      );\n    }\n  }\n\n  onResetSearch(): void {\n    this.dataSource.data = [];\n    this.dataList = [];\n  }\n\n  onActiveSearch(event: boolean): void {\n    this.isActiveSearch = event;\n  }\n\n  selectedData(data: IDataSourceRow[] | IDataNode[]): void {\n    if (\n      this.data.updateActionsParams.assign.resourceTypeComponent ===\n      EResourceComponent.TREE\n    ) {\n      this.selectedElements = data;\n      this.selectedNodesId = this.selectedElements\n        .filter((element: IDataSourceRow | IDataNode) => isDataNode(element))\n        .map((node: IDataNode) => node.ids.id);\n    } else {\n      this.selectedElements = data;\n      this.selectedElementsUiIds = this.selectedElements.map(\n        (element: IDataSourceRow) => element.selectionIds\n      );\n    }\n  }\n\n  getChildHeight(): number {\n    if (!!this.genericList) {\n      return this.genericList.elementRef.nativeElement.offsetHeight;\n    } else if (\n      !!(this.divArrayHeader && this.searchBar && this.divContentArray)\n    ) {\n      return (\n        this.divArrayHeader.nativeElement.offsetHeight +\n        this.searchBar.elementRef.nativeElement.offsetHeight +\n        this.divContentArray.nativeElement.offsetHeight\n      );\n    } else {\n      return 0;\n    }\n  }\n\n  submitAction() {\n    this.action$.emit();\n  }\n\n  private _setEditForm(): void {\n    this.editForm = this._fb.group(\n      this.selectedElementsIdsForEdit.reduce((acc, ids) => {\n        this.formErrors = { ...this.formErrors, [ids.id]: null };\n        return {\n          ...acc,\n          [ids.id]: new FormControl(\n            this.data.mapSelectedElementIdEditableValue?.get(ids.id),\n            this._getValidators(this.data.updateActionsParams.edit)\n          ),\n        };\n      }, {})\n    );\n  }\n\n  public changeAssignStep(state: EBrowseState): void {\n    if (state === EBrowseState.NEXT) {\n      this.selectedElementsIdsForEdit = [];\n      this.selectedElements.forEach((element: IDataSourceRow | IDataNode) => {\n        const ids: IUiEntryIds = getElementIds(element);\n        this.selectedElementsIdsForEdit.push(ids);\n        if (!!this.editForm && !this.editForm.contains(ids.id)) {\n          this.formErrors = { ...this.formErrors, [ids.id]: null };\n          this.editForm.addControl(\n            ids.id,\n            new FormControl(\n              null,\n              this._getValidators(this.data.updateActionsParams.edit)\n            )\n          );\n        }\n      });\n\n      if (!!this.editForm) {\n        const selectedElementsId: string[] =\n          this.selectedElementsIdsForEdit.map((ids: IUiEntryIds) => ids.id);\n        Object.keys(this.editForm.controls).forEach((id: string) => {\n          if (!selectedElementsId.includes(id)) {\n            this.editForm.removeControl(id);\n            delete this.formErrors[id];\n          }\n        });\n      } else {\n        this._setEditForm();\n      }\n      this.stepNumber++;\n    } else if (state === EBrowseState.PREVIOUS) {\n      this.stepNumber--;\n      if (this.isMovingNodeAction) {\n        this.isMovingToAnotherEntry = false;\n        this.dataList = [];\n      }\n    }\n  }\n\n  private _getValidators(editParams: IEditParams): ValidatorFn[] {\n    let validators: ValidatorFn[] = [Validators.required];\n    if (editParams.props.isInteger) {\n      validators.push(\n        Validators.compose([\n          Validators.min(editParams.props.min),\n          CustomValidators.validIntegerCharacters(),\n        ])\n      );\n    }\n    return validators;\n  }\n\n  public checkFormValue(fieldId: string): void {\n    this.formErrors[fieldId] = getFormFieldError(\n      this.editForm.get(fieldId),\n      this.attributeConfig\n    );\n  }\n\n  public moveToRoot(): void {\n    this.selectedNode = null;\n    this.action$.emit();\n  }\n\n  public moveToAnotherEntry(): void {\n    this.stepNumber++;\n    this.isMovingToAnotherEntry = true;\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<h3 mat-dialog-title [innerHTML]=\"data.title\" class=\"title\"></h3>\n<mat-dialog-content class=\"mat-dialog-content\">\n  <div\n    *ngIf=\"\n      !isEditingAction &&\n      !isMovingNodeAction &&\n      !(isAssignAction && dataSource?.data?.length > 0)\n    \"\n    class=\"div-selected-elements\"\n  >\n    <span *ngFor=\"let element of selectedElementsUiIds; let i = index\">\n      <span *ngIf=\"i < 10\">\n        <span\n          *ngIf=\"\n            i < 9 && i < selectedElementsUiIds?.length - 1;\n            else lastElement\n          \"\n        >\n          {{ element.label }},\n        </span>\n        <ng-template #lastElement>{{ element.label }}</ng-template>\n      </span>\n    </span>\n    <span *ngIf=\"selectedElementsUiIds?.length > 10\">\n      {{ '... (+' + (selectedElementsUiIds.length - 10) + ')' }}\n    </span>\n  </div>\n  <ng-container *ngIf=\"isReassignAction\">\n    <ng-container\n      *ngIf=\"\n        data.updateActionsParams.reassign.resourceTypeComponent ===\n          resourcesComponents.TREE;\n        else genericListTemplate\n      \"\n    >\n      <div class=\"div-content-tree\">\n        <dm-generic-tree\n          [isSelectOnlyModeEnabled]=\"true\"\n          [selectMode]=\"treeSelectMode.SINGLE\"\n          [selectedNodeId]=\"selectedEntryId$ | async\"\n          [selectedResourceTypeId]=\"selectedResourceTypeId\"\n          [flattenInitialDataTree]=\"flattenDataTree\"\n          [initialDataTree]=\"dataTree\"\n          (selectedNode)=\"onSelectedNode($event)\"\n        ></dm-generic-tree>\n      </div>\n    </ng-container>\n    <ng-template #genericListTemplate>\n      <div class=\"div-content-list\">\n        <dm-generic-list\n          [isSelectOnlyModeEnabled]=\"true\"\n          [initialDataList]=\"dataList\"\n          [selectedItemId]=\"selectedEntryId$ | async\"\n          (selectedItem)=\"onSelectedItem($event)\"\n          #genericList\n        ></dm-generic-list>\n      </div>\n    </ng-template>\n  </ng-container>\n  <ng-container *ngIf=\"isAssignAction && stepNumber === 1\">\n    <ng-container\n      *ngIf=\"\n        data.updateActionsParams.assign.resourceTypeComponent ===\n          resourcesComponents.ARRAY;\n        else genericTreeTemplate\n      \"\n      ><div\n        [ngClass]=\"{\n          'div-assign-search-bar':\n            selectedElementsUiIds?.length > 0 && dataSource?.data?.length === 0\n        }\"\n      >\n        <dm-search-bar\n          [endpoint]=\"data.endpoint\"\n          [placeholder]=\"data.placeholder\"\n          [config]=\"data.assignArrayViewProperties.resourceTypeConfig\"\n          [searchRequestAttributes]=\"data.assignedElementsAttributes\"\n          [extendedMeta]=\"data.fieldForUpdate != null\"\n          (searchResult)=\"onSearch($event)\"\n          (resetSearch)=\"onResetSearch()\"\n          (isActiveSearch)=\"onActiveSearch($event)\"\n          #searchBar\n        ></dm-search-bar>\n      </div>\n\n      <ng-container *ngIf=\"isActiveSearch && !searchBar.isFetchingResources\">\n        <div\n          *ngIf=\"dataSource?.data?.length === 0; else displayArray\"\n          fxLayout=\"row\"\n          fxLayoutAlign=\"center start\"\n        >\n          <span class=\"no-search-result\">{{ data.noSearchResult }}</span>\n        </div>\n        <ng-template #displayArray>\n          <div\n            *ngIf=\"dataSource?.data?.length > 0\"\n            class=\"div-generic-array-header\"\n            #divArrayHeader\n          >\n            <dm-generic-array-header\n              [dataLength]=\"dataSource.data.length\"\n              [dataIcon]=\"data.assignArrayViewProperties.icon\"\n              [dataName]=\"data.assignArrayViewProperties.name\"\n            ></dm-generic-array-header>\n          </div>\n          <div class=\"div-content-array\" #divContentArray>\n            <div *ngIf=\"dataSource?.data?.length > 0\" class=\"div-generic-array\">\n              <dm-generic-array\n                [isSelectOnlyModeEnabled]=\"true\"\n                [endpoint]=\"data.endpoint\"\n                [columns]=\"data.assignArrayViewProperties.columns\"\n                [accessibility]=\"data.assignArrayViewProperties.accessibility\"\n                [initialDisplayedColumns]=\"\n                  data.assignArrayViewProperties.displayedColumns\n                \"\n                [selectedElementsUiIds]=\"selectedElementsUiIds\"\n                [isAttributeArray]=\"true\"\n                [updateAffectAnotherResourceType]=\"\n                  data.updateActionsParams.updateAffectAnotherResourceType\n                \"\n                [fieldForUpdate]=\"data.fieldForUpdate\"\n                [dataSource]=\"dataSource\"\n                [actions]=\"{\n                  assign: {\n                    noFilterResult:\n                      data.assignArrayViewProperties.noFilterResult\n                  }\n                }\"\n                (selectedData)=\"selectedData($event)\"\n              ></dm-generic-array>\n            </div>\n          </div>\n        </ng-template>\n      </ng-container>\n    </ng-container>\n    <ng-template #genericTreeTemplate>\n      <div class=\"div-content-tree\">\n        <dm-generic-tree\n          *ngIf=\"dataTreeAssignAction; else loadingSpinner\"\n          [isSelectOnlyModeEnabled]=\"true\"\n          [selectMode]=\"treeSelectMode.MULTIPLE\"\n          [selectedResourceTypeId]=\"\n            data.updateActionsParams?.assign?.assignedResourceTypeId\n          \"\n          [selectedNodesId]=\"selectedNodesId\"\n          [flattenInitialDataTree]=\"flattenDataTree\"\n          [initialDataTree]=\"dataTreeAssignAction\"\n          (selectedNodes)=\"selectedData($event)\"\n          #assignTree\n        ></dm-generic-tree>\n      </div>\n      <ng-template #loadingSpinner>\n        <div class=\"div-loading-spinner\">\n          <dm-loading-spinner></dm-loading-spinner>\n        </div>\n      </ng-template>\n    </ng-template>\n  </ng-container>\n  <ng-container\n    *ngIf=\"isEditingAction || (isTwoStepsAssignAction && stepNumber === 2)\"\n  >\n    <form [formGroup]=\"editForm\" (keydown.tab)=\"$event.stopPropagation()\">\n      <div\n        *ngFor=\"let selectedElementIds of selectedElementsIdsForEdit\"\n        fxLayout=\"row\"\n        fxLayoutAlign=\"center center\"\n        [ngStyle.gt-xs]=\"{ 'padding-bottom.px': 4 }\"\n        [ngStyle.xs]=\"{ 'padding-bottom.px': 2 }\"\n        class=\"div-form-field\"\n      >\n        <span fxFlex class=\"edited-entry-id ellipsis\">{{\n          selectedElementIds.label\n        }}</span>\n        <mat-form-field fxFlex color=\"accent\" class=\"custom-form-field\">\n          <mat-label fxLayout=\"row\">\n            {{ data.updateActionsParams.edit.props.label }}\n          </mat-label>\n          <input\n            matInput\n            appOmitChars\n            [formControlName]=\"selectedElementIds.id\"\n            [type]=\"data.updateActionsParams.edit.props.type\"\n            [min]=\"data.updateActionsParams.edit.props.min\"\n            [invalidChars]=\"\n              data.updateActionsParams.edit.props.invalidCharacters\n            \"\n            (ngModelChange)=\"checkFormValue(selectedElementIds.id)\"\n            class=\"ellipsis\"\n          />\n          <mat-error>{{ formErrors[selectedElementIds.id] }}</mat-error>\n        </mat-form-field>\n      </div>\n    </form>\n  </ng-container>\n  <ng-container *ngIf=\"isMovingNodeAction\">\n    <ng-template #moveMenu>\n      <div fxLayout=\"column\">\n        <button\n          mat-button\n          color=\"accent\"\n          (click)=\"moveToRoot()\"\n          class=\"move-node-menu-btn\"\n        >\n          {{ data.moveToRootButtonText }}\n        </button>\n        <button\n          mat-button\n          color=\"accent\"\n          (click)=\"moveToAnotherEntry()\"\n          class=\"move-node-menu-btn\"\n        >\n          {{ data.moveToAnotherEntryButtonText }}\n        </button>\n      </div>\n    </ng-template>\n    <ng-container *ngIf=\"isMovingToAnotherEntry; else moveMenu\">\n      <dm-search-bar\n        [placeholder]=\"data.placeholder\"\n        [isLocalSearchModeEnabled]=\"true\"\n        [dataToFilter]=\"dataTree\"\n        [triggerElementId]=\"data.triggerElementId\"\n        [resourceTypeComponent]=\"resourceTypeComponent\"\n        (searchResult)=\"onSearch($event)\"\n        (resetSearch)=\"onResetSearch()\"\n        (isActiveSearch)=\"onActiveSearch($event)\"\n      ></dm-search-bar>\n      <div\n        *ngIf=\"isActiveSearch && dataList?.length === 0; else displayList\"\n        fxLayout=\"row\"\n        fxLayoutAlign=\"center start\"\n      >\n        <span class=\"no-search-result\">{{ data.noSearchResult }}</span>\n      </div>\n      <ng-template #displayList>\n        <div class=\"div-content-list\">\n          <dm-generic-list\n            [isSelectOnlyModeEnabled]=\"true\"\n            [initialDataList]=\"dataList\"\n            (selectedItem)=\"onSelectedItem($event)\"\n            #genericList\n          ></dm-generic-list>\n        </div>\n      </ng-template>\n    </ng-container>\n  </ng-container>\n</mat-dialog-content>\n<mat-dialog-actions\n  *ngIf=\"!isMovingNodeAction || isMovingToAnotherEntry\"\n  [ngStyle]=\"\n    (isTwoStepsAssignAction || isMovingNodeAction) && stepNumber > 1\n      ? { 'justify-content': 'space-between' }\n      : { 'justify-content': 'flex-end' }\n  \"\n>\n  <button\n    *ngIf=\"(isTwoStepsAssignAction || isMovingNodeAction) && stepNumber > 1\"\n    mat-raised-button\n    class=\"assign-edit-unassign-move-action-confirm-btn\"\n    (click)=\"changeAssignStep(browseStates.PREVIOUS)\"\n  >\n    {{ data.previousStepButtonText }}\n  </button>\n  <div>\n    <button\n      cdkFocusInitial\n      mat-button\n      color=\"accent\"\n      [mat-dialog-close]=\"false\"\n      class=\"btn-close-confirm-dialog\"\n    >\n      {{ data.cancelButtonText }}\n    </button>\n    <button\n      *ngIf=\"\n        isTwoStepsAssignAction &&\n          stepNumber < data.updateActionsParams.assign.nbSteps;\n        else confirmBtn\n      \"\n      mat-raised-button\n      [disabled]=\"selectedElements.length === 0\"\n      (click)=\"changeAssignStep(browseStates.NEXT)\"\n      class=\"assign-edit-unassign-move-action-confirm-btn\"\n    >\n      {{ data.nextStepButtonText }}\n    </button>\n    <ng-template #confirmBtn>\n      <button\n        mat-raised-button\n        [disabled]=\"\n          ((isReassignAction || isMovingNodeAction) &&\n            !selectedNode &&\n            !selectedItem) ||\n          (isAssignAction && selectedElements.length === 0) ||\n          ((isTwoStepsAssignAction || isEditingAction) &&\n            (editForm.pristine || !editForm.valid))\n        \"\n        [ngClass]=\"\n          isRemovingAction\n            ? 'delete-action-confirm-btn'\n            : 'assign-edit-unassign-move-action-confirm-btn'\n        \"\n        (click)=\"submitAction()\"\n      >\n        {{ data.confirmButtonText }}\n      </button>\n    </ng-template>\n  </div>\n</mat-dialog-actions>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { download, generateCsv, mkConfig } from 'export-to-csv';\nimport { takeUntil, tap } from 'rxjs';\nimport {\n  DataViewProperties,\n  EEllipsisMenuActions,\n  EUIComponent,\n  IArrayAttributeUpdateParams,\n  IAttributeActions,\n  IDataItem,\n  IDataNode,\n  IDataSourceRow,\n  IDeleteMultipleEntries,\n  IDeleteSingleEntry,\n  IEditMultipleDataSourceRow,\n  IEditSingleDataSourceRow,\n  IEllipsisBtn,\n  IEllipsisMenuOptions,\n  IMoveDataNode,\n  IMoveElements,\n  IPrimitiveActions,\n  IUiEntryIds,\n  JsTable,\n  emptyJsTable,\n  fadeIn,\n  getAllElementsToExport,\n  getEditedDataSourceRow,\n  getEditedDataSourceRows,\n  getLabels,\n  getMapIdValue,\n  toJsTable,\n} from '../../shared';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\n@Component({\n  selector: 'dm-ellipsis-menu',\n  templateUrl: './ellipsis-menu.component.html',\n  styleUrls: ['./ellipsis-menu.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class EllipsisMenuComponent {\n  @Input() dataViewProperties?: DataViewProperties;\n  @Input() selectedElementsUiIds: IUiEntryIds[] = [];\n  @Input() selectedRow: IDataSourceRow;\n  @Input() isProcessingRequest = false;\n  @Input() uiComponent: EUIComponent;\n  @Input() updateActionsParams: IArrayAttributeUpdateParams;\n  @Input() options: IEllipsisMenuOptions;\n  @Input() node: IDataNode;\n  @Input() item: IDataItem;\n  @Input() attributeId: string;\n\n  @Input() set actions(actions: IPrimitiveActions | IAttributeActions) {\n    this._actions = actions;\n    this.ellipsisMenuBtns = toJsTable(\n      getLabels(this.uiComponent, actions, this.options, this.node, this.item)\n    );\n  }\n\n  get actions(): IPrimitiveActions | IAttributeActions {\n    return this._actions;\n  }\n\n  @Output() clickOnAddResourceBtn = new EventEmitter<void>();\n  @Output() evtDeleteSelectedElements =\n    new EventEmitter<IDeleteMultipleEntries>();\n  @Output() evtDeleteSelectedElement = new EventEmitter<IDeleteSingleEntry>();\n  @Output() evtMoveSelectedElements = new EventEmitter<IMoveElements>();\n  @Output() evtEditSelectedElements =\n    new EventEmitter<IEditMultipleDataSourceRow>();\n  @Output() evtEditSelectedElement =\n    new EventEmitter<IEditSingleDataSourceRow>();\n  @Output() evtMoveDataNode = new EventEmitter<IMoveDataNode>();\n\n  @ViewChild('menuTrigger') menuTrigger: MatMenuTrigger;\n\n  private _actions: IPrimitiveActions | IAttributeActions;\n\n  public ellipsisMenuBtns: JsTable<IEllipsisBtn> = emptyJsTable<IEllipsisBtn>();\n\n  constructor(private _dialog: MatDialog) {}\n\n  onClick(dialogAction: string): void {\n    let confirmDialogData: { [id: string]: any } = {};\n    switch (dialogAction) {\n      case EEllipsisMenuActions.EXPORT:\n        this.exportAllElements();\n        break;\n      case EEllipsisMenuActions.ADD:\n      case EEllipsisMenuActions.ADD_CHILDREN:\n        this.clickOnAddResourceBtn.emit();\n        break;\n      case EEllipsisMenuActions.SINGLE_EDIT:\n      case EEllipsisMenuActions.MULTIPLE_EDIT:\n        confirmDialogData = {\n          ...confirmDialogData,\n          mapSelectedElementIdEditableValue: getMapIdValue(\n            this.selectedElementsUiIds,\n            this.dataViewProperties?.getDataSource().data ?? [this.selectedRow],\n            this.updateActionsParams?.edit?.columnId\n          ),\n        };\n      // falls through\n      default:\n        confirmDialogData = {\n          ...confirmDialogData,\n          selectedElementsUiIds: this.selectedElementsUiIds.map(\n            (element: { id: string; label: string }) =>\n              Object.assign({}, element)\n          ),\n          title: this.ellipsisMenuBtns.byId[dialogAction]?.title ?? null,\n          cancelButtonText:\n            this.ellipsisMenuBtns.byId[dialogAction]?.dialogCancelBtn ?? null,\n          confirmButtonText:\n            this.ellipsisMenuBtns.byId[dialogAction]?.dialogConfirmBtn ?? null,\n          moveToRootButtonText:\n            this.ellipsisMenuBtns.byId[dialogAction]?.dialogMoveToRootBtn ??\n            null,\n          moveToAnotherEntryButtonText:\n            this.ellipsisMenuBtns.byId[dialogAction]\n              ?.dialogMoveToAnotherEntryBtn ?? null,\n          dialogAction,\n          updateActionsParams: this.updateActionsParams ?? null,\n          attributeModelRef: this.attributeId ?? null,\n          triggerElementId: this.node?.ids?.id ?? null,\n          noSearchResult:\n            this.ellipsisMenuBtns.byId[dialogAction]?.noSearchResult ?? null,\n          previousStepButtonText:\n            this.ellipsisMenuBtns.byId[dialogAction]?.dialogPreviousStepBtn ??\n            null,\n        };\n        const dialogRef = this._dialog.open(ConfirmDialogComponent, {\n          restoreFocus: false,\n          panelClass: 'confirm-dialog-container',\n          data: confirmDialogData,\n        });\n\n        dialogRef.componentInstance.action$\n          .pipe(\n            takeUntil(dialogRef.componentInstance.onDestroy$),\n            tap((_) => {\n              this.menuTrigger.focus();\n              switch (dialogAction) {\n                case EEllipsisMenuActions.MOVE_NODE:\n                  this.evtMoveDataNode.emit({\n                    destinationNode: dialogRef.componentInstance.selectedNode,\n                    dialogRef,\n                  });\n                  break;\n                case EEllipsisMenuActions.SINGLE_REASSIGN:\n                case EEllipsisMenuActions.MULTIPLE_REASSIGN:\n                  this.evtMoveSelectedElements.emit({\n                    selectedNode: dialogRef.componentInstance.selectedNode,\n                    selectedItem: dialogRef.componentInstance.selectedItem,\n                    selectedElementsUiIds: this.selectedElementsUiIds,\n                    dialogRef,\n                  });\n                  break;\n                case EEllipsisMenuActions.SINGLE_EDIT:\n                  this.evtEditSelectedElement.emit({\n                    row: getEditedDataSourceRow(\n                      this.selectedRow,\n                      this.updateActionsParams.edit.columnId,\n                      dialogRef.componentInstance.editForm.getRawValue()\n                    ),\n                    dialogRef,\n                  });\n                  break;\n                case EEllipsisMenuActions.MULTIPLE_EDIT:\n                  this.evtEditSelectedElements.emit({\n                    rows: getEditedDataSourceRows(\n                      this.selectedElementsUiIds,\n                      this.dataViewProperties?.getDataSource().data || [\n                        this.selectedRow,\n                      ],\n                      this.updateActionsParams.edit.columnId,\n                      dialogRef.componentInstance.editForm.getRawValue()\n                    ),\n                    dialogRef,\n                  });\n                  break;\n                default:\n                  if (this.selectedElementsUiIds?.length === 1) {\n                    this.evtDeleteSelectedElement.emit({\n                      entry: this.selectedElementsUiIds[0],\n                      dialogRef,\n                    });\n                  } else {\n                    this.evtDeleteSelectedElements.emit({\n                      entries: this.selectedElementsUiIds,\n                      dialogRef,\n                    });\n                  }\n                  break;\n              }\n            })\n          )\n          .subscribe();\n        break;\n    }\n  }\n\n  exportAllElements(): void {\n    const options = {\n      fieldSeparator: ';',\n      quoteStrings: '\"',\n      decimalSeparator: '.',\n      showLabels: true,\n      showTitle: false,\n      title: !!this.ellipsisMenuBtns.byId.export\n        ? this.ellipsisMenuBtns.byId.export.title\n        : '',\n      filename: !!this.ellipsisMenuBtns.byId.export\n        ? this.ellipsisMenuBtns.byId.export.title\n        : '',\n      useTextFile: false,\n      useBom: true,\n      useKeysAsHeaders: true,\n    };\n    const exportProperties: {\n      options: any;\n      data: { [label: string]: any }[];\n    } = {\n      options,\n      data: getAllElementsToExport(\n        this.dataViewProperties.getDataSource().filteredData,\n        this.dataViewProperties.getColumns()\n      ),\n    };\n    const csvConfig = mkConfig(exportProperties.options);\n    const csv = generateCsv(csvConfig)(exportProperties.data);\n    download(csvConfig)(csv);\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div fxLayout=\"row\" fxLayoutAlign=\"end center\">\n  <button\n    #menuTrigger=\"matMenuTrigger\"\n    mat-icon-button\n    aria-label=\"Menu\"\n    [class.opened]=\"menuTrigger.menuOpen\"\n    [matMenuTriggerFor]=\"menu\"\n    class=\"ellipsis-menu-btn\"\n  >\n    <mat-icon\n      aria-hidden=\"true\"\n      [ngClass]=\"{\n        'toggle-ellipsis-menu-icon': menuTrigger.menuOpen\n      }\"\n      >more_vert</mat-icon\n    >\n  </button>\n  <mat-menu #menu=\"matMenu\" backdropClass=\"ellipsis-menu\">\n    <ul>\n      <li *ngFor=\"let labelId of ellipsisMenuBtns.allIds\">\n        <button\n          mat-menu-item\n          [attr.aria-label]=\"ellipsisMenuBtns.byId[labelId].btnLabel\"\n          [disabled]=\"\n            ellipsisMenuBtns.byId[labelId].canBeDisabled &&\n            (isProcessingRequest || selectedElementsUiIds.length < 1)\n          \"\n          (click)=\"onClick(labelId)\"\n        >\n          <mat-icon\n            aria-hidden=\"true\"\n            [class.mat-menu-icon-disable]=\"\n              ellipsisMenuBtns.byId[labelId].canBeDisabled &&\n              selectedElementsUiIds.length < 1\n            \"\n          >\n            {{ ellipsisMenuBtns.byId[labelId].icon }}\n          </mat-icon>\n          <span>{{ ellipsisMenuBtns.byId[labelId].btnLabel }}</span>\n        </button>\n      </li>\n    </ul>\n  </mat-menu>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport {\n  Observable,\n  Subject,\n  Subscription,\n  catchError,\n  concatMap,\n  delay,\n  filter,\n  forkJoin,\n  of,\n  take,\n  takeUntil,\n  tap,\n  throwError,\n} from 'rxjs';\nimport {\n  DataService,\n  DisplayedDetailArray,\n  EComponentName,\n  EUIComponent,\n  EUpdateOperations,\n  EUserAction,\n  Error as ErrorActions,\n  ErrorsHandlerService,\n  IArrayAttributeDoingRequest,\n  IArrayAttributeUpdateActionParams,\n  IArrayGenericAccessibility,\n  IAssignArrayViewProperties,\n  IAssignElements,\n  IAttribute,\n  IColumn,\n  IConfig,\n  ICurrentUserConfig,\n  IData,\n  IDataNode,\n  IDataSourceRow,\n  IDataTableRow,\n  IEditableArrayProperties,\n  IEntryIds,\n  ILink,\n  IMoveElements,\n  IRequestsProperties,\n  IResourceType,\n  IUiEntryIds,\n  InteractionsService,\n  JsTable,\n  UiState,\n  convertDataNodeToDataSourceRow,\n  convertDataSourceRowToLinkObject,\n  fadeIn,\n  getActionType,\n  getArrayAttributeDoingRequestsDetail,\n  getArrayAttributeResourcesTypesIds,\n  getAttributeValues,\n  getClickableCellsEndpoints,\n  getDataSourceArrayUsingDataFromBackend,\n  getDataSourceForGenericArray,\n  getDataSourceRowsWithAssociatedValue,\n  getElementExternalId,\n  getElementId,\n  getNotSelectedRows,\n  getOrderedKeysArrayAttributes,\n  getRowId,\n  getSelectedElements,\n  getSucceededNotifications,\n  isDataNode,\n  setRequestsProperties,\n  toScimPropertiesPatch,\n} from '../../shared';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\n@Component({\n  selector: 'dm-data-detail-array-attributes',\n  templateUrl: './data-detail-array-attributes.component.html',\n  styleUrls: ['./data-detail-array-attributes.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class DataDetailArrayAttributesComponent implements OnInit, OnDestroy {\n  @Select(UiState.getArrayAccessibility)\n  arrayGenericAccessibility$: Observable<IArrayGenericAccessibility>;\n\n  private _dataDetail: any;\n  private _onDestroy$ = new Subject<void>();\n  private _arrayAttributesConfig: IAttribute[];\n  private _selectedResourceTypeId: string;\n  private _selectedEntryIds: IEntryIds;\n  private _requestsSubscription: Subscription;\n\n  public uiComponent: EUIComponent = EUIComponent.DATA_DETAIL;\n  public isProcessingRequest: boolean;\n  public canAssignOrMoveAuthorizedTypes: string[];\n  public allAttributesDisplayedAsArray: DisplayedDetailArray[] = [];\n  public updateOperations = EUpdateOperations;\n  public clickOnAssign = false;\n\n  @Input() set selectedEntryIds(selectedEntryIds: IEntryIds) {\n    this._selectedEntryIds = selectedEntryIds;\n    this._requestsSubscription?.unsubscribe();\n    this.allAttributesDisplayedAsArray = [];\n  }\n\n  get selectedEntryIds(): IEntryIds {\n    return this._selectedEntryIds;\n  }\n\n  @Input() selectedEntryParentIds: IEntryIds;\n  @Input() configs: JsTable<IConfig>;\n  @Input() currentUser: ICurrentUserConfig;\n  @Input() resourcesTypes: JsTable<IResourceType>;\n  @Input() editableAttributesFromBackend: string[];\n  @Input() endpoint: string;\n  @Input() areArrayAttributesProcessed: boolean;\n  @Input() hasLoadedArray?: boolean;\n  @Input() notLoadedArrayString?: string;\n\n  @Input() set selectedResourceTypeId(selectedResourceTypeId: string) {\n    if (selectedResourceTypeId) {\n      this._selectedResourceTypeId = selectedResourceTypeId;\n      this._arrayAttributesConfig = this.configs.byId[\n        this._selectedResourceTypeId\n      ].attributes.filter(\n        (attribute: IAttribute) =>\n          attribute.value.field.componentName === EComponentName.array\n      );\n    }\n  }\n\n  get selectedResourceTypeId(): string {\n    return this._selectedResourceTypeId;\n  }\n\n  @Input()\n  set dataDetail(dataDetail: any) {\n    this._dataDetail = dataDetail;\n\n    if (this._dataDetail) {\n      const config: IConfig = this.configs.byId[this._selectedResourceTypeId];\n      this._addMandatoryArrays(config);\n      const orderKeysByAttributeId: string[] = getOrderedKeysArrayAttributes(\n        this._arrayAttributesConfig,\n        this._dataDetail\n      );\n      const attributesDoingRequests: IArrayAttributeDoingRequest[] = [];\n      this.allAttributesDisplayedAsArray = [];\n\n      this.canAssignOrMoveAuthorizedTypes = this.currentUser.canAssignOrMove;\n\n      const editableArrayProperties: IEditableArrayProperties = {\n        selectedEntryExternalId: this.selectedEntryIds.externalId,\n        selectedEntryParentExternalId: !!this.selectedEntryParentIds\n          ? this.selectedEntryParentIds.externalId\n          : null,\n      };\n\n      orderKeysByAttributeId.forEach((key: string) => {\n        // Get current attribute configuration\n        const attributeConfig: IAttribute = config.attributes.find(\n          (attribute) => attribute.modelRef === key\n        );\n\n        const attributeComponentName: string =\n          attributeConfig.value.field.componentName;\n\n        if (attributeComponentName === EComponentName.array) {\n          let allRequestsResourcesTypesIds: string[] =\n            getArrayAttributeResourcesTypesIds(attributeConfig);\n\n          let attributeDoingRequestsDetails: IArrayAttributeDoingRequest =\n            getArrayAttributeDoingRequestsDetail(\n              attributeConfig,\n              this._dataDetail[key]\n            );\n\n          let dataResources: IDataTableRow[];\n          if (\n            this._dataDetail[key].length > 0 &&\n            attributeConfig.props.isUsingDataFromBackend\n          ) {\n            dataResources = getDataSourceArrayUsingDataFromBackend(\n              this._dataDetail[key],\n              attributeConfig.value.field.props.columns.map(\n                (column: IColumn) => column.id\n              ),\n              allRequestsResourcesTypesIds,\n              this.resourcesTypes,\n              attributeConfig.value.field.props.keyForSquash\n            );\n          }\n          if (\n            attributeConfig.props.isUsingDataFromBackend ||\n            this.hasLoadedArray === false\n          ) {\n            this.allAttributesDisplayedAsArray.push(\n              new DisplayedDetailArray(\n                this._selectedResourceTypeId,\n                this.configs,\n                attributeDoingRequestsDetails,\n                allRequestsResourcesTypesIds,\n                dataResources,\n                editableArrayProperties,\n                this._dataDetail.meta.modifiableAttributes.includes(key)\n              )\n            );\n          } else if (\n            allRequestsResourcesTypesIds.length > 0 &&\n            allRequestsResourcesTypesIds.every((resourceTypeId: string) =>\n              this.resourcesTypes.allIds.includes(resourceTypeId)\n            )\n          ) {\n            attributesDoingRequests.push(attributeDoingRequestsDetails);\n          }\n        }\n      });\n\n      if (attributesDoingRequests.length > 0) {\n        this._requestForArrayAttributes(\n          attributesDoingRequests,\n          editableArrayProperties\n        );\n      } else {\n        this.evtArrayAttributesProcessed.emit(true);\n      }\n    }\n  }\n\n  get dataDetail() {\n    return this._dataDetail;\n  }\n\n  @Input() additionalBtns: TemplateRef<any>;\n\n  @Output() evtArrayAttributesProcessed = new EventEmitter<boolean>();\n  @Output() evtSuccess = new EventEmitter<string>();\n\n  @ViewChild('assignBtn') assignBtn: MatButton;\n\n  constructor(\n    private _store$: Store,\n    private _router: Router,\n    private _dialog: MatDialog,\n    private _dataService: DataService,\n    private _interactionsService: InteractionsService,\n    private _errorsHandlerService: ErrorsHandlerService\n  ) {}\n\n  ngOnInit(): void {\n    this._interactionsService.processingRequest$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap(\n          (isProcessingRequest: boolean) =>\n            (this.isProcessingRequest = isProcessingRequest)\n        )\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  openAssignDialog(\n    title: string,\n    placeholder: string,\n    noSearchResult: string,\n    cancelButtonText: string,\n    confirmButtonText: string,\n    previousStepButtonText: string,\n    nextStepButtonText: string,\n    action: string,\n    endpoint: string,\n    assignArrayViewProperties: IAssignArrayViewProperties,\n    displayedArrayRowsIds: string[],\n    displayedArray: DisplayedDetailArray,\n    attributeModelRef: string,\n    assignedElementsAttributes: string[],\n    updateActionsParams: IArrayAttributeUpdateActionParams,\n    fieldForUpdate: string\n  ): void {\n    const dialogRef = this._dialog.open(ConfirmDialogComponent, {\n      restoreFocus: false,\n      minWidth: '500px',\n      panelClass: 'confirm-dialog-container',\n      data: {\n        selectedElements: [],\n        title,\n        placeholder,\n        noSearchResult,\n        cancelButtonText,\n        confirmButtonText,\n        previousStepButtonText,\n        nextStepButtonText,\n        dialogAction: action,\n        endpoint,\n        assignArrayViewProperties,\n        displayedArrayRowsIds,\n        assignedElementsAttributes,\n        updateActionsParams,\n        attributeModelRef,\n        fieldForUpdate,\n      },\n    });\n\n    dialogRef\n      .afterClosed()\n      .pipe(\n        tap(() => {\n          this.clickOnAssign = false;\n        }),\n        delay(0),\n        tap((_) => this.assignBtn.focus())\n      )\n      .subscribe();\n\n    dialogRef.componentInstance.action$\n      .pipe(\n        tap(() => {\n          const selectedElements: IAssignElements = {\n            selectedElements: dialogRef.componentInstance.selectedElements,\n            formValues: dialogRef.componentInstance.editForm?.getRawValue(),\n          };\n          this.onUpdateArray(\n            selectedElements,\n            [EUpdateOperations.ADD],\n            displayedArray,\n            dialogRef\n          );\n        })\n      )\n      .subscribe();\n  }\n\n  assignNewElements(displayedArray: DisplayedDetailArray): void {\n    this.clickOnAssign = true;\n\n    this.openAssignDialog(\n      displayedArray.actions.assign.title,\n      displayedArray.actions.assign.placeholder,\n      displayedArray.actions.assign.noSearchResult,\n      displayedArray.actions.assign.dialogCancelBtn,\n      displayedArray.actions.assign.dialogConfirmBtn,\n      displayedArray.actions.assign.dialogPreviousStepBtn,\n      displayedArray.actions.assign.dialogNextStepBtn,\n      'assign',\n      displayedArray.endpoint,\n      {\n        columns: displayedArray.viewProperties.getColumns(),\n        displayedColumns: displayedArray.viewProperties.getDisplayedColumns(),\n        name: displayedArray.typesLabels,\n        icon: displayedArray.icon,\n        resourceTypeConfig: displayedArray.resourceTypeConfig,\n        accessibility: displayedArray.viewProperties.getAccessibility(),\n        noFilterResult: displayedArray.actions.assign.noFilterResult,\n      },\n      displayedArray.viewProperties\n        .getDataSource()\n        .data.map((row: IDataSourceRow) => row.selectionIds.id),\n      displayedArray,\n      displayedArray.attributeId,\n      displayedArray.viewProperties.getDisplayedColumns(),\n      displayedArray.updateParams,\n      displayedArray.fieldForUpdate\n    );\n  }\n\n  patchArrayAttribute(\n    event: IMoveElements | IAssignElements | IUiEntryIds[],\n    operationsTypes: string[],\n    displayedArray: DisplayedDetailArray,\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): void {\n    displayedArray.succeededElements = [];\n    const selectedElements: (IUiEntryIds | IDataSourceRow | IDataNode)[] =\n      getSelectedElements(event);\n\n    const selectedElementsIds: string[] = selectedElements.map(\n      (selectedElement: IUiEntryIds | IDataSourceRow | IDataNode) =>\n        getElementId(selectedElement)\n    );\n\n    if (operationsTypes.length > 0) {\n      of(...operationsTypes)\n        .pipe(\n          take(operationsTypes.length),\n          takeUntil(this._onDestroy$),\n          concatMap((operationType: string) =>\n            this._patchOperationRequest(\n              operationType,\n              selectedElementsIds,\n              selectedElements,\n              event,\n              displayedArray,\n              operationsTypes,\n              dialogRef\n            )\n          ),\n          catchError((err: Error | HttpErrorResponse) =>\n            this._errorsHandlerService.handleError(err)\n          ),\n          filter((_, index) => index === operationsTypes.length - 1),\n          tap((_) =>\n            this.updateListAfterOperationsOnArray(\n              operationsTypes,\n              displayedArray\n            )\n          )\n        )\n        .subscribe();\n    }\n  }\n\n  updateArrayAttribute(\n    event: IAssignElements | IUiEntryIds[] | IDataSourceRow[],\n    operationsTypes: string[],\n    displayedArray: DisplayedDetailArray,\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): void {\n    displayedArray.succeededElements = [];\n\n    const fieldToUpdate: string = displayedArray.attributeId;\n    let selectedElements: (IUiEntryIds | IDataSourceRow | IDataNode)[] =\n      getSelectedElements(event);\n\n    const selectedElementsIds: string[] = selectedElements.map(\n      (selectedElement: IUiEntryIds | IDataSourceRow | IDataNode) =>\n        getElementId(selectedElement)\n    );\n\n    let newValue: ILink[];\n    if (operationsTypes.length === 1) {\n      const notSeletedElements: IDataSourceRow[] = getNotSelectedRows(\n        displayedArray.viewProperties.getDataSource().data,\n        selectedElementsIds\n      );\n      switch (operationsTypes[0]) {\n        case EUpdateOperations.REMOVE:\n          newValue = notSeletedElements.map((row: IDataSourceRow) =>\n            convertDataSourceRowToLinkObject(\n              row,\n              displayedArray.updateParams.selectionColumnId,\n              displayedArray.updateParams\n            )\n          );\n          break;\n        case EUpdateOperations.EDIT:\n          newValue = notSeletedElements\n            .concat(event as IDataSourceRow[])\n            .map((row: IDataSourceRow) =>\n              convertDataSourceRowToLinkObject(\n                row,\n                displayedArray.updateParams.selectionColumnId,\n                displayedArray.updateParams\n              )\n            );\n          break;\n        case EUpdateOperations.ADD:\n          selectedElements = selectedElements.map((element: IDataNode) =>\n            convertDataNodeToDataSourceRow(\n              element,\n              displayedArray.viewProperties.getColumns(),\n              this.resourcesTypes\n            )\n          );\n          if ((event as IAssignElements).formValues) {\n            selectedElements = getDataSourceRowsWithAssociatedValue(\n              selectedElements as IDataSourceRow[],\n              displayedArray.updateParams,\n              (event as IAssignElements).formValues\n            );\n          }\n          newValue = notSeletedElements\n            .concat(selectedElements as IDataSourceRow[])\n            .map((row: IDataSourceRow) =>\n              convertDataSourceRowToLinkObject(\n                row,\n                displayedArray.updateParams.selectionColumnId,\n                displayedArray.updateParams\n              )\n            );\n          break;\n        default:\n          break;\n      }\n    }\n    const requestBody = {\n      schemas: [this.resourcesTypes.byId[this.selectedResourceTypeId].schema],\n      id: this.selectedEntryIds.id,\n      externalId: this.selectedEntryIds.externalId,\n      [fieldToUpdate]: newValue,\n    };\n    this._interactionsService.isProcessingRequest(true);\n    this._dataService\n      .updateData(this.endpoint, this.selectedEntryIds.id, requestBody)\n      .pipe(\n        takeUntil(this._onDestroy$),\n        take(1),\n        tap((_) => {\n          this._interactionsService.isProcessingRequest(false);\n          displayedArray.succeededElements = selectedElements;\n          this.updateListAfterOperationsOnArray(\n            operationsTypes,\n            displayedArray\n          );\n          dialogRef?.close();\n        }),\n        catchError((err) => {\n          this._interactionsService.isProcessingRequest(false);\n          this._store$.dispatch([\n            new ErrorActions.SetErrorDetail({\n              error: err,\n              userActionOnError: EUserAction.DETAIL_UPDATE_ARRAY,\n            }),\n            new ErrorActions.IsHandlingError(true),\n          ]);\n          if (err.status === 404) {\n            dialogRef.close();\n\n            this._router.navigate(\n              [this._router.url.replace(/[^/]+$/g, 'not-found')],\n              { replaceUrl: true }\n            );\n          }\n          return this._errorsHandlerService.handleError(err);\n        })\n      )\n      .subscribe();\n  }\n\n  updateArrayElements(\n    event: IMoveElements | IAssignElements | IUiEntryIds[],\n    operationsTypes: string[],\n    displayedArray: DisplayedDetailArray,\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): void {\n    displayedArray.succeededElements = [];\n    displayedArray.failedElements404 = [];\n\n    if (displayedArray.isEditableArray) {\n      const requestEndpoint = displayedArray.endpoint;\n      const fieldToUpdate: string =\n        displayedArray.requestsParams.fieldForUpdate;\n      const selectedElements: (IUiEntryIds | IDataSourceRow | IDataNode)[] =\n        getSelectedElements(event);\n\n      forkJoin(\n        selectedElements.map(\n          (selectedElement: IUiEntryIds | IDataSourceRow | IDataNode) => {\n            let newValue: string;\n            if (\n              'selectedNode' in event &&\n              (event as IMoveElements).selectedNode\n            ) {\n              newValue = (event as IMoveElements).selectedNode.ids.id;\n            } else if (\n              'selectedItem' in event &&\n              (event as IMoveElements).selectedItem\n            ) {\n              newValue = (event as IMoveElements).selectedItem.ids.id;\n            } else {\n              newValue = this.selectedEntryIds.id;\n            }\n\n            if (!!newValue) {\n              return this._operationOnElement(\n                operationsTypes,\n                selectedElement,\n                displayedArray,\n                fieldToUpdate,\n                newValue,\n                requestEndpoint\n              ).pipe(\n                takeUntil(this._onDestroy$),\n                take(1),\n                tap((_) => {\n                  this._interactionsService.isProcessingRequest(false);\n                  displayedArray.succeededElements = [\n                    ...displayedArray.succeededElements,\n                    selectedElement,\n                  ];\n                }),\n                catchError((err) => {\n                  this._interactionsService.isProcessingRequest(false);\n                  this._store$.dispatch([\n                    new ErrorActions.SetErrorDetail({\n                      error: err,\n                      userActionOnError:\n                        EUserAction.DETAIL_UPDATE_OTHER_RESOURCE,\n                    }),\n                    new ErrorActions.IsHandlingError(true),\n                  ]);\n                  if (err.status === 404) {\n                    displayedArray.failedElements404 = [\n                      ...displayedArray.failedElements404,\n                      selectedElement,\n                    ];\n                  }\n                  return this._errorsHandlerService.handleError(err);\n                })\n              );\n            } else {\n              return of(null);\n            }\n          }\n        )\n      )\n        .pipe(\n          tap((_) => {\n            this.updateListAfterOperationsOnArray(\n              operationsTypes,\n              displayedArray\n            );\n\n            dialogRef?.close();\n          })\n        )\n        .subscribe();\n    }\n  }\n\n  private _operationOnElement(\n    operationsTypes: string[],\n    selectedElement: IUiEntryIds | IDataSourceRow | IDataNode,\n    displayedArray: DisplayedDetailArray,\n    fieldToUpdate: string,\n    newValue: string,\n    requestEndpoint: string\n  ): Observable<any> {\n    const selectedElementId: string = getElementId(selectedElement);\n    if (\n      operationsTypes.includes(EUpdateOperations.REMOVE) &&\n      operationsTypes.length === 1\n    ) {\n      this._interactionsService.isProcessingRequest(true);\n      return this._dataService.removeData(requestEndpoint, selectedElementId);\n    } else {\n      const requestBody = {\n        schemas: [\n          this.resourcesTypes.byId[\n            displayedArray.requestsParams.requestResourceTypeId\n          ].schema,\n        ],\n        id: selectedElementId,\n        externalId: getElementExternalId(selectedElement),\n        [fieldToUpdate]: newValue,\n      };\n      this._interactionsService.isProcessingRequest(true);\n      return this._dataService.updateData(\n        requestEndpoint,\n        selectedElementId,\n        requestBody\n      );\n    }\n  }\n\n  updateListAfterOperationsOnArray(\n    operationsTypes: string[],\n    displayedArray: DisplayedDetailArray\n  ): void {\n    if (\n      operationsTypes.includes(EUpdateOperations.ADD) &&\n      !operationsTypes.includes(EUpdateOperations.REMOVE)\n    ) {\n      displayedArray.initialSource = [\n        ...displayedArray.succeededElements.map(\n          (elt: IEntryIds | IDataNode | IDataSourceRow) =>\n            isDataNode(elt)\n              ? convertDataNodeToDataSourceRow(\n                  elt as IDataNode,\n                  displayedArray.viewProperties.getColumns(),\n                  this.resourcesTypes\n                )\n              : elt\n        ),\n        ...displayedArray.initialSource,\n      ];\n    } else {\n      const succeededElementIds: string[] =\n        displayedArray.succeededElements.map(\n          (succeededElement: IUiEntryIds | IDataNode | IDataSourceRow) =>\n            getElementId(succeededElement)\n        );\n      const failedElement404Ids: string[] =\n        displayedArray.failedElements404.map(\n          (failedElement: IUiEntryIds | IDataNode | IDataSourceRow) =>\n            getElementId(failedElement)\n        );\n\n      displayedArray.selectedElementsUiIds =\n        displayedArray.selectedElementsUiIds.filter(\n          (element: IEntryIds) =>\n            !succeededElementIds.includes(element.id) &&\n            !failedElement404Ids.includes(element.id)\n        );\n\n      if (\n        operationsTypes.length === 1 &&\n        operationsTypes.includes(EUpdateOperations.EDIT)\n      ) {\n        displayedArray.initialSource = displayedArray.initialSource.map(\n          (row: IDataTableRow) => {\n            const rowId: string = getRowId(\n              row,\n              displayedArray.updateParams?.selectionColumnId\n            );\n            return (\n              displayedArray.succeededElements.find(\n                (row: IDataSourceRow) => row.selectionIds.id === rowId\n              ) ?? row\n            );\n          }\n        );\n      } else {\n        displayedArray.initialSource = displayedArray.initialSource.filter(\n          (row: IDataTableRow) => {\n            const rowId: string = getRowId(\n              row,\n              displayedArray.updateParams?.selectionColumnId\n            );\n            return (\n              !succeededElementIds.includes(rowId) &&\n              !failedElement404Ids.includes(rowId)\n            );\n          }\n        );\n      }\n    }\n\n    displayedArray.viewProperties.setDataSource(\n      new MatTableDataSource(displayedArray.initialSource)\n    );\n\n    if (displayedArray.succeededElements.length > 0) {\n      const message: string = getSucceededNotifications(\n        displayedArray.succeededElements,\n        getActionType(\n          displayedArray.succeededElements,\n          displayedArray.actions,\n          operationsTypes\n        )\n      );\n\n      this.evtSuccess.emit(message);\n    }\n  }\n\n  onUpdateArray(\n    event: IUiEntryIds[] | IAssignElements | IMoveElements | IDataSourceRow[],\n    operationsTypes: string[],\n    displayedArray: DisplayedDetailArray,\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): void {\n    type commonUpdateTypes = IUiEntryIds[] | IAssignElements;\n    type updateWithReassignActionTypes = commonUpdateTypes | IMoveElements;\n    type updateWithEditActionTypes = commonUpdateTypes | IDataSourceRow[];\n    if (\n      !this.editableAttributesFromBackend.includes(displayedArray.attributeId)\n    ) {\n      this.updateArrayElements(\n        event as updateWithReassignActionTypes,\n        operationsTypes,\n        displayedArray,\n        dialogRef\n      );\n    } else if (!!displayedArray.updateParams.patchOperationsParams) {\n      this.patchArrayAttribute(\n        event as updateWithReassignActionTypes,\n        operationsTypes,\n        displayedArray,\n        dialogRef\n      );\n    } else {\n      this.updateArrayAttribute(\n        event as updateWithEditActionTypes,\n        operationsTypes,\n        displayedArray,\n        dialogRef\n      );\n    }\n  }\n\n  private _patchOperationRequest(\n    operationType: string,\n    selectedElementsIds: string[],\n    selectedElements: (IUiEntryIds | IDataSourceRow | IDataNode)[],\n    event: IMoveElements | IAssignElements | IUiEntryIds[],\n    displayedArray: DisplayedDetailArray,\n    operationsTypes: string[],\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): Observable<HttpResponse<any> | Error | HttpErrorResponse> {\n    let patchedEntryId: string;\n\n    if (operationType === EUpdateOperations.ADD) {\n      if (\n        event &&\n        'selectedNode' in event &&\n        (event as IMoveElements).selectedNode\n      ) {\n        patchedEntryId = (event as IMoveElements).selectedNode.ids.id;\n      } else if (\n        event &&\n        'selectedItem' in event &&\n        (event as IMoveElements).selectedItem\n      ) {\n        patchedEntryId = (event as IMoveElements).selectedItem.ids.id;\n      } else {\n        patchedEntryId = this.selectedEntryIds.id;\n      }\n    } else {\n      patchedEntryId = this.selectedEntryIds.id;\n    }\n\n    const currentPath: string[] =\n      operationType === EUpdateOperations.REMOVE\n        ? selectedElementsIds.map((id: string) =>\n            displayedArray.updateParams.patchOperationsParams.remove.replace(\n              '$1',\n              '\"' + id + '\"'\n            )\n          )\n        : selectedElements.map(\n            (_) => displayedArray.updateParams.patchOperationsParams.add\n          );\n    this._interactionsService.isProcessingRequest(true);\n\n    return this._dataService\n      .patchData(\n        this.endpoint,\n        patchedEntryId,\n        toScimPropertiesPatch(currentPath, selectedElementsIds, operationType)\n      )\n      .pipe(\n        tap((_) => {\n          this._interactionsService.isProcessingRequest(false);\n          if (\n            (operationType === EUpdateOperations.ADD ||\n              (operationType === EUpdateOperations.REMOVE &&\n                !operationsTypes.includes(EUpdateOperations.ADD))) &&\n            !!event\n          ) {\n            displayedArray.succeededElements = [...selectedElements];\n            dialogRef?.close();\n          }\n        }),\n        catchError((err: Error | HttpErrorResponse) => {\n          this._interactionsService.isProcessingRequest(false);\n          this._store$.dispatch([\n            new ErrorActions.SetErrorDetail({\n              error: err,\n              userActionOnError: EUserAction.DETAIL_PATCH,\n            }),\n            new ErrorActions.IsHandlingError(true),\n          ]);\n          if (\n            !!err &&\n            err instanceof HttpErrorResponse &&\n            err.status === 404 &&\n            this.selectedEntryIds.id === patchedEntryId\n          ) {\n            this._router.navigate(\n              [this._router.url.replace(/[^/]+$/g, 'not-found')],\n              { replaceUrl: true }\n            );\n            dialogRef?.close();\n          }\n          if (\n            operationType === EUpdateOperations.ADD &&\n            operationsTypes.includes(EUpdateOperations.REMOVE) &&\n            !!event\n          ) {\n            this._patchOperationRequest(\n              EUpdateOperations.ADD,\n              selectedElementsIds,\n              selectedElements,\n              null,\n              displayedArray,\n              operationsTypes,\n              dialogRef\n            )\n              .pipe(take(1), takeUntil(this._onDestroy$))\n              .subscribe();\n          }\n          return throwError(() => err);\n        })\n      );\n  }\n\n  private _requestForArrayAttributes(\n    attributesDoingRequests: IArrayAttributeDoingRequest[],\n    editableArrayProperties: IEditableArrayProperties\n  ): void {\n    this._requestsSubscription = forkJoin(\n      attributesDoingRequests.map(\n        (attributeDoingRequests: IArrayAttributeDoingRequest) => {\n          const requestsProperties: IRequestsProperties = setRequestsProperties(\n            attributeDoingRequests,\n            this.selectedEntryIds.id\n          );\n          this._interactionsService.isProcessingRequest(true);\n          return getAttributeValues(\n            requestsProperties,\n            this._dataService,\n            this._errorsHandlerService,\n            attributeDoingRequests,\n            this._store$,\n            attributeDoingRequests.attributeConfig\n          ).pipe(\n            filter(\n              (dataList: IData | Error | HttpErrorResponse) =>\n                !(\n                  dataList instanceof Error ||\n                  dataList instanceof HttpErrorResponse\n                )\n            ),\n            tap((dataList: IData) => {\n              this._interactionsService.isProcessingRequest(false);\n\n              const clickableCellsEndpoints = getClickableCellsEndpoints(\n                this.resourcesTypes,\n                this.configs.allIds,\n                this.configs.byId[requestsProperties.resourceTypeId]\n              );\n\n              const dataResourcesAsFlatArray: any[] | IDataTableRow[] =\n                getDataSourceForGenericArray(\n                  dataList,\n                  this.configs.byId[requestsProperties.resourceTypeId],\n                  clickableCellsEndpoints\n                );\n\n              this.allAttributesDisplayedAsArray.push(\n                new DisplayedDetailArray(\n                  this._selectedResourceTypeId,\n                  this.configs,\n                  attributeDoingRequests,\n                  [requestsProperties.resourceTypeId],\n                  dataResourcesAsFlatArray,\n                  editableArrayProperties,\n                  this._dataDetail.meta.modifiableAttributes.includes(\n                    attributeDoingRequests.idField\n                  )\n                )\n              );\n              this.evtArrayAttributesProcessed.emit(true);\n            })\n          );\n        }\n      )\n    ).subscribe();\n  }\n\n  selectedData(\n    data: (IUiEntryIds | IDataSourceRow)[],\n    displayedArray: DisplayedDetailArray\n  ): void {\n    displayedArray.selectedElementsUiIds = data.map(\n      (data: IUiEntryIds | IDataSourceRow) =>\n        (data as IDataSourceRow)?.selectionIds ?? (data as IUiEntryIds)\n    );\n  }\n\n  private _addMandatoryArrays(config: IConfig): void {\n    const mandatoriesFields: { [id: string]: any } = config.attributes\n      .filter((attribute: IAttribute) => attribute.props.isMandatory)\n      .reduce(\n        (acc, currAttribute) => ({\n          ...acc,\n          [currAttribute.modelRef]:\n            currAttribute.value.field.componentName === EComponentName.array\n              ? []\n              : null,\n        }),\n        {}\n      );\n    this._dataDetail = { ...this._dataDetail, ...mandatoriesFields };\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div @fadeIn *ngIf=\"areArrayAttributesProcessed\" class=\"div-array-attributes\">\n  <mat-tab-group\n    *ngIf=\"allAttributesDisplayedAsArray?.length > 1; else singleArray\"\n    color=\"accent\"\n    animationDuration=\"0ms\"\n    class=\"array-tab-group\"\n  >\n    <mat-tab *ngFor=\"let attributeArray of allAttributesDisplayedAsArray\">\n      <ng-template mat-tab-label>\n        <mat-icon class=\"mat-tab-icon-lable\">{{\n          attributeArray.icon\n        }}</mat-icon>\n        {{ attributeArray.label }}\n      </ng-template>\n      <ng-template matTabContent>\n        <ng-container\n          [ngTemplateOutlet]=\"tabContent\"\n          [ngTemplateOutletContext]=\"{ attributeArray: attributeArray }\"\n        ></ng-container>\n      </ng-template>\n    </mat-tab>\n  </mat-tab-group>\n</div>\n<ng-template #singleArray>\n  <div *ngFor=\"let attributeArray of allAttributesDisplayedAsArray\">\n    <ng-container\n      [ngTemplateOutlet]=\"tabContent\"\n      [ngTemplateOutletContext]=\"{ attributeArray: attributeArray }\"\n    ></ng-container>\n  </div>\n</ng-template>\n\n<ng-template #tabContent let-attributeArray=\"attributeArray\">\n  <div\n    *ngIf=\"attributeArray?.isEditableArray; else onlyArrayLabel\"\n    [fxLayout]=\"\n      attributeArray.selectedElementsUiIds.length > 0 ? 'row wrap' : 'row'\n    \"\n    fxLayoutAlign=\"start center\"\n    class=\"div-table-title\"\n    #divTableHeader\n  >\n    <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n      <dm-generic-array-header\n        [dataLength]=\"attributeArray.viewProperties.getDataSource().data.length\"\n        [dataIcon]=\"attributeArray.icon\"\n        [dataName]=\"attributeArray.label\"\n      ></dm-generic-array-header>\n      <dm-ellipsis-menu\n        *ngIf=\"\n          attributeArray?.viewProperties?.getDataSource()?.filteredData\n            ?.length > 0\n        \"\n        [isProcessingRequest]=\"isProcessingRequest\"\n        [dataViewProperties]=\"attributeArray.viewProperties\"\n        [uiComponent]=\"uiComponent\"\n        [updateActionsParams]=\"attributeArray.updateParams\"\n        [options]=\"{\n          canMove: canAssignOrMoveAuthorizedTypes.includes(\n            selectedResourceTypeId\n          ),\n          canDelete: attributeArray.canDeleteEntries\n        }\"\n        [attributeId]=\"attributeArray.attributeId\"\n        [selectedElementsUiIds]=\"attributeArray.selectedElementsUiIds\"\n        [actions]=\"attributeArray.actions\"\n        (evtMoveSelectedElements)=\"\n          onUpdateArray(\n            $event,\n            [updateOperations.REMOVE, updateOperations.ADD],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n        (evtDeleteSelectedElements)=\"\n          onUpdateArray(\n            $event.entries,\n            [updateOperations.REMOVE],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n        (evtDeleteSelectedElement)=\"\n          onUpdateArray(\n            [$event.entry],\n            [updateOperations.REMOVE],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n        (evtEditSelectedElements)=\"\n          onUpdateArray(\n            $event.rows,\n            [updateOperations.EDIT],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n      ></dm-ellipsis-menu>\n    </div>\n    <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n      <button\n        *ngIf=\"canAssignOrMoveAuthorizedTypes?.includes(selectedResourceTypeId)\"\n        #assignBtn\n        mat-raised-button\n        color=\"accent\"\n        [disabled]=\"clickOnAssign\"\n        (click)=\"assignNewElements(attributeArray)\"\n        class=\"btn-assign-new-elements\"\n      >\n        {{ attributeArray.actions.assign.btnLabel }}\n      </button>\n      <ng-container *ngTemplateOutlet=\"additionalBtns\"></ng-container>\n      <ng-container\n        *ngIf=\"arrayGenericAccessibility$ | async as arrayGenericAccessibility\"\n      >\n        <span\n          *ngIf=\"attributeArray?.selectedElementsUiIds?.length > 0\"\n          class=\"span-selected-elements\"\n        >\n          {{\n            attributeArray?.selectedElementsUiIds?.length > 1\n              ? arrayGenericAccessibility.multipleSelection\n              : arrayGenericAccessibility.singleSelection\n          }}{{ attributeArray.selectedElementsUiIds.length }}\n        </span>\n      </ng-container>\n    </div>\n  </div>\n  <ng-template #onlyArrayLabel>\n    <span class=\"display-label-name\">\n      {{ attributeArray.label }}\n    </span>\n  </ng-template>\n\n  <div class=\"div-generic-array\">\n    <dm-generic-array\n      *ngIf=\"attributeArray?.initialSource?.length > 0; else emptyArray\"\n      [actionsColumnTemplate]=\"actionsColumn\"\n      [updateAffectAnotherResourceType]=\"\n        attributeArray.updateAffectAnotherResourceType\n      \"\n      [fieldForUpdate]=\"attributeArray.fieldForUpdate\"\n      [selectionColumnId]=\"attributeArray.updateParams?.selectionColumnId\"\n      [isClickableRow]=\"attributeArray.viewProperties.getIsClickableRow()\"\n      [canAssignOrMoveEntries]=\"\n        canAssignOrMoveAuthorizedTypes.includes(selectedResourceTypeId)\n      \"\n      [isEditableArray]=\"attributeArray.isEditableArray\"\n      [endpoint]=\"attributeArray.endpoint\"\n      [columns]=\"attributeArray.viewProperties.getColumns()\"\n      [initialDisplayedColumns]=\"\n        attributeArray.viewProperties.getDisplayedColumns()\n      \"\n      [resourcesTypesProperties]=\"resourcesTypes\"\n      [configs]=\"configs\"\n      [accessibility]=\"attributeArray.viewProperties.getAccessibility()\"\n      [actions]=\"attributeArray.actions ? attributeArray.actions : null\"\n      [selectedElementsUiIds]=\"attributeArray.selectedElementsUiIds\"\n      [isAttributeArray]=\"true\"\n      [dataSource]=\"attributeArray.viewProperties.getDataSource()\"\n      (selectedData)=\"selectedData($event, attributeArray)\"\n    ></dm-generic-array>\n    <ng-template #actionsColumn let-row=\"row\">\n      <dm-ellipsis-menu\n        *ngIf=\"row.isRowEditable\"\n        [uiComponent]=\"uiComponent\"\n        [attributeId]=\"attributeArray.attributeId\"\n        [updateActionsParams]=\"attributeArray.updateParams\"\n        [options]=\"{\n          canMove: row.canMoveEntry,\n          canDelete: row.canDeleteEntry,\n          isForRow: true\n        }\"\n        [selectedElementsUiIds]=\"[row.selectionIds]\"\n        [selectedRow]=\"row\"\n        [isProcessingRequest]=\"isProcessingRequest\"\n        [actions]=\"attributeArray.actions ? attributeArray.actions : null\"\n        (click)=\"$event.stopPropagation()\"\n        (evtMoveSelectedElements)=\"\n          onUpdateArray(\n            $event,\n            [updateOperations.REMOVE, updateOperations.ADD],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n        (evtDeleteSelectedElement)=\"\n          onUpdateArray(\n            [$event.entry],\n            [updateOperations.REMOVE],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n        (evtEditSelectedElement)=\"\n          onUpdateArray(\n            [$event.row],\n            [updateOperations.EDIT],\n            attributeArray,\n            $event.dialogRef\n          )\n        \"\n      ></dm-ellipsis-menu>\n    </ng-template>\n    <ng-template #emptyArray>\n      <div fxLayoutAlign=\"center start\">\n        <span class=\"placeholder-text placeholder-detail-page-text\">\n          {{\n            hasLoadedArray != null && !hasLoadedArray\n              ? notLoadedArrayString\n              : attributeArray.emptyArrayPlaceholder\n          }}\n        </span>\n      </div>\n    </ng-template>\n  </div>\n</ng-template>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { DOCUMENT } from '@angular/common';\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport {\n  AbstractControlOptions,\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport {\n  MatAutocompleteSelectedEvent,\n  MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport { MatChipGrid, MatChipInputEvent } from '@angular/material/chips';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport _ from 'lodash';\nimport moment, { Moment } from 'moment';\nimport { FileInputComponent } from 'ngx-material-file-input';\nimport {\n  BehaviorSubject,\n  Observable,\n  Subject,\n  catchError,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  of,\n  pairwise,\n  scan,\n  switchMap,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport {\n  CustomValidators,\n  DataService,\n  DataState,\n  EComponentName,\n  EUserAction,\n  EnvService,\n  Error as ErrorActions,\n  ErrorsHandlerService,\n  FormDataValueTypes,\n  FormErrorStateMatcher,\n  FormService,\n  IAutocompleteOption,\n  IData,\n  IFormAccessibility,\n  IFormData,\n  IFormFieldControl,\n  IInitFormsAutocompleteField,\n  ILabelValues,\n  ILink,\n  IScimProperties,\n  InteractionsService,\n  UiState,\n  User,\n  UserState,\n  concatOldValuesToNewValue,\n  convertAutocompleteInputValueForRequestBody,\n  convertBooleanToString,\n  convertInputValueToAutocompleteOption,\n  convertToScimObject,\n  formatDatepickerForm,\n  getAuthorWithDate,\n  getFilteredOptionsOnInitialState,\n  getFormAutocompleteFieldInitialValue,\n  getFormErrors,\n  getLinkedFieldsValues,\n  getOptionsFilteringCondition,\n  getResponseAttributesIds,\n  inputValueIsNotAnOption,\n  inputValueIsNotAnOptionSimpleAutocomplete,\n  isAutocompleteInitialState,\n  isFormFieldDisabled,\n  isFormFieldDisplayed,\n  keepFieldInRequestBody,\n  resizeImage,\n  saveCheckoutFormState,\n  setFormControlValue,\n  trimFormFieldsValues,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-generic-form',\n  templateUrl: './generic-form.component.html',\n  styleUrls: ['./generic-form.component.scss'],\n  providers: [{ provide: ErrorStateMatcher, useClass: FormErrorStateMatcher }],\n})\n/**\n * This class is a generic and configurable table to be used for every data table.\n */\nexport class GenericFormComponent implements OnInit, OnDestroy, AfterViewInit {\n  @Select(UiState.getFormAccessibility)\n  formAccessibility$: Observable<IFormAccessibility>;\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _userId: string;\n\n  private _userDisplayName: string;\n\n  private _formDataMap: { [modelRef: string]: string };\n\n  private _requiredUndisplayedFields: IFormData[] = [];\n\n  private _selectedEntryExternalId: string;\n\n  private _enableCheckoutForm: boolean;\n\n  @Select(UserState.getId)\n  userId$: Observable<string>;\n\n  @Input() autocompleteOff = false;\n  @Input() isDisplayingDefaultFormBtns = false;\n  @Input() crudAction: string;\n  @Input() endpoint: string;\n  @Input() entryId: string;\n  @Input() formData: IFormData[];\n  @Input() scimProperties: IScimProperties;\n  @Input() authorizeDisableOnRequest = true;\n  @Input() isInModal = false;\n\n  @Input() set enableCheckoutForm(isEnable: boolean) {\n    this._enableCheckoutForm = isEnable;\n    if (!!this.checkoutForm) {\n      if (isEnable) {\n        this.checkoutForm.enable();\n      } else {\n        this.checkoutForm.disable();\n      }\n    }\n  }\n\n  get enableCheckoutForm(): boolean {\n    return this._enableCheckoutForm;\n  }\n\n  @Output() clickOnCancelBtn = new EventEmitter<boolean>();\n  @Output() clickOnSubmitBtn = new EventEmitter<boolean>();\n  @Output() addSucceeded = new EventEmitter<any>();\n  @Output() addFailed = new EventEmitter<Error | HttpErrorResponse>();\n  @Output() updateSucceeded = new EventEmitter<any>();\n  @Output() updateFailed = new EventEmitter<void>();\n  @Output() submitForm = new EventEmitter<void>();\n\n  @ViewChildren(MatChipGrid) chipLists: QueryList<MatChipGrid>;\n  @ViewChild('formFieldsList') formFieldsList: TemplateRef<any>;\n  @ViewChild('buttonsActions') buttonsActions: TemplateRef<any>;\n\n  public templateFormFields: IFormData[] = [];\n\n  public formPreviousState: { [key: string]: IFormFieldControl } = {};\n\n  public separatorKeysCodes: number[] = [ENTER, COMMA];\n\n  public processingRequest$: Observable<boolean>;\n\n  public checkoutForm: FormGroup;\n  public formInitialState: { [key: string]: IFormFieldControl } = {};\n\n  public nbFormFields: number;\n\n  public limit: { [modelRef: string]: number } = {};\n  public offset: { [modelRef: string]: number } = {};\n  public options: {\n    [modelRef: string]: BehaviorSubject<IAutocompleteOption[]>;\n  } = {};\n\n  public options$: {\n    [modelRef: string]: Observable<IAutocompleteOption[]>;\n  } = {};\n\n  public autoCompleteOptions: {\n    [modelRef: string]: IAutocompleteOption[];\n  } = {};\n\n  public filteredOptions: {\n    [modelRef: string]: IAutocompleteOption[];\n  } = {};\n\n  public autocompleteOptionsLoaded: { [modelRef: string]: boolean } = {};\n\n  public imageBase64: { [modelRef: string]: string } = {};\n  public imgAspectRatio: { [modelRef: string]: number } = {};\n\n  public datepickerPlaceholder: string;\n\n  public formErrors: { [modelRef: string]: string };\n\n  public componentNameType = EComponentName;\n\n  public areAutocompletesPanelsOpened: { [modelRef: string]: boolean } = {};\n\n  public customFormContentTemplate: TemplateRef<any>;\n\n  constructor(\n    @Inject(DOCUMENT) private _document: Document,\n    private _store$: Store,\n    private _dataService: DataService,\n    private _interactionsService: InteractionsService,\n    private _errorsHandlerService: ErrorsHandlerService,\n    private _envService: EnvService,\n    private _router: Router,\n    private _formService: FormService<any, any>\n  ) {}\n\n  /**\n   * ngOnInit generate FormControl for every attribute in the form\n   */\n  ngOnInit(): void {\n    this._selectedEntryExternalId = this._store$.selectSnapshot(\n      DataState.getSelectedEntryExternalId\n    );\n\n    this._userDisplayName = this._store$.selectSnapshot(\n      UserState.getDisplayName\n    );\n\n    this.processingRequest$ = this._interactionsService.processingRequest$;\n\n    this.templateFormFields = this.formData.reduce((acc, field: IFormData) => {\n      if (isFormFieldDisplayed(field, this.crudAction)) {\n        acc.push(field);\n      } else if (field.props.isSentOnUpdate) {\n        this._requiredUndisplayedFields.push(field);\n      }\n      return acc;\n    }, [] as IFormData[]);\n\n    this._formDataMap = this.templateFormFields.reduce(\n      (acc, curr) => ({\n        ...acc,\n        [curr.modelRef]: curr.value.field.componentName,\n      }),\n      {} as { [modelRef: string]: string }\n    );\n\n    this.nbFormFields = this.templateFormFields.filter((field: IFormData) =>\n      isFormFieldDisplayed(field, this.crudAction)\n    ).length;\n\n    const imgFiles: IFormData[] = this.templateFormFields.filter(\n      (formElt: IFormData) =>\n        formElt.value.field.componentName === EComponentName.imgInput\n    );\n    if (imgFiles.length > 0) {\n      imgFiles.forEach((imgFile: IFormData) => {\n        this.setImgAspectRatio(imgFile.dataValue, imgFile.modelRef);\n        this.imageBase64 = {\n          ...this.imageBase64,\n          [imgFile.modelRef]:\n            imgFile.dataValue !== null ? (imgFile.dataValue as string) : null,\n        };\n      });\n    }\n\n    this.datepickerPlaceholder =\n      'Ex: ' +\n      moment().endOf('year').format(this._envService.ui.displayDateFormat);\n\n    this.templateFormFields\n      .filter(\n        (formElt: IFormData) =>\n          formElt.value.field.componentName === EComponentName.slideToggle\n      )\n      .forEach(\n        (formField: IFormData) =>\n          (formField.dataValue = formField.dataValue ?? false)\n      );\n\n    const formContainsAutocomplete: boolean = this.templateFormFields.some(\n      (formElt: IFormData) =>\n        formElt.value.field.componentName.includes(EComponentName.autocomplete)\n    );\n    if (formContainsAutocomplete) {\n      const allAutocompleteFields: IFormData[] = this.templateFormFields.filter(\n        (formElt: IFormData) =>\n          formElt.value.field.componentName.includes(\n            EComponentName.autocomplete\n          )\n      );\n      this.initAutocompleteProperties(allAutocompleteFields);\n      allAutocompleteFields.forEach((autocompleteField: IFormData) => {\n        const resourceTypeId: string =\n          autocompleteField.getValuesParams.requestResourceTypeId;\n        const responseAttributesIds: string[] = getResponseAttributesIds(\n          null,\n          resourceTypeId,\n          autocompleteField\n        );\n        return this._dataService\n          .getDataList(\n            autocompleteField.getValuesParams.requestTarget,\n            {\n              attributes: responseAttributesIds,\n            },\n            true\n          )\n          .pipe(\n            takeUntil(this._onDestroy$),\n            map((dataList: IData) => dataList.Resources),\n            tap((dataResources: any[]) =>\n              this.setAutocompleteOptions(\n                autocompleteField,\n                dataResources,\n                resourceTypeId\n              )\n            )\n          )\n          .subscribe();\n      });\n    }\n    this.initCheckoutForm();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  ngAfterViewInit(): void {\n    this.customFormContentTemplate =\n      this._formService.getCustomFormContentTemplate(this);\n  }\n\n  private initCheckoutForm(): void {\n    this.checkoutForm = new FormGroup(\n      this.templateFormFields.reduce(\n        (acc, data) => {\n          const currentFormState = {\n            value: setFormControlValue(data),\n            disabled: data.value.field.componentName.includes(\n              EComponentName.autocomplete\n            )\n              ? !this.autocompleteOptionsLoaded[data.modelRef]\n              : isFormFieldDisabled(data, this.crudAction),\n          };\n          const validators: ValidatorFn[] = [];\n          let ctrlOptions: AbstractControlOptions = {};\n          if (this.crudAction !== 'search') {\n            if (\n              data.value.field.props.required &&\n              this.crudAction !== 'search'\n            ) {\n              validators.push(Validators.required);\n            }\n            if (data.value.field.props.type === 'email') {\n              ctrlOptions = { updateOn: 'blur' };\n              validators.push(Validators.email);\n            }\n            if (\n              !!data.value.field.props.format &&\n              data.value.field.props.format.length > 0\n            ) {\n              validators.push(\n                CustomValidators.validFormat(data.value.field.props.format)\n              );\n            }\n            if (data.value.field.props.isInteger) {\n              validators.push(\n                Validators.compose([\n                  Validators.min(data.value.field.props.min),\n                  CustomValidators.validIntegerCharacters(),\n                ])\n              );\n            }\n            if (data.value.field.componentName === EComponentName.datepicker) {\n              ctrlOptions = { updateOn: 'blur' };\n              validators.push(CustomValidators.validDate());\n            }\n            if (\n              data.value.field.componentName ===\n              EComponentName.inputChipsAutocomplete\n            ) {\n              validators.push(\n                inputValueIsNotAnOption(this.filteredOptions, data.modelRef)\n              );\n            }\n            if (data.value.field.props.regexValidator) {\n              validators.push(\n                Validators.pattern(\n                  new RegExp(data.value.field.props.regexValidator)\n                )\n              );\n            }\n          }\n          if (data.value.field.componentName === EComponentName.autocomplete) {\n            validators.push(\n              inputValueIsNotAnOptionSimpleAutocomplete(\n                this.filteredOptions,\n                data.modelRef\n              )\n            );\n          }\n          ctrlOptions = { ...ctrlOptions, validators };\n          return {\n            ...acc,\n            [data.modelRef]: new FormControl(\n              { ...currentFormState },\n              ctrlOptions\n            ),\n          };\n        },\n        {} as {\n          [id: string]: FormControl;\n        }\n      )\n    );\n\n    this.formInitialState = {\n      ...saveCheckoutFormState(\n        this.checkoutForm.getRawValue(),\n        this.templateFormFields,\n        this.crudAction\n      ),\n    };\n\n    this.formPreviousState = {\n      ...Object.keys(this.formInitialState).reduce(\n        (acc, curr) => ({\n          ...acc,\n          [curr]: {\n            value: this.formInitialState[curr].value,\n            enabled: this.formInitialState[curr].enabled,\n          },\n        }),\n        {}\n      ),\n    };\n\n    this.checkoutForm.valueChanges\n      .pipe(\n        tap((changes) => {\n          this.setDisableSubmitBtn(changes);\n          this.formErrors = getFormErrors(\n            this.checkoutForm,\n            this.templateFormFields,\n            changes\n          );\n        }),\n        pairwise(),\n        switchMap(([prevChanges, currChanges]) =>\n          of<[any, IFormData]>([\n            currChanges,\n            this.getCurrentEditedField(prevChanges, currChanges),\n          ])\n        ),\n        tap(([changes, currentEditedField]) =>\n          this.updateFormPreviousState(changes, currentEditedField)\n        ),\n        filter(\n          ([_changes, currentEditedField]) =>\n            !!currentEditedField &&\n            currentEditedField.value.field.componentName.includes(\n              EComponentName.autocomplete\n            )\n        ),\n        debounceTime(600),\n        distinctUntilChanged(\n          ([prevChanges, _], [currChanges, currCurrentEditedField]) =>\n            prevChanges[currCurrentEditedField.modelRef] ===\n            currChanges[currCurrentEditedField.modelRef]\n        ),\n        map(([changes, currentEditedField]) => {\n          const currentModelRef: string = currentEditedField.modelRef;\n          this.onAutocompleteInputValueChange(\n            currentModelRef,\n            changes[currentModelRef]\n          );\n          this.checkoutForm.controls[currentModelRef].updateValueAndValidity();\n          if (\n            currentEditedField.value.field.componentName ===\n            EComponentName.inputChipsAutocomplete\n          ) {\n            this.chipLists.find(\n              (chip: MatChipGrid) => chip.id === currentModelRef\n            ).errorState = this.checkoutForm.controls[currentModelRef].invalid;\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  private onAutocompleteInputValueChange(\n    modelRef: string,\n    changesEditedField\n  ): void {\n    this.offset[modelRef] = 0;\n    this.getNextBatch(modelRef, changesEditedField);\n  }\n\n  private getCurrentEditedField(prevChanges: any, currChanges: any): IFormData {\n    const prevChangesKeys: string[] = Object.keys(prevChanges);\n    const currChangesKeys: string[] = Object.keys(currChanges);\n    const changesKeys: string[] = prevChangesKeys.filter((value) =>\n      currChangesKeys.includes(value)\n    );\n    const editedFieldKey: string = changesKeys.find(\n      (key: string) => prevChanges[key] !== currChanges[key]\n    );\n    return this.templateFormFields.find(\n      (element: IFormData) => element.modelRef === editedFieldKey\n    );\n  }\n\n  private setDisableSubmitBtn(changes: any): void {\n    for (const key in changes) {\n      switch (this._formDataMap[key]) {\n        case EComponentName.input:\n          if (\n            (this.checkoutForm.controls[key].value === '' &&\n              this.formInitialState[key].value == null &&\n              this.checkoutForm.controls[key].valid) ||\n            changes[key] === this.formInitialState[key].value\n          ) {\n            this.checkoutForm.get(key).markAsPristine();\n          }\n          break;\n        case EComponentName.imgInput:\n          if (this.imageBase64[key] !== this.formInitialState[key].value) {\n            this.checkoutForm.get(key).markAsDirty();\n          } else {\n            this.checkoutForm.get(key).markAsPristine();\n          }\n          break;\n        case EComponentName.inputChipsAutocomplete:\n          const initialStateArray = this.formInitialState[key]\n            .value as IAutocompleteOption[];\n          const previousStateArray = this.formPreviousState[key]\n            .value as IAutocompleteOption[];\n          if (\n            _.isEqual(initialStateArray, previousStateArray) &&\n            (changes[key] === null ||\n              changes[key] === '' ||\n              (!!changes[key] && this.filteredOptions[key].length > 0))\n          ) {\n            this.checkoutForm.get(key).markAsPristine();\n          } else {\n            this.checkoutForm.get(key).markAsDirty();\n          }\n          break;\n        case EComponentName.autocomplete:\n          if (typeof changes[key] === 'string') {\n            const options: string[] = this.filteredOptions[key].map(\n              (element: IAutocompleteOption) => element.option\n            );\n            if (\n              changes[key] ===\n                (<IAutocompleteOption>this.formInitialState[key].value)\n                  ?.option ||\n              (options.length > 0 &&\n                !options.includes(changes[key]) &&\n                this.areAutocompletesPanelsOpened[key])\n            ) {\n              this.checkoutForm.get(key).markAsPristine();\n            } else {\n              this.checkoutForm.get(key).markAsDirty();\n            }\n          } else {\n            if (\n              _.isEqual(\n                changes[key],\n                <IAutocompleteOption>this.formInitialState[key].value\n              )\n            ) {\n              this.checkoutForm.get(key).markAsPristine();\n            }\n          }\n          break;\n        case EComponentName.datepicker:\n          let dateAsString: string = moment.isMoment(changes[key])\n            ? changes[key].format('YYYY-MM-DD')\n            : changes[key];\n          if (\n            dateAsString !== this.formInitialState[key].value ||\n            this.checkoutForm.get(key).invalid\n          ) {\n            this.checkoutForm.get(key).markAsDirty();\n          } else {\n            this.checkoutForm.get(key).markAsPristine();\n          }\n          break;\n        default:\n          if (changes[key] === this.formInitialState[key].value) {\n            this.checkoutForm.get(key).markAsPristine();\n          }\n          break;\n      }\n    }\n  }\n\n  onBlur(event: any, trigger: MatAutocompleteTrigger): void {\n    if (event.relatedTarget != null) {\n      trigger.closePanel();\n    }\n  }\n\n  onDatepickerInputValueChange(event: any, modelRef: string): void {\n    const controlMoment: Moment = moment(\n      event.targetElement.value,\n      this._envService.ui.displayDateFormat\n    );\n    if (controlMoment.isValid()) {\n      this.checkoutForm.controls[modelRef].setValue(controlMoment);\n    } else if (\n      event.targetElement.value != null &&\n      event.targetElement.value !== ''\n    ) {\n      this.checkoutForm.controls[modelRef].setErrors({\n        isNotAValidDate: true,\n      });\n    } else if (\n      event.targetElement.value == null ||\n      event.targetElement.value === ''\n    ) {\n      this.checkoutForm.controls[modelRef].setErrors(null);\n    }\n  }\n\n  add(event: MatChipInputEvent, modelRef: string): void {\n    const input: HTMLInputElement = event.chipInput.inputElement;\n    const value: string = event.value;\n\n    if ((value || '').trim()) {\n      const option: IAutocompleteOption = convertInputValueToAutocompleteOption(\n        value.trim(),\n        this.autoCompleteOptions[modelRef]\n      );\n      if (!!option) {\n        (this.formPreviousState[modelRef].value as IAutocompleteOption[]).push(\n          option\n        );\n      }\n    }\n    if (input) {\n      input.value = '';\n    }\n\n    this.checkoutForm.controls[modelRef].setValue(null);\n    this.onAutocompleteInputValueChange(modelRef, null);\n  }\n\n  remove(value: IAutocompleteOption, modelRef: string): void {\n    const index: number = (\n      this.formPreviousState[modelRef].value as IAutocompleteOption[]\n    ).indexOf(value);\n\n    if (index >= 0) {\n      (this.formPreviousState[modelRef].value as IAutocompleteOption[]).splice(\n        index,\n        1\n      );\n    }\n    this.setDisableSubmitBtn(\n      Object.keys(this.formPreviousState).reduce(\n        (acc, curr) => ({\n          ...acc,\n          [curr]: this.formPreviousState[curr].value,\n        }),\n        {}\n      )\n    );\n    this.onAutocompleteInputValueChange(modelRef, null);\n  }\n\n  selected(\n    modelRef: string,\n    input: HTMLInputElement,\n    event: MatAutocompleteSelectedEvent\n  ): void {\n    (this.formPreviousState[modelRef].value as IAutocompleteOption[]).push(\n      event.option.value\n    );\n    input.value = '';\n    this.checkoutForm.controls[modelRef].setValue(null);\n  }\n\n  onCloseAutocompletePanel(\n    modelRef: string,\n    value: string,\n    componentType: string\n  ): void {\n    this.areAutocompletesPanelsOpened[modelRef] = false;\n    this.resetOffset(modelRef);\n    if (\n      componentType === this.componentNameType.autocomplete &&\n      value !==\n        (<IAutocompleteOption>this.formInitialState[modelRef].value)?.option\n    ) {\n      this.checkoutForm.get(modelRef).markAsDirty();\n      this.checkoutForm.controls[modelRef].updateValueAndValidity();\n    }\n  }\n\n  onClickFocusAutocompleteInput(\n    modelRef: string,\n    value: string,\n    autocompleteTrigger: MatAutocompleteTrigger\n  ): void {\n    if (!this.areAutocompletesPanelsOpened[modelRef]) {\n      this.getNextBatch(modelRef, value);\n      autocompleteTrigger.openPanel();\n      this.areAutocompletesPanelsOpened[modelRef] = true;\n    }\n  }\n\n  onSubmit(newData: any): void {\n    const convertedRequestBodyForm =\n      convertAutocompleteInputValueForRequestBody(\n        newData,\n        this.autoCompleteOptions,\n        this.formPreviousState,\n        Object.keys(this.autocompleteOptionsLoaded).filter(\n          (key) => this.autocompleteOptionsLoaded[key]\n        )\n      );\n\n    const trimmedRequestedBodyForm: {\n      [id: string]: FormDataValueTypes;\n    } = trimFormFieldsValues(convertedRequestBodyForm);\n\n    for (const key in trimmedRequestedBodyForm) {\n      if (Object.prototype.hasOwnProperty.call(trimmedRequestedBodyForm, key)) {\n        const isFieldValueStillNull: boolean =\n          trimmedRequestedBodyForm[key] == null &&\n          this.formInitialState[key].value == null;\n\n        const isSearchFormFieldEmpty: boolean =\n          this.crudAction === 'search' && trimmedRequestedBodyForm[key] === '';\n\n        const isFieldStillDisabled: boolean =\n          this.checkoutForm.controls[key].disabled &&\n          !this.formInitialState[key].enabled;\n\n        const isInputValueStillEmpty: boolean =\n          this._formDataMap[key] === EComponentName.input &&\n          this.checkoutForm.controls[key].value === '' &&\n          this.formInitialState[key].value == null;\n\n        if (\n          this.checkoutForm.controls[key].disabled &&\n          this.formInitialState[key].enabled\n        ) {\n          trimmedRequestedBodyForm[key] = null;\n        } else if (\n          isFieldValueStillNull ||\n          isSearchFormFieldEmpty ||\n          isFieldStillDisabled ||\n          isInputValueStillEmpty ||\n          !keepFieldInRequestBody(\n            this._formDataMap[key],\n            trimmedRequestedBodyForm[key],\n            this.formInitialState[key],\n            this.autocompleteOptionsLoaded[key],\n            this.crudAction\n          )\n        ) {\n          delete trimmedRequestedBodyForm[key];\n        }\n      }\n    }\n\n    const formattedDatePickerForm = formatDatepickerForm(\n      trimmedRequestedBodyForm,\n      this.templateFormFields,\n      this._envService.ui.displayDateFormat\n    );\n\n    if (this.crudAction === 'update') {\n      this.clickOnSubmitBtn.emit(true);\n\n      const convertedScimObjectForm = convertToScimObject(\n        formattedDatePickerForm,\n        this.templateFormFields,\n        this.entryId,\n        this._selectedEntryExternalId,\n        this.scimProperties.schemas\n      );\n\n      const convertedBooleanToStringForm = convertBooleanToString(\n        convertedScimObjectForm,\n        this.templateFormFields\n      );\n\n      const concatenatedFields = concatOldValuesToNewValue(\n        convertedBooleanToStringForm,\n        this.templateFormFields,\n        getAuthorWithDate(\n          this._userDisplayName,\n          this._document.documentElement.lang\n        ) + '\\n'\n      );\n\n      const fullRequestBody = {\n        ...concatenatedFields,\n        ...this._requiredUndisplayedFields.reduce(\n          (acc, field) => ({ ...acc, [field.modelRef]: field.dataValue }),\n          {}\n        ),\n      };\n\n      this._interactionsService.isProcessingRequest(true);\n      this.checkoutForm.disable();\n      this._dataService\n        .updateData(this.endpoint, this.entryId, fullRequestBody)\n        .pipe(\n          catchError((err) => {\n            this._interactionsService.isProcessingRequest(false);\n            this._store$.dispatch([\n              new ErrorActions.SetErrorDetail({\n                error: err,\n                userActionOnError: EUserAction.DETAIL_EDIT,\n              }),\n              new ErrorActions.IsHandlingError(true),\n            ]);\n            if (err.status === 404) {\n              this._router.navigate(\n                [\n                  this._router.url.split('/').slice(0, -1).join('/'),\n                  'not-found',\n                ],\n                { replaceUrl: true }\n              );\n            } else {\n              this.templateFormFields.forEach((field: IFormData) => {\n                if (!isFormFieldDisabled(field, this.crudAction)) {\n                  this.checkoutForm.controls[field.modelRef].enable();\n                } else {\n                  this.checkoutForm.controls[field.modelRef].disable();\n                }\n              });\n              this.clickOnSubmitBtn.emit(false);\n            }\n            this.updateFailed.emit();\n            return this._errorsHandlerService.handleError(err);\n          })\n        )\n        .subscribe((response: HttpResponse<any>) => {\n          if (response.status === 200 || response.status === 201) {\n            this._interactionsService.isProcessingRequest(false);\n            this.updateSucceeded.emit(response.body);\n\n            this.userId$\n              .pipe(\n                takeUntil(this._onDestroy$),\n                tap((id: string) => (this._userId = id))\n              )\n              .subscribe();\n\n            if (this.entryId === this._userId) {\n              const value: { displayName: string; photo: string } = {\n                displayName: response.body.displayName,\n                photo: response.body.photo,\n              };\n              this._store$.dispatch(\n                new User.UpdateCurrentUserConfig({\n                  userInfo: value,\n                })\n              );\n            }\n          }\n        });\n    }\n\n    if (this.crudAction === 'create') {\n      this.clickOnSubmitBtn.emit(true);\n      const convertedScimObjectForm = convertToScimObject(\n        formattedDatePickerForm,\n        this.templateFormFields,\n        this.entryId,\n        this._selectedEntryExternalId,\n        this.scimProperties.schemas\n      );\n\n      const convertedBooleanToStringForm = convertBooleanToString(\n        convertedScimObjectForm,\n        this.templateFormFields\n      );\n\n      this._interactionsService.isProcessingRequest(true);\n      if (this.authorizeDisableOnRequest) {\n        this.checkoutForm.disable();\n      }\n\n      let fullRequestBody: any = convertedBooleanToStringForm;\n      if (this.entryId) {\n        fullRequestBody = {\n          ...fullRequestBody,\n          parentId: this.entryId,\n        };\n      }\n\n      this._dataService\n        .createData(this.endpoint, fullRequestBody)\n        .pipe(\n          catchError((err) => {\n            this._interactionsService.isProcessingRequest(false);\n            this.templateFormFields.forEach((field: IFormData) => {\n              if (!isFormFieldDisabled(field, this.crudAction)) {\n                this.checkoutForm.controls[field.modelRef].enable();\n              } else {\n                this.checkoutForm.controls[field.modelRef].disable();\n              }\n            });\n            this.clickOnSubmitBtn.emit(false);\n            this.addFailed.emit(err);\n            return this._errorsHandlerService.handleError(err);\n          })\n        )\n        .subscribe((response: HttpResponse<any>) => {\n          if (response.status === 200 || response.status === 201) {\n            this._interactionsService.isProcessingRequest(false);\n            this.addSucceeded.emit(response.body);\n          }\n        });\n    }\n    if (this.crudAction === 'search') {\n      this.formData.forEach(\n        (formField: IFormData) =>\n          (formField.dataValue = formattedDatePickerForm[formField.modelRef])\n      );\n      this.submitForm.emit();\n    }\n  }\n\n  closeSubmitFormDialog(): void {\n    this.clickOnCancelBtn.emit(true);\n  }\n\n  getLabel(labels: ILabelValues): string {\n    return Object.prototype.hasOwnProperty.call(labels, 'onCreate') &&\n      this.crudAction === 'create'\n      ? labels.onCreate\n      : labels.long;\n  }\n\n  getNextBatch(\n    modelRef: string,\n    inputValue: string | IAutocompleteOption\n  ): void {\n    const initialValue = this.formInitialState[modelRef].value as\n      | IAutocompleteOption\n      | IAutocompleteOption[];\n\n    const previousValue = this.formPreviousState[modelRef].value as\n      | IAutocompleteOption\n      | IAutocompleteOption[];\n\n    const formField: IFormData = this.templateFormFields.find(\n      (field: IFormData) => field.modelRef === modelRef\n    );\n    const isInputChipsAutocomplete: boolean =\n      formField.value.field.componentName ===\n      EComponentName.inputChipsAutocomplete;\n    const isInitialState: boolean = isAutocompleteInitialState(\n      inputValue,\n      isInputChipsAutocomplete,\n      previousValue,\n      initialValue\n    );\n\n    if (isInitialState) {\n      this.filteredOptions[modelRef] = getFilteredOptionsOnInitialState(\n        isInputChipsAutocomplete,\n        this.autoCompleteOptions[modelRef],\n        previousValue\n      );\n    } else {\n      const filteringCondition: (param: string) => boolean =\n        getOptionsFilteringCondition(\n          inputValue,\n          isInputChipsAutocomplete,\n          previousValue\n        );\n\n      this.filteredOptions[modelRef] = this.autoCompleteOptions[\n        modelRef\n      ].filter((option) => filteringCondition(option.option));\n    }\n    if (!!formField.value.field.props.linkedToFields) {\n      const allLinkedFieldsValues: string[] = getLinkedFieldsValues(\n        formField.value.field.props.linkedToFields,\n        this.formPreviousState\n      );\n      this.filteredOptions[modelRef] = this.filteredOptions[modelRef].filter(\n        (option) =>\n          !allLinkedFieldsValues.includes(option.value?.id?.toLocaleUpperCase())\n      );\n    }\n    const result = this.filteredOptions[modelRef].slice(\n      this.offset[modelRef],\n      this.offset[modelRef] + this.limit[modelRef]\n    );\n    this.options[modelRef].next(result);\n    this.offset[modelRef] += this.limit[modelRef];\n  }\n\n  initAutocompleteProperties(allAutocompleteFields: IFormData[]): void {\n    allAutocompleteFields.forEach((field: IFormData) => {\n      this.options = {\n        ...this.options,\n        [field.modelRef]: new BehaviorSubject<IAutocompleteOption[]>([]),\n      };\n\n      this.options$ = {\n        ...this.options$,\n        [field.modelRef]: this.options[field.modelRef].asObservable().pipe(\n          scan((acc, curr) => {\n            if (this.offset[field.modelRef] !== 0) {\n              return [...acc, ...curr];\n            } else {\n              return [...curr];\n            }\n          }, [])\n        ),\n      };\n\n      this.autoCompleteOptions = {\n        ...this.autoCompleteOptions,\n        [field.modelRef]: [],\n      };\n\n      this.filteredOptions = {\n        ...this.filteredOptions,\n        [field.modelRef]: [],\n      };\n\n      this.autocompleteOptionsLoaded = {\n        ...this.autocompleteOptionsLoaded,\n        [field.modelRef]: false,\n      };\n\n      this.offset = {\n        ...this.offset,\n        [field.modelRef]: field.value.field.nestedComponent.props.offset,\n      };\n\n      this.limit = {\n        ...this.limit,\n        [field.modelRef]: field.value.field.nestedComponent.props.limit,\n      };\n\n      this.areAutocompletesPanelsOpened = {\n        ...this.areAutocompletesPanelsOpened,\n        [field.modelRef]: false,\n      };\n    });\n  }\n\n  setAutocompleteOptions(\n    autocompleteField: IFormData,\n    dataResources: any[],\n    resourceTypeId: string\n  ): void {\n    let checkoutFormFieldValue: ILink | ILink[] = null;\n    if (!!this.checkoutForm.controls[autocompleteField.modelRef].value) {\n      checkoutFormFieldValue =\n        this.checkoutForm.controls[autocompleteField.modelRef].value;\n    }\n    if (\n      autocompleteField.value.field.componentName ===\n      EComponentName.inputChipsAutocomplete\n    ) {\n      this.checkoutForm.controls[autocompleteField.modelRef].setValue(null);\n      this.formInitialState[autocompleteField.modelRef].value = [];\n      this.formPreviousState[autocompleteField.modelRef].value = [];\n    }\n    const optionNestedComponent = autocompleteField.value.field.nestedComponent;\n    const optionsField: string[] =\n      optionNestedComponent.props.options[resourceTypeId].optionsField;\n    dataResources.forEach((data: any) => {\n      const currentValue: ILink = {\n        id: data.id,\n        label:\n          data[optionNestedComponent.props.options[resourceTypeId].valuesField],\n      };\n      let currentOption = '';\n      if (\n        !optionsField.some(\n          (optionField: string) => data[optionField] === undefined\n        )\n      ) {\n        optionsField.forEach(\n          (optionField: string, index: number) =>\n            (currentOption =\n              index > 0\n                ? currentOption.concat(' (', data[optionField], ')')\n                : currentOption.concat(data[optionField]))\n        );\n        const currentObject: IAutocompleteOption = {\n          value: currentValue,\n          option: currentOption,\n        };\n        this.autoCompleteOptions[autocompleteField.modelRef].push(\n          currentObject\n        );\n        if (!!checkoutFormFieldValue) {\n          const initialValue: IInitFormsAutocompleteField =\n            getFormAutocompleteFieldInitialValue(\n              checkoutFormFieldValue,\n              currentObject,\n              this.formInitialState[autocompleteField.modelRef].value as\n                | IAutocompleteOption\n                | IAutocompleteOption[],\n              this.formPreviousState[autocompleteField.modelRef].value as\n                | IAutocompleteOption\n                | IAutocompleteOption[]\n            );\n          if (!!initialValue) {\n            this.checkoutForm.controls[autocompleteField.modelRef].setValue(\n              initialValue.controlValue\n            );\n            this.formInitialState[autocompleteField.modelRef] = {\n              value: initialValue.initialStateValue,\n              enabled:\n                this.formInitialState[autocompleteField.modelRef].enabled,\n            };\n            this.formPreviousState[autocompleteField.modelRef] = {\n              value: initialValue.previousStateValue,\n              enabled:\n                this.formInitialState[autocompleteField.modelRef].enabled,\n            };\n          }\n        }\n      }\n    });\n    this.autocompleteOptionsLoaded[autocompleteField.modelRef] = true;\n    if (\n      !!this.checkoutForm &&\n      this.checkoutForm.controls[autocompleteField.modelRef]\n    ) {\n      this.checkoutForm.controls[autocompleteField.modelRef].enable();\n    }\n  }\n\n  updateFormPreviousState(changes: any, editedField: IFormData): void {\n    for (const modelRef in changes) {\n      if (Object.prototype.hasOwnProperty.call(changes, modelRef)) {\n        const element = changes[modelRef];\n        if (\n          editedField !== undefined &&\n          editedField.modelRef === modelRef &&\n          editedField.value.field.componentName !==\n            EComponentName.inputChipsAutocomplete\n        ) {\n          this.formPreviousState[modelRef].value = element;\n        }\n      }\n    }\n  }\n\n  resetOffset(modelRef: string): void {\n    this.offset[modelRef] = 0;\n  }\n\n  displayOption(option: IAutocompleteOption): string {\n    return option && option.option ? option.option : '';\n  }\n\n  convertImgToBase64(event: any, modelRef: string, label: any): any {\n    if (event.target.files && event.target.files[0]) {\n      const reader = new FileReader();\n      reader.onload = (e: any) => {\n        const image = new Image();\n        image.src = e.target.result;\n        image.onload = (_) => {\n          const canvas = document.createElement('canvas');\n          const newImgSizes = resizeImage(image.width, image.height, 256, 256);\n          canvas.width = newImgSizes.width;\n          canvas.height = newImgSizes.height;\n          const ctx = canvas.getContext('2d');\n          ctx.drawImage(image, 0, 0, newImgSizes.width, newImgSizes.height);\n          const dataUrl = canvas.toDataURL('image/jpeg');\n          this.imageBase64 = {\n            ...this.imageBase64,\n            [modelRef]: dataUrl.replace(/data:.*;base64,/, ''),\n          };\n          this.setImgAspectRatio(this.imageBase64[modelRef], modelRef);\n        };\n      };\n      reader.readAsDataURL(event.target.files[0]);\n    }\n    label.focus();\n  }\n\n  setImgAspectRatio(imgDataValue: any, modelRef: string): void {\n    const image = new Image();\n    image.src = 'data:image/jpeg;base64,' + imgDataValue;\n    image.onload = () => {\n      this.imgAspectRatio = {\n        ...this.imgAspectRatio,\n        [modelRef]: image.width / image.height,\n      };\n    };\n  }\n\n  getFxFlex(componentName: string, screenSize: string = null): string {\n    const isInputChipsAutcomplete: boolean =\n      componentName === EComponentName.inputChipsAutocomplete;\n    const isTextArea: boolean = componentName === EComponentName.textarea;\n    let fxFlexPropertyValue: string;\n    if (isInputChipsAutcomplete || isTextArea) {\n      fxFlexPropertyValue = '1 1 100%';\n    } else {\n      switch (screenSize) {\n        case 'sm':\n          fxFlexPropertyValue = '1 1 calc(50% - 4px)';\n          break;\n        case 'xs':\n          fxFlexPropertyValue = '1 1 calc(100%)';\n          break;\n        default:\n          fxFlexPropertyValue = '1 1 calc(33.3% - 4px)';\n          break;\n      }\n    }\n    return fxFlexPropertyValue;\n  }\n\n  removeImg(\n    modelRef: string,\n    inputFile: FileInputComponent,\n    event: MouseEvent,\n    label: any\n  ): void {\n    this.imageBase64[modelRef] = null;\n    inputFile.clear();\n    label.focus();\n    event.stopPropagation();\n  }\n\n  getAutocomplete(data: IFormData): string {\n    return this.autocompleteOff ? 'off' : data.value.field.props.autocomplete;\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<form\n  *ngIf=\"formAccessibility$ | async as formAccessibility\"\n  #f=\"ngForm\"\n  id=\"genericForm\"\n  [formGroup]=\"checkoutForm\"\n  (keydown.tab)=\"$event.stopPropagation()\"\n  (ngSubmit)=\"onSubmit(checkoutForm.getRawValue())\"\n>\n  <ng-container\n    *ngIf=\"customFormContentTemplate != null; else defaultTemplate\"\n    [ngTemplateOutlet]=\"customFormContentTemplate\"\n  ></ng-container>\n\n  <ng-template #defaultTemplate>\n    <ng-container\n      [ngTemplateOutlet]=\"formFieldsList\"\n      [ngTemplateOutletContext]=\"{\n        formFields: templateFormFields\n      }\"\n    ></ng-container>\n  </ng-template>\n\n  <ng-template let-formFields=\"formFields\" #formFieldsList>\n    <div\n      #divFormFields\n      fxLayout=\"{{ nbFormFields > 3 ? 'row wrap' : 'column' }}\"\n      [ngClass]=\"{ 'div-form-search-content': crudAction === 'search' }\"\n      class=\"div-form-content\"\n    >\n      <div\n        [fxFlex]=\"getFxFlex(data.value.field.componentName)\"\n        [fxFlex.sm]=\"getFxFlex(data.value.field.componentName, 'sm')\"\n        [fxFlex.xs]=\"getFxFlex(data.value.field.componentName, 'xs')\"\n        *ngFor=\"let data of formFields; let i = index\"\n        class=\"div-form-field\"\n        [ngClass]=\"data.modelRef\"\n      >\n        <div [ngSwitch]=\"data.value.field.componentName\">\n          <mat-form-field\n            fxFlex\n            *ngSwitchCase=\"componentNameType.input\"\n            color=\"accent\"\n            class=\"custom-form-field\"\n          >\n            <mat-label fxLayout=\"row\">\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <input\n              matInput\n              appOmitChars\n              [formControlName]=\"data.modelRef\"\n              [type]=\"data.value.field.props.type\"\n              [maxlength]=\"data.value.field.props.maxlength\"\n              [min]=\"data.value.field.props.min ?? null\"\n              [placeholder]=\"data.value.field.props.placeholder\"\n              [autocomplete]=\"getAutocomplete(data)\"\n              [ngModel]=\"data.dataValue\"\n              [invalidChars]=\"data.value.field.props.invalidCharacters ?? []\"\n              [regexString]=\"data.value.field.props.regexInput ?? null\"\n              class=\"ellipsis\"\n            />\n            <mat-hint>{{ data.value.hint.value }}</mat-hint>\n            <mat-error>{{ formErrors[data.modelRef] }}</mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.inputChipsAutocomplete\"\n            fxFlex\n            color=\"accent\"\n            #formField\n            class=\"form-field-input-chips\"\n          >\n            <mat-label>\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <mat-chip-grid\n              #chipList\n              [disabled]=\"!autocompleteOptionsLoaded[data?.modelRef]\"\n            >\n              <mat-chip-row\n                *ngFor=\"let value of formPreviousState[data.modelRef].value\"\n                [removable]=\"data.value.field.props.removable\"\n                (removed)=\"remove(value, data.modelRef)\"\n              >\n                {{ value.option }}\n                <mat-icon\n                  *ngIf=\"data?.value.field.props.removable\"\n                  aria-hidden=\"true\"\n                  matChipRemove\n                  tabindex=\"0\"\n                  (keydown.enter)=\"remove(value, data.modelRef)\"\n                  >cancel</mat-icon\n                >\n              </mat-chip-row>\n              <input\n                [formControlName]=\"data.modelRef\"\n                [id]=\"data.modelRef\"\n                [maxLength]=\"data.value.field.props.maxlength\"\n                [placeholder]=\"data.value.field.props.placeholder\"\n                [matAutocomplete]=\"autoInputChips\"\n                [matChipInputFor]=\"chipList\"\n                [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n                [matChipInputAddOnBlur]=\"data.value.field.props.addOnBlur\"\n                [autocomplete]=\"getAutocomplete(data)\"\n                (matChipInputTokenEnd)=\"add($event, data.modelRef)\"\n                (click)=\"\n                  onClickFocusAutocompleteInput(\n                    data.modelRef,\n                    inputChipsAutocomplete.value,\n                    autocompleteTrigger\n                  )\n                \"\n                (focus)=\"\n                  onClickFocusAutocompleteInput(\n                    data.modelRef,\n                    inputChipsAutocomplete.value,\n                    autocompleteTrigger\n                  )\n                \"\n                class=\"ellipsis\"\n                #inputChipsAutocomplete\n                #autocompleteTrigger=\"matAutocompleteTrigger\"\n              />\n            </mat-chip-grid>\n            <mat-autocomplete\n              appInfiniteScroll\n              [displayWith]=\"displayOption\"\n              [isOpened]=\"autoInputChips.isOpen\"\n              [inputWidth]=\"formField._elementRef.nativeElement.offsetWidth\"\n              [complete]=\"\n                offset[data.modelRef] === filteredOptions[data.modelRef].length\n              \"\n              [panelWidth]=\"'fit-content'\"\n              (closed)=\"\n                onCloseAutocompletePanel(\n                  data.modelRef,\n                  inputChipsAutocomplete.value,\n                  data.value.field.componentName\n                )\n              \"\n              (infiniteScroll)=\"\n                getNextBatch(data.modelRef, inputChipsAutocomplete.value)\n              \"\n              (optionSelected)=\"\n                selected(data.modelRef, inputChipsAutocomplete, $event)\n              \"\n              #autoInputChips=\"matAutocomplete\"\n            >\n              <mat-option\n                *ngFor=\"\n                  let currentOption of options$[data.modelRef] | async;\n                  let i = index\n                \"\n                [value]=\"currentOption\"\n                [title]=\"currentOption.option\"\n              >\n                {{ currentOption.option }}\n              </mat-option>\n            </mat-autocomplete>\n            <mat-hint *ngIf=\"!autocompleteOptionsLoaded[data?.modelRef]\">\n              {{ data.value.hint.value }}\n            </mat-hint>\n            <mat-error *ngIf=\"chipList?.errorState\">\n              {{ formErrors[data.modelRef] }}\n            </mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.textarea\"\n            fxFlex\n            color=\"accent\"\n            appearance=\"fill\"\n            class=\"form-field-textarea\"\n          >\n            <mat-label fxLayout=\"row\">\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <textarea\n              matInput\n              cdkTextareaAutosize\n              [formControlName]=\"data.modelRef\"\n              [placeholder]=\"data.value.field.props.placeholder\"\n              [autocomplete]=\"getAutocomplete(data)\"\n              class=\"ellipsis\"\n            ></textarea>\n            <mat-hint>{{ data.value.hint.value }}</mat-hint>\n            <mat-error>{{ formErrors[data.modelRef] }}</mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.datepicker\"\n            fxFlex\n            color=\"accent\"\n            class=\"custom-form-field\"\n          >\n            <mat-label fxLayout=\"row\">\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <input\n              matInput\n              [matDatepicker]=\"picker\"\n              [formControlName]=\"data.modelRef\"\n              [placeholder]=\"datepickerPlaceholder\"\n              (dateChange)=\"onDatepickerInputValueChange($event, data.modelRef)\"\n              class=\"ellipsis\"\n            />\n            <mat-datepicker-toggle\n              matSuffix\n              [for]=\"picker\"\n            ></mat-datepicker-toggle>\n            <!-- change reference from static (picker) to dynamic -->\n            <mat-datepicker #picker></mat-datepicker>\n            <mat-hint>{{ data.value.hint.value }}</mat-hint>\n            <mat-error>{{ formErrors[data.modelRef] }}</mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.autocomplete\"\n            fxFlex\n            color=\"accent\"\n            class=\"custom-form-field\"\n          >\n            <mat-label fxLayout=\"row\">\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <input\n              matInput\n              [formControlName]=\"data.modelRef\"\n              [type]=\"data.value.field.props.type\"\n              [maxlength]=\"data.value.field.props.maxlength\"\n              [placeholder]=\"data.value.field.props.placeholder\"\n              [autocomplete]=\"getAutocomplete(data)\"\n              [matAutocomplete]=\"auto\"\n              (blur)=\"onBlur($event, autocompleteTrigger)\"\n              (click)=\"\n                onClickFocusAutocompleteInput(\n                  data.modelRef,\n                  inputAutoComplete.value,\n                  autocompleteTrigger\n                )\n              \"\n              (focus)=\"\n                onClickFocusAutocompleteInput(\n                  data.modelRef,\n                  inputAutoComplete.value,\n                  autocompleteTrigger\n                )\n              \"\n              class=\"ellipsis\"\n              #inputAutoComplete\n              #autocompleteTrigger=\"matAutocompleteTrigger\"\n            />\n            <mat-autocomplete\n              appInfiniteScroll\n              [displayWith]=\"displayOption\"\n              [isOpened]=\"auto.isOpen\"\n              [inputWidth]=\"inputAutoComplete.offsetWidth\"\n              [complete]=\"\n                offset[data.modelRef] === filteredOptions[data.modelRef].length\n              \"\n              [panelWidth]=\"'fit-content'\"\n              (closed)=\"\n                onCloseAutocompletePanel(\n                  data.modelRef,\n                  inputAutoComplete.value,\n                  data.value.field.componentName\n                )\n              \"\n              (infiniteScroll)=\"\n                getNextBatch(data.modelRef, inputAutoComplete.value)\n              \"\n              #auto=\"matAutocomplete\"\n            >\n              <mat-option\n                *ngFor=\"\n                  let currentOption of options$[data.modelRef] | async;\n                  let i = index\n                \"\n                [id]=\"data.modelRef + '-' + i\"\n                [value]=\"currentOption\"\n                [title]=\"currentOption.option\"\n              >\n                {{ currentOption.option }}\n              </mat-option>\n            </mat-autocomplete>\n            <mat-hint *ngIf=\"!autocompleteOptionsLoaded[data?.modelRef]\">\n              {{ data.value.hint.value }}\n            </mat-hint>\n            <mat-error *ngIf=\"autocompleteOptionsLoaded[data?.modelRef]\">{{\n              formErrors[data.modelRef]\n            }}</mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.select\"\n            fxFlex\n            color=\"accent\"\n            class=\"custom-form-field\"\n          >\n            <mat-label fxLayout=\"row\">\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <mat-select\n              fxFlex\n              [formControlName]=\"data.modelRef\"\n              [placeholder]=\"data.value.field.props.placeholder\"\n              class=\"ellipsis\"\n            >\n              <mat-option\n                *ngIf=\"\n                  !data?.value.field.props.required && crudAction !== 'search'\n                \"\n                [value]=\"null\"\n              >\n                --\n              </mat-option>\n              <mat-option\n                *ngFor=\"\n                  let currentOption of data.value.field.selectOption.props\n                    .options\n                \"\n                [value]=\"currentOption.value\"\n                [title]=\"currentOption.option\"\n              >\n                {{ currentOption.option }}\n              </mat-option>\n            </mat-select>\n            <mat-hint>\n              {{ data.value.hint.value }}\n            </mat-hint>\n            <mat-error *ngIf=\"!data?.value.field.selectOption.props.options\">\n              {{ formErrors[data.modelRef] }}\n            </mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.slideToggle\"\n            fxFlex\n            class=\"remove-underline\"\n          >\n            <mat-slide-toggle\n              labelPosition=\"before\"\n              color=\"accent\"\n              [aria-label]=\"data.value.label.value.long\"\n              [formControlName]=\"data.modelRef\"\n              [title]=\"data.value.label.value.long\"\n              [checked]=\"\n                data.dataValue === null && crudAction !== 'search'\n                  ? false\n                  : data.dataValue\n              \"\n            >\n              <mat-icon aria-hidden=\"true\" color=\"accent\">\n                {{ data.value.icon.value }}\n              </mat-icon>\n              <span fxFlex class=\"span-mat-slide-toggle-label\">{{\n                data.value.label.value.long\n              }}</span>\n            </mat-slide-toggle>\n            <input\n              matInput\n              [formControlName]=\"data.modelRef\"\n              [ngModel]=\"data.dataValue\"\n              hidden\n            />\n            <!-- required doesn't seems to work properly on slide-toggle-->\n            <mat-hint>{{ data.value.hint.value }}</mat-hint>\n            <mat-error>{{ formErrors[data.modelRef] }}</mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.imgInput\"\n            fxFlex\n            appearance=\"none\"\n            class=\"img-input-form-field\"\n          >\n            <div\n              fxLayoutAlign=\"start center\"\n              fxLayoutGap=\"30px\"\n              class=\"img-form-field-div\"\n            >\n              <div class=\"btns-img\">\n                <button\n                  mat-fab\n                  tabindex=\"-1\"\n                  type=\"button\"\n                  fxLayoutAlign=\"center center\"\n                  [attr.aria-label]=\"\n                    !!imageBase64[data.modelRef]\n                      ? data.value.label.value.edit\n                      : data.value.label.value.addNew\n                  \"\n                  class=\"btn-account\"\n                >\n                  <div\n                    *ngIf=\"!!imageBase64[data?.modelRef]; else displayIcon\"\n                    fxLayoutAlign=\"center center\"\n                    class=\"detail-img-div\"\n                  >\n                    <img\n                      role=\"img\"\n                      draggable=\"false\"\n                      [src]=\"\n                        'data:image/jpeg;base64,' + imageBase64[data.modelRef]\n                      \"\n                      [alt]=\"data.value.label.value.long\"\n                      [ngClass]=\"\n                        imgAspectRatio[data.modelRef] > 1\n                          ? 'detail-img-landscape'\n                          : 'detail-img-portrait'\n                      \"\n                    />\n                    <mat-icon\n                      aria-hidden=\"true\"\n                      color=\"accent\"\n                      class=\"img-edit-icon\"\n                      >edit</mat-icon\n                    >\n                  </div>\n                  <ng-template #displayIcon>\n                    <mat-icon aria-hidden=\"true\" class=\"icon-person\">\n                      {{ data.value.icon.value }}\n                    </mat-icon>\n                  </ng-template>\n                </button>\n                <button\n                  *ngIf=\"!!imageBase64[data?.modelRef]\"\n                  mat-mini-fab\n                  type=\"button\"\n                  fxLayoutAlign=\"center center\"\n                  color=\"warn\"\n                  [attr.aria-label]=\"data.value.label.value.remove\"\n                  (click)=\"removeImg(data.modelRef, inputFile, $event, label)\"\n                  class=\"btn-remove-img\"\n                >\n                  <mat-icon aria-hidden=\"true\" class=\"icon-remove\">\n                    close\n                  </mat-icon>\n                </button>\n              </div>\n              <label\n                #label\n                (keydown.enter)=\"inputFile.open()\"\n                class=\"img-add\"\n                tabindex=\"0\"\n              >\n                {{\n                  !!imageBase64[data.modelRef]\n                    ? data.value.label.value.edit\n                    : data.value.label.value.addNew\n                }}\n              </label>\n            </div>\n            <ngx-mat-file-input\n              #inputFile\n              [formControlName]=\"data.modelRef\"\n              [placeholder]=\"data.value.field.props.placeholder\"\n              [accept]=\"'image/*'\"\n              [ngModel]=\"imageBase64[data.modelRef]\"\n              (change)=\"convertImgToBase64($event, data.modelRef, label)\"\n              class=\"mat-file-input\"\n              appUnfocusable\n            >\n            </ngx-mat-file-input>\n            <mat-hint>{{ data.value.hint.value }}</mat-hint>\n            <mat-error>{{ formErrors[data.modelRef] }}</mat-error>\n          </mat-form-field>\n          <mat-form-field\n            *ngSwitchCase=\"componentNameType.fileInput\"\n            fxFlex\n            color=\"accent\"\n          >\n            <mat-label fxLayout=\"row\">\n              <mat-icon aria-hidden=\"true\">{{\n                data.value.icon.value\n              }}</mat-icon>\n              {{ getLabel(data.value.label.value) }}\n            </mat-label>\n            <ngx-mat-file-input\n              [formControlName]=\"data.modelRef\"\n              [placeholder]=\"data.value.field.props.placeholder\"\n            ></ngx-mat-file-input>\n            <mat-icon matSuffix aria-hidden=\"true\">folder</mat-icon>\n            <mat-hint>{{ data.value.hint.value }}</mat-hint>\n            <mat-error>{{ formErrors[data.modelRef] }}</mat-error>\n          </mat-form-field>\n        </div>\n      </div>\n    </div>\n  </ng-template>\n  <ng-container *ngIf=\"!isDisplayingDefaultFormBtns && !isInModal\">\n    <ng-container *ngTemplateOutlet=\"buttonsActions\"></ng-container>\n  </ng-container>\n  <ng-template #buttonsActions>\n    <div\n      *ngIf=\"crudAction === 'search'; else addEditCrudAction\"\n      fxLayout=\"row\"\n      fxLayoutAlign=\"start center\"\n      class=\"form-btns\"\n    >\n      <button\n        mat-raised-button\n        type=\"submit\"\n        form=\"genericForm\"\n        color=\"accent\"\n        class=\"btn-search\"\n        [attr.aria-label]=\"formAccessibility.searchBtn.ariaLabel\"\n        [disabled]=\"\n          checkoutForm.pristine ||\n          !checkoutForm.valid ||\n          (processingRequest$ | async)\n        \"\n      >\n        <span fxLayout=\"row\" fxLayoutAlign=\"center center\">\n          {{ formAccessibility.searchBtn.label }}\n          <mat-spinner\n            *ngIf=\"processingRequest$ | async\"\n            color=\"accent\"\n            class=\"spinner-in-btn\"\n            [diameter]=\"16\"\n            [strokeWidth]=\"1\"\n          ></mat-spinner>\n        </span>\n      </button>\n    </div>\n    <ng-template #addEditCrudAction>\n      <div fxLayout=\"row\" fxLayoutAlign=\"end center\" class=\"form-btns\">\n        <button\n          mat-button\n          type=\"button\"\n          color=\"accent\"\n          [attr.aria-label]=\"formAccessibility.cancelBtn.ariaLabel\"\n          class=\"btn-close-submit-form\"\n          (click)=\"closeSubmitFormDialog()\"\n          [disabled]=\"processingRequest$ | async\"\n        >\n          <span fxLayout=\"row\" fxLayoutAlign=\"center center\">\n            {{ formAccessibility.cancelBtn.label }}\n          </span>\n        </button>\n        <button\n          mat-raised-button\n          type=\"submit\"\n          form=\"genericForm\"\n          color=\"accent\"\n          [attr.aria-label]=\"\n            crudAction === 'create'\n              ? formAccessibility.createBtn.ariaLabel\n              : formAccessibility.saveEditBtn.ariaLabel\n          \"\n          class=\"btn-submit\"\n          [disabled]=\"\n            checkoutForm.pristine ||\n            !checkoutForm.valid ||\n            (processingRequest$ | async)\n          \"\n        >\n          <span\n            *ngIf=\"!(processingRequest$ | async)\"\n            fxLayout=\"row\"\n            fxLayoutAlign=\"center center\"\n          >\n            <span *ngIf=\"crudAction === 'create'; else updateCrudAction\">\n              {{ formAccessibility.createBtn.label }}\n            </span>\n            <ng-template #updateCrudAction\n              ><span>\n                {{ formAccessibility.saveEditBtn.label }}\n              </span></ng-template\n            >\n          </span>\n          <span\n            *ngIf=\"processingRequest$ | async\"\n            fxLayout=\"row\"\n            fxLayoutAlign=\"center center\"\n          >\n            <span\n              *ngIf=\"crudAction === 'create'; else updateCrudActionInProgress\"\n            >\n              {{ formAccessibility.createBtn.progressLabel }}\n            </span>\n            <ng-template #updateCrudActionInProgress>\n              <span>{{ formAccessibility.saveEditBtn.progressLabel }}</span>\n            </ng-template>\n            <mat-spinner\n              color=\"accent\"\n              class=\"spinner-in-btn\"\n              [diameter]=\"16\"\n              [strokeWidth]=\"1\"\n            ></mat-spinner>\n          </span>\n        </button>\n      </div>\n    </ng-template>\n  </ng-template>\n</form>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Component, EventEmitter, Inject, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Select } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport {\n  IFormAccessibility,\n  IFormData,\n  IScimProperties,\n  UiState,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-add-edit-generic-form-dialog',\n  templateUrl: './add-edit-generic-form-dialog.component.html',\n  styleUrls: ['./add-edit-generic-form-dialog.component.scss'],\n})\nexport class AddEditGenericFormDialogComponent {\n  @Select(UiState.getFormAccessibility)\n  formAccessibility$: Observable<IFormAccessibility>;\n\n  @Output() addSucceeded = new EventEmitter<any>();\n  @Output() updateSucceeded = new EventEmitter<any>();\n\n  constructor(\n    public dialogRef: MatDialogRef<AddEditGenericFormDialogComponent>,\n    @Inject(MAT_DIALOG_DATA)\n    public data: {\n      title: string;\n      formData: IFormData[];\n      endpoint: string;\n      scimProperties: IScimProperties;\n      crudAction: string;\n      entryId: string;\n    }\n  ) {}\n\n  onSubmit(event: boolean): void {\n    this.dialogRef.disableClose = event;\n  }\n\n  onAdd(event: any): void {\n    this.addSucceeded.emit(event);\n    this.dialogRef.close();\n  }\n\n  onUpdate(event: any): void {\n    this.updateSucceeded.emit(event);\n    this.dialogRef.close();\n  }\n\n  onCloseDialog(_event: any): void {\n    this.dialogRef.close();\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<ng-container *ngIf=\"formAccessibility$ | async as formAccessibility\">\n  <h3 mat-dialog-title class=\"title\">{{ data.title }}</h3>\n  <mat-dialog-content>\n    <p>\n      {{ formAccessibility.requiredFieldsMsg }}\n      <abbr [title]=\"formAccessibility.requiredFieldsTitle\" aria-hidden=\"true\"\n        >*</abbr\n      >\n    </p>\n    <dm-generic-form\n      #genericForm\n      [formData]=\"data.formData\"\n      [endpoint]=\"data.endpoint\"\n      [entryId]=\"data.entryId\"\n      [scimProperties]=\"data.scimProperties\"\n      [crudAction]=\"data.crudAction\"\n      [isInModal]=\"true\"\n      (addSucceeded)=\"onAdd($event)\"\n      (updateSucceeded)=\"onUpdate($event)\"\n      (clickOnCancelBtn)=\"onCloseDialog($event)\"\n      (clickOnSubmitBtn)=\"onSubmit($event)\"\n    ></dm-generic-form>\n  </mat-dialog-content>\n  <mat-dialog-actions align=\"end\">\n    <ng-container\n      [ngTemplateOutlet]=\"genericForm.buttonsActions\"\n    ></ng-container>\n  </mat-dialog-actions>\n</ng-container>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { delay, takeUntil, tap } from 'rxjs';\nimport {\n  IBtnLabel,\n  IEntryIds,\n  IFormData,\n  IResourceType,\n  IScimProperties,\n  JsTable,\n  fadeIn,\n} from '../../shared';\nimport { AddEditGenericFormDialogComponent } from '../add-edit-generic-form-dialog/add-edit-generic-form-dialog.component';\n\n@Component({\n  selector: 'dm-data-detail-edit-button',\n  templateUrl: './data-detail-edit-button.component.html',\n  styleUrls: ['./data-detail-edit-button.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class DataDetailEditButtonComponent implements OnInit {\n  @Input() editAction: IBtnLabel;\n  @Input() selectedResourceTypeId: string;\n  @Input() resourcesTypes: JsTable<IResourceType>;\n  @Input() selectedEntryIds: IEntryIds;\n  @Input() formDataAttributes: IFormData[];\n\n  @Output() updatedEntryAttributes = new EventEmitter<any>();\n\n  @ViewChild('editBtn', { static: false }) editBtn: MatButton;\n\n  public dialogRef: MatDialogRef<AddEditGenericFormDialogComponent, any>;\n  public clickOnUpdate: boolean;\n  public scimProperties: IScimProperties = { schemas: [] };\n\n  constructor(public dialog: MatDialog) {}\n\n  ngOnInit(): void {\n    this.scimProperties.schemas = [\n      this.resourcesTypes.byId[this.selectedResourceTypeId].schema,\n    ];\n  }\n\n  openEditEntryDialog(\n    updatedEntryAttributes: EventEmitter<any>,\n    title: string,\n    scimProperties: IScimProperties,\n    selectedResourceTypeId: string,\n    resourcesTypes: JsTable<IResourceType>,\n    selectedEntryIds: IEntryIds,\n    formDataAttributes: IFormData[]\n  ): void {\n    this.clickOnUpdate = true;\n\n    this.dialogRef = this.dialog.open(AddEditGenericFormDialogComponent, {\n      minWidth: '40%',\n      restoreFocus: false,\n      data: {\n        title,\n        formData: formDataAttributes,\n        endpoint: resourcesTypes.byId[selectedResourceTypeId].endpoint,\n        entryId: selectedEntryIds.id,\n        scimProperties,\n        crudAction: 'update',\n      },\n    });\n    this.dialogRef\n      .afterClosed()\n      .pipe(\n        tap((_) => (this.clickOnUpdate = false)),\n        delay(0),\n        tap((_) => {\n          if (!!this.editBtn) {\n            this.editBtn.focus();\n          }\n        })\n      )\n      .subscribe();\n\n    this.dialogRef.componentInstance.updateSucceeded\n      .pipe(\n        takeUntil(this.dialogRef.afterClosed()),\n        tap((request: any) => updatedEntryAttributes.emit(request))\n      )\n      .subscribe();\n  }\n\n  clickOnBtn(): void {\n    this.openEditEntryDialog(\n      this.updatedEntryAttributes,\n      this.editAction.title,\n      this.scimProperties,\n      this.selectedResourceTypeId,\n      this.resourcesTypes,\n      this.selectedEntryIds,\n      this.formDataAttributes\n    );\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<button\n  #editBtn=\"matButton\"\n  mat-raised-button\n  color=\"accent\"\n  [disabled]=\"clickOnUpdate\"\n  (click)=\"clickOnBtn()\"\n  class=\"btn-edit-detail\"\n>\n  {{ editAction.btnLabel }}\n</button>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Location } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { Select } from '@ngxs/store';\nimport { IDetailHeaderAccessibility, UiState } from '../../shared';\nimport { Observable } from 'rxjs';\n\n@Component({\n  selector: 'dm-data-detail-header',\n  templateUrl: './data-detail-header.component.html',\n  styleUrls: ['./data-detail-header.component.scss'],\n})\nexport class DataDetailHeaderComponent {\n  @Select(UiState.getDetailHeaderAccessibility)\n  detailHeaderAccessibility$: Observable<IDetailHeaderAccessibility>;\n\n  @Input() displayName: string;\n\n  constructor(private _location: Location) {}\n\n  navigateToPreviousRoute(): void {\n    this._location.back();\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  *ngIf=\"detailHeaderAccessibility$ | async as detailHeaderAccessibility\"\n  fxLayout=\"row\"\n  fxLayoutAlign=\"start center\"\n  class=\"div-nav-content\"\n>\n  <button\n    mat-raised-button\n    [attr.aria-label]=\"detailHeaderAccessibility.backBtnAriaLabel\"\n    color=\"accent\"\n    (click)=\"navigateToPreviousRoute()\"\n  >\n    <mat-icon>arrow_back</mat-icon>\n  </button>\n  <span class=\"display-name\">{{ displayName }}</span>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Location } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, Subject, takeUntil, tap } from 'rxjs';\nimport {\n  Data,\n  DataState,\n  DetailDataValueTypes,\n  EComponentName,\n  EnvService,\n  IAdvancedSearchChip,\n  IAttribute,\n  IBtnLabel,\n  IConfig,\n  IDataDetail,\n  IEntryIds,\n  IResourceType,\n  ITabProps,\n  IUiEntryIds,\n  InteractionsService,\n  JsTable,\n  Routing,\n  ScreenSize,\n  UiState,\n  getChipValue,\n  getFlatResource,\n  getOrderedKeysSimpleAttributes,\n  getSucceededNotifications,\n  isAttributeValueMatchingChip,\n  isLinkObject,\n  setDataAttribute,\n  setLinkAttributeResource,\n  setTabTitle,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-data-detail-simple-attributes',\n  templateUrl: './data-detail-simple-attributes.component.html',\n  styleUrls: ['./data-detail-simple-attributes.component.scss'],\n})\nexport class DataDetailSimpleAttributesComponent implements OnInit, OnDestroy {\n  private _dataDetail: any;\n  private _onDestroy$ = new Subject<void>();\n  private _screenSize: ScreenSize;\n  private _simpleAttributesConfig: IAttribute[];\n  private _selectedResourceTypeId: string;\n\n  public displayName: string;\n  public simpleAttributes: IDataDetail[];\n  public detailAttributesFxFlexProperty: {\n    [id: string]: string;\n  } = {};\n  public componentNameType = EComponentName;\n  public nbSimpleAttributes: number;\n  public fieldMinWidth: string;\n\n  @Select(UiState.getScreenSize) screenSize$: Observable<ScreenSize>;\n\n  @Select(DataState.getAdvancedSearchChips)\n  advancedSearchChips$: Observable<IAdvancedSearchChip[]>;\n\n  @Input() tab: ITabProps;\n  @Input() configs: JsTable<IConfig>;\n  @Input() resourcesTypes: JsTable<IResourceType>;\n  @Input() selectedEntryIds: IEntryIds;\n  @Input() selectedEntryParentIds: IEntryIds;\n  @Input() editAction: IBtnLabel;\n  @Input() editableAttributesFromBackend: string[];\n  @Input() isUpdatingDataDetail: boolean;\n  @Input() areSimpleAttributesProcessed: boolean;\n\n  @Input() set selectedResourceTypeId(selectedResourceTypeId: string) {\n    if (selectedResourceTypeId) {\n      this._selectedResourceTypeId = selectedResourceTypeId;\n      this._simpleAttributesConfig = this.configs.byId[\n        this._selectedResourceTypeId\n      ].attributes.filter(\n        (attribute: IAttribute) =>\n          attribute.value.field.componentName !== EComponentName.array\n      );\n    }\n  }\n\n  get selectedResourceTypeId(): string {\n    return this._selectedResourceTypeId;\n  }\n\n  @Input() set dataDetail(dataDetail: any) {\n    this._dataDetail = dataDetail;\n\n    if (this._dataDetail) {\n      const config = this.configs.byId[this._selectedResourceTypeId];\n      const externalId: string = this._dataDetail.externalId;\n      const succeededElement: IUiEntryIds = {\n        id: this._dataDetail.id,\n        externalId,\n        label: externalId,\n      };\n      this._dataDetail = getFlatResource(this._dataDetail, config);\n      const orderKeysByAttributeId: string[] = getOrderedKeysSimpleAttributes(\n        this._simpleAttributesConfig,\n        this._dataDetail\n      );\n      this.nbSimpleAttributes = 0;\n\n      const authorizedEndpoints: string[] = this.resourcesTypes.allIds\n        .filter((resourceTypeId: string) =>\n          this.configs.allIds.includes(resourceTypeId)\n        )\n        .map(\n          (resourceTypeId: string) =>\n            this.resourcesTypes.byId[resourceTypeId].endpoint\n        );\n\n      const previousSimpleAttributes: IDataDetail[] = this.simpleAttributes;\n      this.simpleAttributes = [];\n      let advancedSearchChips: IAdvancedSearchChip[] = [];\n      const areUpdatedAttributesMatchingAdvancedSearch: boolean[] = [];\n      if (this.isUpdatingDataDetail) {\n        if (\n          externalId.toLocaleUpperCase() !==\n          this.selectedEntryIds.externalId.toLocaleUpperCase()\n        ) {\n          this._updateExternalId(externalId);\n        }\n        advancedSearchChips = this._store$.selectSnapshot(\n          DataState.getAdvancedSearchChips\n        );\n      }\n\n      orderKeysByAttributeId.forEach((key: string) => {\n        // Get current attribute configuration\n        const attributeConfig: IAttribute = config.attributes.find(\n          (attribute) => attribute.modelRef === key\n        );\n\n        const attributeComponentName: string =\n          attributeConfig.value.field.componentName;\n\n        if (attributeComponentName !== EComponentName.array) {\n          if (attributeConfig.isDetailTitle) {\n            this.displayName = this._dataDetail[key];\n          }\n\n          if (\n            attributeConfig.props.isTreeNodeName ||\n            attributeConfig.props.isListItemName\n          ) {\n            succeededElement.label = this._dataDetail[key];\n          }\n\n          if (this.isUpdatingDataDetail) {\n            const previousDataDetailField: IDataDetail =\n              previousSimpleAttributes.find(\n                (dataDetailField: IDataDetail) => dataDetailField.id === key\n              );\n\n            const matchedChip: IAdvancedSearchChip = advancedSearchChips.find(\n              (chip: IAdvancedSearchChip) => chip.modelRef === key\n            );\n\n            if (\n              !!previousDataDetailField &&\n              this._dataDetail[key] !== previousDataDetailField.dataValue\n            ) {\n              if (!!matchedChip) {\n                const attributeValue: string | boolean = isLinkObject(\n                  this._dataDetail[key]\n                )\n                  ? this._dataDetail[key].id\n                  : this._dataDetail[key];\n                areUpdatedAttributesMatchingAdvancedSearch.push(\n                  isAttributeValueMatchingChip(\n                    getChipValue(matchedChip),\n                    attributeValue,\n                    attributeConfig\n                  )\n                );\n              }\n\n              if (\n                attributeConfig.props.isTreeNodeName ||\n                attributeConfig.props.isListItemName\n              ) {\n                succeededElement.label = this._dataDetail[key];\n                if (attributeConfig.props.isTreeNodeName) {\n                  this._interactionsService.updateTreeNodeName(\n                    this._dataDetail[key]\n                  );\n                } else {\n                  this._interactionsService.updateListItemName(\n                    this._dataDetail[key]\n                  );\n                }\n              }\n            }\n          }\n          const value: DetailDataValueTypes = attributeConfig.props\n            .isBackendLinkObject\n            ? setLinkAttributeResource(\n                this._dataDetail[key],\n                attributeConfig.getValuesParams.requestTarget,\n                authorizedEndpoints\n              )\n            : this._dataDetail[key];\n\n          this.simpleAttributes.push(\n            setDataAttribute(\n              value,\n              attributeConfig,\n              this._envService.ui.displayDateFormat\n            )\n          );\n          this.nbSimpleAttributes++;\n        }\n      });\n      if (areUpdatedAttributesMatchingAdvancedSearch.length > 0) {\n        this._interactionsService.updateFilteredDetailAttributes(\n          areUpdatedAttributesMatchingAdvancedSearch.reduce(\n            (acc, curr) => acc && curr\n          )\n        );\n      }\n\n      this.setFxFlexPropertyForAllAttributes();\n\n      if (this.isUpdatingDataDetail) {\n        const message: string = getSucceededNotifications(\n          [succeededElement],\n          this.editAction\n        );\n\n        this.evtSuccess.emit(message);\n      }\n\n      this.evtSimpleAttributesProcessed.emit(this.simpleAttributes);\n    }\n  }\n\n  get dataDetail() {\n    return this._dataDetail;\n  }\n\n  @Output() evtSimpleAttributesProcessed = new EventEmitter<IDataDetail[]>();\n  @Output() evtSuccess = new EventEmitter<string>();\n\n  constructor(\n    private _interactionsService: InteractionsService,\n    private _store$: Store,\n    private _location: Location,\n    private _router: Router,\n    private _titleService: Title,\n    private _envService: EnvService\n  ) {}\n\n  ngOnInit(): void {\n    this.screenSize$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((ss: ScreenSize) => {\n          this._screenSize = ss;\n          this.setFxFlexPropertyForAllAttributes();\n          this._setFieldMinWidth(ss);\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  getOnDetail(id: string): void {\n    this._store$.dispatch(new Data.SetSelectedEntryId({ id }));\n  }\n\n  setFxFlex(attributeId: string, screenSize: ScreenSize = null): void {\n    let flexGrow = 0;\n    let flexShrink = 0;\n    let flexBasis = 'auto';\n    const currentAttribute: IAttribute = this.configs.byId[\n      this._selectedResourceTypeId\n    ].attributes.find(\n      (attribute: IAttribute) => attribute.modelRef === attributeId\n    );\n    const isTextArea: boolean =\n      currentAttribute?.value.field.componentName === EComponentName.textarea;\n    if (\n      currentAttribute?.props?.isMultiple ||\n      isTextArea ||\n      currentAttribute?.props?.isExternalLink\n    ) {\n      flexGrow = 1;\n      flexShrink = 1;\n      if (isTextArea || currentAttribute?.props?.isExternalLink) {\n        flexBasis = '100%';\n      }\n    } else if (this.nbSimpleAttributes > 2) {\n      switch (screenSize) {\n        case 'sm':\n        case 'xs':\n          flexBasis = '100%';\n          break;\n        case 'md':\n          flexBasis = '50%';\n          break;\n        default:\n          flexBasis = '33.3%';\n          break;\n      }\n    }\n    this.detailAttributesFxFlexProperty[attributeId] =\n      flexGrow + ' ' + flexShrink + ' ' + flexBasis;\n  }\n\n  private _setFieldMinWidth(screenSize): void {\n    switch (screenSize) {\n      case 'sm':\n      case 'xs':\n        this.fieldMinWidth = '100%';\n        break;\n      case 'md':\n        this.fieldMinWidth = '50%';\n        break;\n      default:\n        this.fieldMinWidth = '33.3%';\n        break;\n    }\n  }\n\n  setFxFlexPropertyForAllAttributes(): void {\n    this.detailAttributesFxFlexProperty = {};\n    this.simpleAttributes.forEach((attribute: IDataDetail) =>\n      this.setFxFlex(attribute.id, this._screenSize)\n    );\n  }\n\n  private _updateExternalId(newValue: string): void {\n    this._interactionsService.updateExternalId(newValue);\n    const updatedUrl: string = this._router.url.replace(\n      /[^/]+$/g,\n      encodeURIComponent(newValue.toLowerCase())\n    );\n    this.selectedEntryIds.externalId = newValue;\n    this._store$.dispatch([\n      new Data.SetSelectedEntryExternalId({\n        externalId: newValue,\n      }),\n      new Routing.UpdateSelectedEntryRoute({\n        route: {\n          url: updatedUrl,\n          extras: {\n            ids: this.selectedEntryIds,\n            parentIds: this.selectedEntryParentIds,\n          },\n        },\n      }),\n    ]);\n    setTabTitle(\n      this.tab,\n      this._titleService,\n      null,\n      this.configs.byId[this._selectedResourceTypeId],\n      this.selectedEntryParentIds,\n      this.selectedEntryIds\n    );\n    this._location.replaceState(updatedUrl, '', this._location.getState());\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  *ngIf=\"areSimpleAttributesProcessed\"\n  fxLayout=\"{{ nbSimpleAttributes > 2 ? 'row wrap' : 'column' }}\"\n  class=\"div-simple-attributes\"\n>\n  <ng-container *ngFor=\"let detail of simpleAttributes\">\n    <div\n      flexGrowFitContent\n      *ngIf=\"detail?.isVisible && detail?.componentName !== 'array'\"\n      [style.minWidth]=\"fieldMinWidth\"\n      [style.flex]=\"detailAttributesFxFlexProperty[detail.id]\"\n      [ngClass]=\"[\n        detail.componentName !== 'img-input' ? 'detail' : '',\n        detail.id\n      ]\"\n      [minWidth]=\"fieldMinWidth\"\n    >\n      <div\n        *ngIf=\"detail?.componentName === 'img-input'; else displayData\"\n        class=\"detail-img-div\"\n      >\n        <img\n          #currentImg\n          [src]=\"'data:image/jpeg;base64,' + detail.dataValue.toString()\"\n          [alt]=\"detail.label.long\"\n          [ngClass]=\"\n            currentImg.width / currentImg.height > 1\n              ? 'detail-img-landscape'\n              : 'detail-img-portrait'\n          \"\n        />\n      </div>\n      <ng-template #displayData>\n        <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"detail-label\">\n          <mat-icon aria-hidden=\"true\" class=\"detail-icon\">{{\n            detail.icon\n          }}</mat-icon>\n          <span [title]=\"detail.label.long\" class=\"label ellipsis\">\n            {{ detail.label.long }} :\n          </span>\n        </div>\n        <div\n          *ngIf=\"!detail?.isBackendLinkObject; else linkObjectField\"\n          [title]=\"detail.booleanDisplayedValue ?? detail.dataValue\"\n          [ngClass]=\"\n            detail.componentName !== componentNameType.textarea\n              ? 'ellipsis'\n              : 'break-word'\n          \"\n          class=\"text-field\"\n        >\n          <a\n            *ngIf=\"detail?.isExternalLink; else textField\"\n            draggable=\"false\"\n            target=\"_blank\"\n            [href]=\"detail.dataValue\"\n            class=\"external-link\"\n          >\n            {{ detail.dataValue }}\n          </a>\n          <ng-template #textField>\n            {{ detail.booleanDisplayedValue ?? detail.dataValue }}\n          </ng-template>\n        </div>\n        <ng-template #linkObjectField>\n          <ng-template\n            #dataDetailResourceTemplate\n            let-dataDetailResource=\"dataDetailResource\"\n          >\n            <span\n              *ngIf=\"dataDetailResource.isClickable; else noClickableValue\"\n              [routerLink]=\"dataDetailResource.routerLinkValue\"\n              (click)=\"getOnDetail(dataDetailResource.id)\"\n              [ngClass]=\"{ ellipsis: !detail?.isMultiple }\"\n              class=\"text-field-link\"\n            >\n              {{ dataDetailResource.value }}\n            </span>\n            <ng-template #noClickableValue>\n              <span\n                [ngClass]=\"{ ellipsis: !detail?.isMultiple }\"\n                class=\"ellipsis\"\n                >{{ dataDetailResource.value }}</span\n              >\n            </ng-template>\n          </ng-template>\n          <div fxLayout=\"row wrap\" class=\"text-field\">\n            <ng-container\n              *ngIf=\"!detail?.isMultiple; else multipleLinks\"\n              [ngTemplateOutlet]=\"dataDetailResourceTemplate\"\n              [ngTemplateOutletContext]=\"{\n                dataDetailResource: detail.dataValue\n              }\"\n            >\n            </ng-container>\n            <ng-template #multipleLinks>\n              <ng-container\n                *ngFor=\"let value of detail.dataValue; let i = index\"\n              >\n                <ng-container\n                  [ngTemplateOutlet]=\"dataDetailResourceTemplate\"\n                  [ngTemplateOutletContext]=\"{ dataDetailResource: value }\"\n                ></ng-container>\n                <span *ngIf=\"i < detail?.dataValue?.length - 1\"> ,&nbsp; </span>\n              </ng-container>\n            </ng-template>\n          </div>\n        </ng-template>\n      </ng-template>\n    </div>\n  </ng-container>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject, takeUntil } from 'rxjs';\nimport { EnvService, fadeIn } from '../../../../../../shared';\nimport { DataDetailSimpleAttributesComponent } from '../../../../../../ui';\nimport { DataDetailViewProperties } from '../../../../shared/helpers/data-detail.helper';\nimport { RoutingService } from '../../../../shared/services/routing.service';\n\n@Component({\n  selector: 'dm-data-detail',\n  templateUrl: './data-detail.component.html',\n  styleUrls: ['./data-detail.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class DataDetailComponent\n  extends DataDetailViewProperties\n  implements OnInit, OnDestroy\n{\n  private _onDestroy$ = new Subject<void>();\n\n  @ViewChild('simpleAttributes')\n  simpleAttributes: DataDetailSimpleAttributesComponent;\n\n  constructor(\n    public store$: Store,\n    public toastrService: ToastrService,\n    public routingService: RoutingService,\n    public titleService: Title,\n    public envService: EnvService\n  ) {\n    super(store$, toastrService, routingService, titleService, envService);\n  }\n\n  ngOnInit(): void {\n    super.handleFetchingDetail().pipe(takeUntil(this._onDestroy$)).subscribe();\n    super.initTabTitle().pipe(takeUntil(this._onDestroy$)).subscribe();\n    super.initDataDetail().pipe(takeUntil(this._onDestroy$)).subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  *ngIf=\"isFetchingDataDetailSuccess$ | async\"\n  fxLayout=\"column\"\n  class=\"data-detail-page-container\"\n>\n  <div [@fadeIn]=\"areSimpleAttributesProcessed\">\n    <dm-data-detail-header\n      *ngIf=\"parentDataComponent === componentNameType.ARRAY\"\n      [displayName]=\"simpleAttributes.displayName\"\n    ></dm-data-detail-header>\n\n    <dm-data-detail-simple-attributes\n      #simpleAttributes\n      [configs]=\"configs\"\n      [areSimpleAttributesProcessed]=\"areSimpleAttributesProcessed\"\n      [selectedResourceTypeId]=\"selectedResourceTypeId\"\n      [selectedEntryIds]=\"selectedEntryIds\"\n      [selectedEntryParentIds]=\"selectedEntryParentIds\"\n      [editableAttributesFromBackend]=\"editableAttributesFromBackend\"\n      [resourcesTypes]=\"resourcesTypes\"\n      [isUpdatingDataDetail]=\"isUpdatingDataDetail\"\n      [dataDetail]=\"dataDetail\"\n      [editAction]=\"editAction\"\n      [tab]=\"tab\"\n      (evtSimpleAttributesProcessed)=\"whenSimpleAttributesProcessed($event)\"\n      (evtSuccess)=\"displaySuccessToast($event)\"\n    ></dm-data-detail-simple-attributes>\n\n    <div *ngIf=\"editFormAttributes.length > 0\" fxLayout=\"row\" #divEditButton>\n      <dm-data-detail-edit-button\n        [selectedResourceTypeId]=\"selectedResourceTypeId\"\n        [selectedEntryIds]=\"selectedEntryIds\"\n        [resourcesTypes]=\"resourcesTypes\"\n        [editAction]=\"editAction\"\n        [formDataAttributes]=\"editFormAttributes\"\n        (updatedEntryAttributes)=\"updateEntryAttributes($event)\"\n      ></dm-data-detail-edit-button>\n    </div>\n  </div>\n\n  <dm-loading-spinner\n    *ngIf=\"!areSimpleAttributesProcessed || !areArrayAttributesProcessed\"\n  ></dm-loading-spinner>\n\n  <dm-data-detail-array-attributes\n    [areArrayAttributesProcessed]=\"areArrayAttributesProcessed\"\n    [configs]=\"configs\"\n    [selectedResourceTypeId]=\"selectedResourceTypeId\"\n    [selectedEntryIds]=\"selectedEntryIds\"\n    [selectedEntryParentIds]=\"selectedEntryParentIds\"\n    [currentUser]=\"currentUser\"\n    [resourcesTypes]=\"resourcesTypes\"\n    [editableAttributesFromBackend]=\"editableAttributesFromBackend\"\n    [endpoint]=\"endpoint\"\n    [dataDetail]=\"dataDetail\"\n    (evtArrayAttributesProcessed)=\"whenArrayAttributesProcessed($event)\"\n    (evtSuccess)=\"displaySuccessToast($event)\"\n    [@fadeIn]=\"areArrayAttributesProcessed\"\n  ></dm-data-detail-array-attributes>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  ViewChild,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatButton } from '@angular/material/button';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { Actions, Select, Store, ofActionSuccessful } from '@ngxs/store';\nimport {\n  Observable,\n  Subject,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  fromEvent,\n  merge,\n  pairwise,\n  startWith,\n  take,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport {\n  Data,\n  EnvService,\n  IAdvancedSearchAccessibility,\n  IAdvancedSearchChip,\n  IAttribute,\n  IConfig,\n  IData,\n  IFormData,\n  InteractionsService,\n  UiState,\n  finalizeWithValue,\n  getAdvancedSearchChipsFromFormData,\n  setFormFieldDataValue,\n} from '../../shared';\n\nenum ESearchMode {\n  ADVANCED = 'advanced',\n  SIMPLE = 'simple',\n}\n\nenum EOverlayClickMode {\n  ENABLE = 'enable',\n  DISABLE = 'disable',\n}\n\n@Component({\n  selector: 'dm-advanced-search',\n  templateUrl: './advanced-search.component.html',\n  styleUrls: ['./advanced-search.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdvancedSearchComponent implements OnInit, OnDestroy {\n  @Select(UiState.getAdvancedSearchAccessibility)\n  advancedSearchAccessibility$: Observable<IAdvancedSearchAccessibility>;\n\n  @Input() set searchFormValue(value: string) {\n    if (value === '' && this._searchFormValue !== '') {\n      this.searchForm.reset();\n    }\n    this._searchFormValue = value ?? '';\n    if (this.resetBtnClicked) {\n      this.resetBtnClicked = false;\n    }\n  }\n\n  get searchFormValue(): string {\n    return this._searchFormValue;\n  }\n\n  private _selectedResourceRootTypeId: string;\n  @Input() set selectedResourceRootTypeId(val: string) {\n    this._selectedResourceRootTypeId = val;\n    if (!!this.searchForm) {\n      this.searchForm.setValue({ search: this.searchFormValue });\n    }\n  }\n\n  get selectedResourceRootTypeId(): string {\n    return this._selectedResourceRootTypeId;\n  }\n\n  private _advancedSearchChips: IAdvancedSearchChip[] = [];\n  @Input() set advancedSearchChips(chips: IAdvancedSearchChip[]) {\n    this._advancedSearchChips = chips ?? [];\n    if (!this._isSearchSuccess) {\n      this.setFormFieldsWithChips();\n    } else {\n      this._isSearchSuccess = false;\n    }\n    if (this.resetBtnClicked) {\n      this.resetBtnClicked = false;\n    }\n    this.removingChips = this.removingChips.filter((id: string) =>\n      chips.map((chip: IAdvancedSearchChip) => chip.modelRef).includes(id)\n    );\n  }\n\n  get advancedSearchChips(): IAdvancedSearchChip[] {\n    return this._advancedSearchChips;\n  }\n\n  private _resourceTypeConfig: IConfig;\n  @Input() set resourceTypeConfig(config: IConfig) {\n    this._resourceTypeConfig = config;\n    this.formFields = [];\n    this._resourceTypeConfig.attributes.forEach((attribute: IAttribute) => {\n      if (attribute.props.isSearchable) {\n        this.formFields.push({\n          ...attribute,\n          dataValue: null,\n        });\n      }\n    });\n  }\n\n  get resourceTypeConfig(): IConfig {\n    return this._resourceTypeConfig;\n  }\n  @Input() isLargeScreen: boolean;\n\n  @Output() evtUpdateDataArray = new EventEmitter<void | IData>();\n\n  @ViewChild('advancedSearchMenu') menu: MatMenu;\n\n  @ViewChild('matHint') matHint: ElementRef;\n\n  @ViewChild('searchFormField') searchFormField: MatFormField;\n  @ViewChild('menuTriggerBtn') menuTriggerBtn: MatButton;\n  @ViewChild('menuTrigger', { static: false }) menuTrigger: MatMenuTrigger;\n\n  public elementRef: ElementRef;\n\n  public searchForm: FormGroup;\n\n  public resizeObservable$: Observable<Event>;\n\n  public resetBtnClicked = false;\n\n  public removingChips: string[] = [];\n  public formFields: IFormData[] = [];\n\n  public isGenericFormEnable = true;\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _searchFormValue = '';\n\n  private _isSearchSuccess = false;\n\n  constructor(\n    private _el: ElementRef,\n    private _fb: FormBuilder,\n    private _actions$: Actions,\n    private _store$: Store,\n    private _renderer: Renderer2,\n    @Inject(DOCUMENT) private document: Document,\n    private _interactionsService: InteractionsService,\n    private _overlayContainer: OverlayContainer,\n    private _envService: EnvService\n  ) {\n    this.elementRef = this._el;\n  }\n\n  ngOnInit(): void {\n    this.searchForm = this._fb.group({\n      search: [this.searchFormValue ?? '', Validators.minLength(3)],\n    });\n\n    this.searchForm\n      .get('search')\n      .valueChanges.pipe(\n        takeUntil(this._onDestroy$),\n        debounceTime(600),\n        startWith(this.searchForm.get('search').value),\n        tap((value: string) => {\n          if (\n            this.searchFormValue !== '' &&\n            value === this.searchFormValue &&\n            !this.resetBtnClicked\n          ) {\n            this._interactionsService.cancelRequest();\n            this._store$.dispatch(new Data.StopFilteringResources());\n          }\n        }),\n        distinctUntilChanged(\n          (prev, curr) =>\n            prev === curr ||\n            (this.searchFormValue !== '' && this.searchFormValue === curr)\n        ),\n        pairwise(),\n        filter(([prev, curr]) => {\n          const isClearingSearchWithKeyboard =\n            prev !== null &&\n            curr !== null &&\n            prev.length > curr.length &&\n            curr.length <= 2;\n          if (isClearingSearchWithKeyboard) {\n            this.resetSearch();\n          }\n          return curr !== null && curr.length > 2;\n        }),\n        tap(([_prev, curr]) => {\n          this._store$.dispatch(\n            new Data.FilterResources({\n              actionOnSuccess: new Data.SetSearchFormValue({\n                searchForm: curr,\n                dataTypeId: this.selectedResourceRootTypeId,\n              }),\n              filterPayload: curr,\n            })\n          );\n        })\n      )\n      .subscribe();\n\n    let advancedSearchMenuWasOpened = false;\n\n    this.resizeObservable$ = fromEvent(window, 'resize');\n    this.resizeObservable$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((_) => {\n          if (!advancedSearchMenuWasOpened && this.menuTrigger) {\n            advancedSearchMenuWasOpened = this.menuTrigger.menuOpen;\n          }\n        }),\n        tap((_) => {\n          if (this.menuTrigger) {\n            this.menuTrigger.closeMenu();\n          }\n        }),\n        debounceTime(300),\n        tap((_) => {\n          if (advancedSearchMenuWasOpened && this.menuTrigger) {\n            this.menuTrigger.openMenu();\n            advancedSearchMenuWasOpened = false;\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  onResetSearchBtnClick(): void {\n    this.resetBtnClicked = true;\n    this.searchForm.disable({ emitEvent: false });\n    this.resetSearch();\n  }\n\n  resetSearch(): void {\n    if (this.searchFormValue !== '' || this.advancedSearchChips?.length > 0) {\n      const searchMode: ESearchMode =\n        this.searchFormValue !== '' ? ESearchMode.SIMPLE : ESearchMode.ADVANCED;\n      const payload: {\n        actionOnSuccess: any;\n        filterPayload: string | IAdvancedSearchChip[];\n      } =\n        searchMode === ESearchMode.SIMPLE\n          ? {\n              actionOnSuccess: new Data.ResetSearchFormValue({\n                dataTypeId: this.selectedResourceRootTypeId,\n              }),\n              filterPayload: '',\n            }\n          : {\n              actionOnSuccess: new Data.ResetAdvancedSearchChips({\n                dataTypeId: this.selectedResourceRootTypeId,\n              }),\n              filterPayload: [] as IAdvancedSearchChip[],\n            };\n      this._store$.dispatch(new Data.FilterResources(payload));\n    } else {\n      this._interactionsService.cancelRequest();\n      this._store$.dispatch(new Data.StopFilteringResources());\n      this.searchForm.reset();\n      this.searchForm.enable({ emitEvent: false });\n      if (this.resetBtnClicked) {\n        this.resetBtnClicked = false;\n      }\n    }\n  }\n\n  onSubmit(): void {\n    this._actions$\n      .pipe(\n        ofActionSuccessful(\n          Data.FetchResourcesSuccess,\n          Data.FetchResourcesError\n        ),\n        take(1),\n        takeUntil(\n          merge(this._onDestroy$, this._interactionsService.cancelRequest$)\n        ),\n        finalizeWithValue(\n          (action: Data.FetchResourcesSuccess | Data.FetchResourcesError) => {\n            this.menuTrigger.closeMenu();\n            this._switchClickOnOverlay(EOverlayClickMode.ENABLE);\n            this.isGenericFormEnable = true;\n\n            if (action instanceof Data.FetchResourcesError || !action) {\n              this.setFormFieldsWithChips();\n            } else if (action instanceof Data.FetchResourcesSuccess) {\n              this._isSearchSuccess = true;\n            }\n          }\n        )\n      )\n      .subscribe();\n\n    const updatedChips: IAdvancedSearchChip[] =\n      getAdvancedSearchChipsFromFormData(this.formFields);\n\n    this.isGenericFormEnable = false;\n    this._switchClickOnOverlay(EOverlayClickMode.DISABLE);\n\n    this._store$.dispatch(\n      new Data.FilterResources({\n        actionOnSuccess: new Data.SetAdvancedSearchChips({\n          advancedSearchChips: updatedChips,\n          dataTypeId: this.selectedResourceRootTypeId,\n        }),\n        filterPayload: updatedChips,\n      })\n    );\n  }\n\n  removeChip(chip: IAdvancedSearchChip): void {\n    const index = this.advancedSearchChips.indexOf(chip);\n\n    if (index >= 0) {\n      const chipModelRef: string = chip.associatedFieldId ?? chip.modelRef;\n      this.removingChips.push(chipModelRef);\n      const remainingFormFields: IFormData[] = this.formFields.filter(\n        (formData: IFormData) =>\n          formData.modelRef !== chipModelRef && !!formData.dataValue\n      );\n      if (remainingFormFields.length > 0) {\n        this._store$.dispatch(\n          new Data.FilterResources({\n            actionOnSuccess: new Data.RemoveAdvancedSearchChip({\n              modelRef: chipModelRef,\n              dataTypeId: this.selectedResourceRootTypeId,\n            }),\n            filterPayload:\n              getAdvancedSearchChipsFromFormData(remainingFormFields),\n          })\n        );\n      } else {\n        this.resetSearch();\n      }\n    }\n  }\n\n  setMenuPanelPosition(): void {\n    setTimeout(() => {\n      if (\n        this.searchFormField &&\n        this.menuTriggerBtn &&\n        this.menu &&\n        this.menu.panelId\n      ) {\n        const panelLeftOffset: number =\n          this.searchFormField._elementRef.nativeElement.getBoundingClientRect()\n            .left;\n        const panelTopOffset: number =\n          this.menuTriggerBtn._elementRef.nativeElement.getBoundingClientRect()\n            .bottom;\n        const menuPanel: HTMLElement = this.document.getElementById(\n          this.menu.panelId\n        ).parentElement;\n        this._renderer.setStyle(menuPanel, 'top', '0px');\n        this._renderer.setStyle(menuPanel, 'left', '0px');\n        this._renderer.setStyle(menuPanel, 'margin-top', panelTopOffset + 'px');\n        this._renderer.setStyle(\n          menuPanel,\n          'margin-left',\n          panelLeftOffset + 'px'\n        );\n      }\n    }, 1);\n  }\n\n  setFormFieldsWithChips(): void {\n    const chipIdIndexMap: Map<string, number> = new Map(\n      this.advancedSearchChips.map((chip: IAdvancedSearchChip, index) => [\n        chip.associatedFieldId ?? chip.modelRef,\n        index,\n      ])\n    );\n    this.formFields.forEach((formData: IFormData) => {\n      if (chipIdIndexMap.has(formData.modelRef)) {\n        setFormFieldDataValue(\n          formData,\n          this.advancedSearchChips[chipIdIndexMap.get(formData.modelRef)].value,\n          this._envService.ui.displayDateFormat\n        );\n      } else {\n        formData.dataValue = null;\n      }\n    });\n  }\n\n  private _switchClickOnOverlay(mode: EOverlayClickMode): void {\n    const overlayContainer: HTMLElement =\n      this._overlayContainer.getContainerElement();\n    switch (mode) {\n      case EOverlayClickMode.ENABLE:\n        overlayContainer.classList.remove('disable-overlay');\n        overlayContainer.style.pointerEvents = 'none';\n        overlayContainer.onclick = null;\n        break;\n      case EOverlayClickMode.DISABLE:\n        overlayContainer.classList.add('disable-overlay');\n        overlayContainer.style.pointerEvents = 'auto';\n        overlayContainer.onclick = (event) => event.stopPropagation();\n        break;\n      default:\n        break;\n    }\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<form [formGroup]=\"searchForm\" class=\"search-form\">\n  <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n    <mat-form-field\n      *ngIf=\"\n        advancedSearchAccessibility$ | async as advancedSearchAccessibility\n      \"\n      fxFlex\n      color=\"accent\"\n      appearance=\"fill\"\n      class=\"search-form-field\"\n      #searchFormField\n    >\n      <mat-label>\n        <mat-icon aria-hidden=\"true\">search</mat-icon>\n        {{ advancedSearchAccessibility.label }}\n      </mat-label>\n      <mat-chip-grid #chipList>\n        <mat-chip-row\n          *ngFor=\"let chip of advancedSearchChips\"\n          color=\"accent\"\n          [matTooltip]=\"chip.displayedContent\"\n          [matTooltipDisabled]=\"isLargeScreen\"\n          [disabled]=\"resetBtnClicked || removingChips.includes(chip.modelRef)\"\n          (removed)=\"removeChip(chip)\"\n        >\n          {{ chip.displayedContent }}\n          <button\n            matChipRemove\n            (keydown.enter)=\"removeChip(chip)\"\n            aria-hidden=\"true\"\n          >\n            <mat-icon tabindex=\"0\">cancel</mat-icon>\n          </button>\n        </mat-chip-row>\n        <input\n          disableControl\n          type=\"text\"\n          #searchInput\n          matInput\n          formControlName=\"search\"\n          minlength=\"3\"\n          [matChipInputFor]=\"chipList\"\n          [disableControl]=\"\n            advancedSearchChips.length > 0 ||\n            (menuTrigger && menuTrigger.menuOpen) ||\n            resetBtnClicked\n          \"\n          class=\"search-input\"\n        />\n      </mat-chip-grid>\n      <mat-hint\n        #matHint\n        *ngIf=\"\n          searchInput?.value?.length < 3 && advancedSearchChips.length === 0;\n          else advancedSearchActivated\n        \"\n      >\n        {{ advancedSearchAccessibility.hint }}\n      </mat-hint>\n      <ng-template #advancedSearchActivated>\n        <mat-hint #matHint *ngIf=\"advancedSearchChips.length > 0\">\n          {{ advancedSearchAccessibility.activatedSearchHint }}\n        </mat-hint>\n      </ng-template>\n      <div matSuffix class=\"div-search-suffix-btn\">\n        <button\n          *ngIf=\"\n            searchInput?.value?.length > 0 || advancedSearchChips?.length > 0\n          \"\n          [disabled]=\"resetBtnClicked\"\n          mat-icon-button\n          type=\"button\"\n          [attr.aria-label]=\"advancedSearchAccessibility.clearSearch\"\n          (click)=\"onResetSearchBtnClick()\"\n          class=\"clear-input-btn\"\n          [matTooltip]=\"advancedSearchAccessibility.clearSearch\"\n        >\n          <mat-icon aria-hidden=\"true\"> clear </mat-icon>\n        </button>\n        <button\n          #menuTriggerBtn\n          #menuTrigger=\"matMenuTrigger\"\n          type=\"button\"\n          mat-icon-button\n          [attr.aria-label]=\"\n            advancedSearchAccessibility.displayAdvancedSearchMenu\n          \"\n          [matMenuTriggerFor]=\"advancedSearchMenu\"\n          [disabled]=\"\n            searchInput?.value.length > 0 ||\n            resetBtnClicked ||\n            removingChips.length > 0\n          \"\n          (menuOpened)=\"setMenuPanelPosition()\"\n          (click)=\"$event.stopPropagation()\"\n          class=\"toggle-advanced-search-menu-btn\"\n          [matTooltip]=\"advancedSearchAccessibility.displayAdvancedSearchMenu\"\n        >\n          <mat-icon\n            [ngClass]=\"{\n              'toggle-advanced-search-menu-icon': menuTrigger.menuOpen\n            }\"\n            aria-hidden=\"true\"\n          >\n            arrow_drop_down\n          </mat-icon>\n        </button>\n        <mat-menu\n          #advancedSearchMenu=\"matMenu\"\n          backdropClass=\"advanced-search-menu\"\n        >\n          <ng-template matMenuContent>\n            <div\n              class=\"advanced-search-menu-content\"\n              (click)=\"$event.stopPropagation()\"\n            >\n              <dm-generic-form\n                [enableCheckoutForm]=\"isGenericFormEnable\"\n                [formData]=\"formFields\"\n                [crudAction]=\"'search'\"\n                (submitForm)=\"onSubmit()\"\n              ></dm-generic-form>\n            </div>\n          </ng-template>\n        </mat-menu>\n      </div>\n    </mat-form-field>\n  </div>\n</form>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, Subject, debounceTime, takeUntil, tap } from 'rxjs';\nimport {\n  Data,\n  IFilterAccessibility,\n  IPersistentUiData,\n  JsTable,\n  UiState,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-generic-data-header',\n  templateUrl: './generic-data-header.component.html',\n  styleUrls: ['./generic-data-header.component.scss'],\n})\nexport class GenericDataHeaderComponent\n  implements OnInit, OnDestroy, AfterViewInit\n{\n  @Select(UiState.getFilterAccessibility)\n  filterAccessibility$: Observable<IFilterAccessibility>;\n\n  private readonly _COMPONENT_MIN_WIDTH = 290;\n  private _largeHeaderWidth: number;\n  public largeBtnAdditionnalClasses: Record<string, boolean> = {\n    'hide-btn': false,\n  };\n  public smallBtnAdditionnalClasses: Record<string, boolean> = {\n    'hide-btn': false,\n  };\n\n  @ViewChild('createLargeBtn') createLargeBtn: MatButton;\n  @ViewChild('createMiniFabBtn') createMiniFabBtn: MatButton;\n\n  @Input() set advancedSearchMatHint(advancedSearchMatHint: ElementRef) {\n    if (!!advancedSearchMatHint) {\n      this._advancedSearchMatHint = advancedSearchMatHint;\n\n      this.lineHeight = Math.round(\n        Number(\n          getComputedStyle(this._advancedSearchMatHint.nativeElement)\n            .getPropertyValue('line-height')\n            .replace('px', '')\n        )\n      );\n    }\n  }\n\n  get advancedSearchMatHint(): ElementRef {\n    return this._advancedSearchMatHint;\n  }\n\n  @Input() canCreate: boolean;\n\n  @Input() addBtnLabel: string;\n\n  @Input() dataJsTable: JsTable<IPersistentUiData>;\n\n  @Input() set selectedResourceRootTypeId(selectedResourceRootTypeId: string) {\n    this._largeHeaderWidth = null;\n    this.largeBtnAdditionnalClasses = { 'hide-btn': false };\n    this.smallBtnAdditionnalClasses = { 'hide-btn': false };\n    this._selectedResourceRootTypeId = selectedResourceRootTypeId;\n    this.search =\n      this.dataJsTable.byId[this.selectedResourceRootTypeId]?.filterValue;\n  }\n\n  get selectedResourceRootTypeId(): string {\n    return this._selectedResourceRootTypeId;\n  }\n\n  @Input() set offsetWidth(offsetWidth: number) {\n    if (!!offsetWidth) {\n      this._offsetWidth = offsetWidth;\n      this._updateButtonDisplay();\n    }\n  }\n\n  get offsetWidth(): number {\n    return this._offsetWidth;\n  }\n\n  @Input() isLargeScreen: boolean;\n\n  @Input() isAdvancedSearchActivated: boolean;\n\n  @Output() clickOnAddResourceBtn = new EventEmitter<void>();\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _advancedSearchMatHint: ElementRef;\n\n  private _offsetWidth: number;\n\n  private _selectedResourceRootTypeId: string;\n\n  public divAddButtonMaxWidth: number;\n\n  public search = '';\n\n  public modelChanged = new Subject<string>();\n\n  public lineHeight: number;\n\n  constructor(private _store$: Store) {}\n\n  ngOnInit(): void {\n    this.modelChanged\n      .pipe(\n        debounceTime(300),\n        takeUntil(this._onDestroy$),\n        tap((currentSearch) => {\n          this._store$.dispatch(\n            new Data.SetFilterValue({\n              filterValue: currentSearch,\n              dataTypeId: this.selectedResourceRootTypeId,\n            })\n          );\n        })\n      )\n      .subscribe();\n  }\n\n  ngAfterViewInit(): void {\n    let largeBtnWidth = 0;\n    let smallBtnWidth = 0;\n    if (this.canCreate) {\n      largeBtnWidth = this.createLargeBtn._elementRef.nativeElement.offsetWidth;\n      smallBtnWidth =\n        this.createMiniFabBtn._elementRef.nativeElement.offsetWidth;\n    }\n    let filterMinWidth = this._COMPONENT_MIN_WIDTH - smallBtnWidth;\n    this._largeHeaderWidth = filterMinWidth + largeBtnWidth;\n    this._updateButtonDisplay();\n  }\n\n  clearInputFilter(): void {\n    this.search = '';\n    this.modelChanged.next('');\n  }\n\n  updateSearch(search: string): void {\n    this.modelChanged.next(search);\n  }\n\n  addNewResource(): void {\n    this.clickOnAddResourceBtn.emit();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  private _updateButtonDisplay(): void {\n    if (this._largeHeaderWidth != null) {\n      const displayLargeBtn = this._largeHeaderWidth <= this.offsetWidth;\n      this.largeBtnAdditionnalClasses = { 'hide-btn': !displayLargeBtn };\n      this.smallBtnAdditionnalClasses = { 'hide-btn': displayLargeBtn };\n    }\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div fxLayout=\"row\" class=\"div-gnc-filter\">\n  <mat-form-field\n    *ngIf=\"filterAccessibility$ | async as filterAccessibility\"\n    fxFlex\n    color=\"accent\"\n    [ngClass]=\"{\n      'gnc-filter-activated':\n        advancedSearchMatHint?.nativeElement.offsetHeight <= lineHeight\n    }\"\n    class=\"gnc-filter\"\n  >\n    <mat-label>\n      <mat-icon aria-hidden=\"true\">filter_list_alt</mat-icon>\n      {{ filterAccessibility.label }}\n    </mat-label>\n    <input\n      type=\"text\"\n      matInput\n      [(ngModel)]=\"search\"\n      (ngModelChange)=\"updateSearch($event)\"\n      class=\"filter\"\n    />\n    <button\n      *ngIf=\"search\"\n      matSuffix\n      mat-icon-button\n      [attr.aria-label]=\"filterAccessibility.clearSearch\"\n      (click)=\"clearInputFilter()\"\n      class=\"reset-input-btn\"\n      [matTooltip]=\"filterAccessibility.clearSearch\"\n    >\n      <mat-icon aria-hidden=\"true\"> clear </mat-icon>\n    </button>\n  </mat-form-field>\n  <div\n    *ngIf=\"canCreate\"\n    class=\"div-add-button\"\n    [ngClass]=\"{\n      'div-add-button-with-advanced-search':\n        advancedSearchMatHint?.nativeElement.offsetHeight <= lineHeight\n    }\"\n  >\n    <button\n      #createLargeBtn\n      mat-raised-button\n      color=\"accent\"\n      (click)=\"addNewResource()\"\n      class=\"lg-add-btn\"\n      [ngClass]=\"largeBtnAdditionnalClasses\"\n    >\n      {{ addBtnLabel }}\n    </button>\n    <button\n      #createMiniFabBtn\n      mat-mini-fab\n      color=\"accent\"\n      matTooltipPosition=\"right\"\n      [matTooltip]=\"addBtnLabel\"\n      (click)=\"addNewResource()\"\n      class=\"sm-add-btn\"\n      [ngClass]=\"smallBtnAdditionnalClasses\"\n    >\n      <mat-icon aria-hidden=\"true\">add</mat-icon>\n    </button>\n  </div>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport {\n  ConfigsState,\n  DataState,\n  ErrorState,\n  HeaderState,\n  IConfig,\n  INotFoundAccessibility,\n  JsTable,\n  setTabTitle,\n  UiState,\n} from '../../shared';\n\n@Component({\n  selector: 'dm-not-found-404',\n  templateUrl: './not-found-404.component.html',\n  styleUrls: ['./not-found-404.component.scss'],\n})\nexport class NotFound404Component implements OnInit, OnDestroy {\n  @Select(DataState.getSelectedResourceTypeId)\n  selectedResourceTypeId$: Observable<string>;\n\n  @Select(ConfigsState.getConfigsJsTable) configsJsTable$: Observable<\n    JsTable<IConfig>\n  >;\n\n  @Select(UiState.getNotFoundAccessibility)\n  notFoundAccessibility$: Observable<INotFoundAccessibility>;\n\n  private _onDestroy$ = new Subject<void>();\n\n  constructor(\n    private _store$: Store,\n    private _titleService: Title\n  ) {}\n\n  ngOnInit(): void {\n    this.selectedResourceTypeId$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.configsJsTable$),\n        tap(([selectedResourceTypeId, configs]) => {\n          const notFoundTabTitle = this._store$.selectSnapshot(\n            ErrorState.getNotFoundTabTitle\n          );\n          setTabTitle(\n            this._store$.selectSnapshot(HeaderState.getTabProps),\n            this._titleService,\n            !!selectedResourceTypeId\n              ? configs.byId[selectedResourceTypeId].label +\n                  ' - ' +\n                  notFoundTabTitle\n              : notFoundTabTitle\n          );\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  *ngIf=\"notFoundAccessibility$ | async as notFoundAccessibility\"\n  fxLayout=\"column\"\n  fxLayoutAlign=\"center center\"\n  fxFlexFill\n  class=\"not-found-404-content\"\n>\n  <img\n    draggable=\"false\"\n    [alt]=\"notFoundAccessibility.notFoundLogoAlt\"\n    src=\"assets/images/404-black-logo.png\"\n  />\n\n  <p class=\"details-404\">{{ notFoundAccessibility.notFoundDetailmsg }}</p>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '../shared';\nimport { DataDetailHeaderComponent } from './data-detail-header/data-detail-header.component';\nimport { DataDetailSimpleAttributesComponent } from './data-detail-simple-attributes/data-detail-simple-attributes.component';\nimport { GenericArrayHeaderComponent } from './generic-array-header/generic-array-header.component';\nimport { LoadingSpinnerComponent } from './loading-spinner/loading-spinner.component';\nimport { NotFound404Component } from './not-found-404/not-found-404.component';\n\n@NgModule({\n  imports: [SharedModule],\n  declarations: [\n    DataDetailHeaderComponent,\n    DataDetailSimpleAttributesComponent,\n    GenericArrayHeaderComponent,\n    LoadingSpinnerComponent,\n    NotFound404Component,\n  ],\n  exports: [\n    DataDetailHeaderComponent,\n    DataDetailSimpleAttributesComponent,\n    GenericArrayHeaderComponent,\n    LoadingSpinnerComponent,\n    NotFound404Component,\n  ],\n})\nexport class UiModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './data-detail-header/data-detail-header.component';\nexport * from './data-detail-simple-attributes/data-detail-simple-attributes.component';\nexport * from './generic-array-header/generic-array-header.component';\nexport * from './loading-spinner/loading-spinner.component';\nexport * from './not-found-404/not-found-404.component';\nexport * from './ui.module';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './public-api';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '../shared';\nimport { UiModule } from '../ui';\nimport { AddEditGenericFormDialogComponent } from './add-edit-generic-form-dialog/add-edit-generic-form-dialog.component';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nimport { DataDetailArrayAttributesComponent } from './data-detail-array-attributes/data-detail-array-attributes.component';\nimport { DataDetailEditButtonComponent } from './data-detail-edit-button/data-detail-edit-button.component';\nimport { EllipsisMenuComponent } from './ellipsis-menu/ellipsis-menu.component';\nimport { GenericArrayComponent } from './generic-array/generic-array.component';\nimport { GenericDataHeaderComponent } from './generic-data-header/generic-data-header.component';\nimport { GenericFormComponent } from './generic-form/generic-form.component';\nimport { GenericListComponent } from './generic-list/generic-list.component';\nimport { GenericTreeComponent } from './generic-tree/generic-tree.component';\nimport { SearchBarComponent } from './search-bar/search-bar.component';\n\n@NgModule({\n  imports: [SharedModule, UiModule],\n  declarations: [\n    AddEditGenericFormDialogComponent,\n    AdvancedSearchComponent,\n    ConfirmDialogComponent,\n    DataDetailArrayAttributesComponent,\n    DataDetailEditButtonComponent,\n    EllipsisMenuComponent,\n    GenericArrayComponent,\n    GenericDataHeaderComponent,\n    GenericFormComponent,\n    GenericListComponent,\n    GenericTreeComponent,\n    SearchBarComponent,\n  ],\n  exports: [\n    AddEditGenericFormDialogComponent,\n    AdvancedSearchComponent,\n    ConfirmDialogComponent,\n    DataDetailArrayAttributesComponent,\n    DataDetailEditButtonComponent,\n    EllipsisMenuComponent,\n    GenericArrayComponent,\n    GenericDataHeaderComponent,\n    GenericFormComponent,\n    GenericListComponent,\n    GenericTreeComponent,\n    SearchBarComponent,\n  ],\n})\nexport class FeatureModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './add-edit-generic-form-dialog/add-edit-generic-form-dialog.component';\nexport * from './advanced-search/advanced-search.component';\nexport * from './confirm-dialog/confirm-dialog.component';\nexport * from './data-detail-array-attributes/data-detail-array-attributes.component';\nexport * from './data-detail-edit-button/data-detail-edit-button.component';\nexport * from './ellipsis-menu/ellipsis-menu.component';\nexport * from './generic-array/generic-array.component';\nexport * from './generic-data-header/generic-data-header.component';\nexport * from './generic-form/generic-form.component';\nexport * from './generic-tree/generic-tree.component';\nexport * from './generic-list/generic-list.component';\nexport * from './search-bar/search-bar.component';\nexport * from './feature.module';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './public-api';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { FeatureModule } from '../../../../../../feature';\nimport { SharedModule } from '../../../../../../shared';\nimport { UiModule } from '../../../../../../ui';\nimport { DataDetailComponent } from './data-detail.component';\n\n@NgModule({\n  declarations: [DataDetailComponent],\n  imports: [SharedModule, FeatureModule, UiModule],\n})\nexport class DataDetailModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatButton } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Select, Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable, catchError, delay, forkJoin, tap } from 'rxjs';\nimport {\n  AddEditGenericFormDialogComponent,\n  AdvancedSearchComponent,\n  ConfirmDialogComponent,\n} from '../../../../../../feature';\nimport {\n  DataService,\n  DataState,\n  DataViewProperties,\n  EUIComponent,\n  ErrorsHandlerService,\n  IActions,\n  IAdvancedSearchChip,\n  IArrayGenericAccessibility,\n  IAttribute,\n  IConfig,\n  IData,\n  IDataSourceRow,\n  IEntryIds,\n  IFormData,\n  IResourceTypeProperties,\n  IScimProperties,\n  IUiEntryIds,\n  InteractionsService,\n  JsTable,\n  ResourcesTypesState,\n  UiState,\n  canDeleteEntries,\n  fadeIn,\n  getClickableCellsEndpoints,\n  getDataSourceForGenericArray,\n  getDisplayedAttributeValue,\n  getFlatResource,\n  getSucceededNotifications,\n} from '../../../../../../shared';\nimport { getViewProperties } from '../../../../shared/helpers/data-table.helper';\nimport { toScimProperties } from '../../../../shared/helpers/resources.helper';\nimport { isMatchingSearch } from '../../../../shared/helpers/search.helper';\n\n@Component({\n  selector: 'dm-array-data',\n  templateUrl: './array-data.component.html',\n  styleUrls: ['./array-data.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class ArrayDataComponent implements OnInit {\n  @Select(DataState.getAdvancedSearchChips)\n  advancedSearchChips$: Observable<IAdvancedSearchChip[]>;\n\n  @Select(DataState.getSearchFormValue)\n  searchFormValue$: Observable<string>;\n\n  @Select(DataState.isFetchingResources)\n  isFetchingResources$: Observable<boolean>;\n\n  @Select(DataState.isAdvancedSearchActivated)\n  isAdvancedSearchActivated$: Observable<boolean>;\n\n  @Select(UiState.getArrayAccessibility)\n  arrayAccessibility$: Observable<IArrayGenericAccessibility>;\n\n  @Input() additionalBtns: TemplateRef<any>;\n\n  @Input() configs: JsTable<IConfig>;\n\n  @Input() set selectedResourceTypeId(selectedResourceTypeId: string) {\n    this._selectedResourceTypeId = selectedResourceTypeId;\n    this._isArrayInit = false;\n    this.arrayReady = false;\n  }\n\n  get selectedResourceTypeId() {\n    return this._selectedResourceTypeId;\n  }\n\n  get resourcesTypesProperties(): JsTable<IResourceTypeProperties> {\n    return this._resourcesTypesProperties;\n  }\n\n  @Input() set resourcesTypesProperties(\n    resourcesTypesProperties: JsTable<IResourceTypeProperties>\n  ) {\n    if (\n      resourcesTypesProperties &&\n      !!resourcesTypesProperties.byId[this.selectedResourceTypeId]\n    ) {\n      this._resourcesTypesProperties = resourcesTypesProperties;\n      const resourceTypePropertiesById =\n        resourcesTypesProperties.byId[this.selectedResourceTypeId];\n      this.endpoint = resourceTypePropertiesById.endpoint;\n      this.resourceCreateForm = resourceTypePropertiesById.createForm;\n      this.scimProperties = toScimProperties(resourceTypePropertiesById.schema);\n      this.actions = resourceTypePropertiesById.actions;\n    }\n  }\n\n  private _clickableCellsEndpoints: JsTable<string>;\n\n  get dataArray(): IData {\n    return this._dataArray;\n  }\n\n  @Input()\n  set dataArray(dataArray: IData) {\n    if (!!dataArray) {\n      this._dataArray = dataArray;\n      if (!this._isArrayInit) {\n        this._setDisplayProperties();\n        this._isArrayInit = true;\n      }\n      this._setArrayData(this._dataArray);\n      this.arrayReady = true;\n    }\n  }\n\n  @Input() isProcessingRequest: boolean;\n\n  @Input() isLargeScreen: boolean;\n\n  @Output() addNewResource = new EventEmitter<any>();\n  @Output() evtResetDataArray = new EventEmitter<string[]>();\n\n  private _dataArray: IData;\n\n  private _resourcesTypesProperties: JsTable<IResourceTypeProperties>;\n\n  private _deletedSourceFailed: { id: string; externalId: string }[] = [];\n\n  private _selectedResourceTypeId: string;\n\n  private _isArrayInit = false;\n\n  public searchForm: FormGroup;\n\n  public resourceTypeConfig: IConfig;\n\n  public initialSource: any = [];\n  public deletedSource: IUiEntryIds[] = [];\n\n  public dataName: string;\n  public dataIcon: string;\n\n  public selectedElementsUiIds: IUiEntryIds[];\n\n  public processingRequest$: Observable<boolean>;\n\n  public arrayReady: boolean;\n\n  public dataViewProperties: DataViewProperties;\n\n  public clickOnAdd = false;\n\n  public displayEllipsisFromTableRow = false;\n\n  public attributes: IAttribute[];\n\n  public canCreate: boolean;\n\n  public canDelete: boolean;\n\n  public endpoint: string;\n\n  public resourceCreateForm: IFormData[];\n\n  public scimProperties: IScimProperties;\n\n  public actions: IActions;\n\n  public uiComponent: EUIComponent = EUIComponent.ARRAY_DATA;\n\n  @ViewChild('divTableHeader') divTableHeader: ElementRef;\n  @ViewChild('createBtn', { static: false }) createBtn: MatButton;\n  @ViewChild('advancedSearchComponent')\n  advancedSearchComp: AdvancedSearchComponent;\n\n  constructor(\n    private _dataService: DataService,\n    private _errorsHandlerService: ErrorsHandlerService,\n    private _toastrService: ToastrService,\n    private _interactionsService: InteractionsService,\n    private _dialog: MatDialog,\n    private _el: ElementRef,\n    private _store$: Store\n  ) {}\n\n  ngOnInit(): void {\n    this._clickableCellsEndpoints = getClickableCellsEndpoints(\n      this._store$.selectSnapshot(ResourcesTypesState.getResourcesTypesJsTable),\n      this.configs.allIds,\n      this.configs.byId[this.selectedResourceTypeId]\n    );\n  }\n\n  selectedData(allSelectedData: (IUiEntryIds | IDataSourceRow)[]): void {\n    this.selectedElementsUiIds = allSelectedData.map(\n      (data: IEntryIds | IDataSourceRow) =>\n        (data as IDataSourceRow)?.selectionIds ?? (data as IUiEntryIds)\n    );\n  }\n\n  deleteData(\n    allRemovedData: IUiEntryIds[],\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): void {\n    this.deletedSource = [];\n    this._deletedSourceFailed = [];\n    this._interactionsService.isProcessingRequest(true);\n    forkJoin(\n      allRemovedData.map((removedData: IUiEntryIds) =>\n        this._dataService.removeData(this.endpoint, removedData.id).pipe(\n          tap((_) => {\n            this.deletedSource.push(removedData);\n            dialogRef?.close();\n          }),\n          catchError((err) => {\n            if (err.status === 404) {\n              this._deletedSourceFailed.push(removedData);\n              dialogRef?.close();\n            }\n            return this._errorsHandlerService.handleError(err);\n          })\n        )\n      )\n    )\n      .pipe(\n        tap((_) => {\n          this.updateArrayAfterDelete();\n          this._interactionsService.isProcessingRequest(false);\n        })\n      )\n      .subscribe();\n  }\n\n  private _updateDataSource(dataResourcesAsFlatArray: any[]) {\n    this.dataViewProperties = new DataViewProperties(\n      getViewProperties(this.configs.byId[this.selectedResourceTypeId])\n    );\n    this.dataViewProperties.setDataSource(\n      new MatTableDataSource(dataResourcesAsFlatArray)\n    );\n  }\n\n  updateArrayAfterDelete(): void {\n    const deletedSourcesIds: string[] = this.deletedSource.map(\n      (deletedElement: IUiEntryIds) => deletedElement.id\n    );\n\n    const deletedSourceIdsFailed404 = this._deletedSourceFailed.map(\n      (failedElement: IUiEntryIds) => failedElement.id\n    );\n\n    this.selectedElementsUiIds = this.selectedElementsUiIds.filter(\n      (elementUiIds: IUiEntryIds) =>\n        !deletedSourcesIds.includes(elementUiIds.id) &&\n        !deletedSourceIdsFailed404.includes(elementUiIds.id)\n    );\n\n    this.initialSource = this.initialSource.filter(\n      (elt: any) =>\n        !deletedSourcesIds.includes(elt.id) &&\n        !deletedSourceIdsFailed404.includes(elt.id)\n    );\n\n    const updatedDataSource: any[] = this.dataViewProperties\n      .getDataSource()\n      .data.filter(\n        (elt: any) =>\n          !deletedSourcesIds.includes(elt.id) &&\n          !deletedSourceIdsFailed404.includes(elt.id)\n      );\n\n    this._updateDataSource(updatedDataSource);\n\n    if (this.deletedSource.length > 0) {\n      const message: string = getSucceededNotifications(\n        this.deletedSource,\n        this.deletedSource.length > 1\n          ? this.actions.primitives.multipleDelete\n          : this.actions.primitives.singleDelete\n      );\n\n      this._toastrService.success(message, null, {\n        positionClass: 'toast-bottom-right',\n      });\n    }\n  }\n\n  updateArrayAfterAdd(newData: any): void {\n    if (this._store$.selectSnapshot(DataState.isFetchingResourcesSuccess)) {\n      const flattenData: any = getFlatResource(\n        newData,\n        this.resourceTypeConfig\n      );\n      const displayedData: any = getDisplayedAttributeValue(\n        flattenData,\n        Object.keys(flattenData),\n        this.resourceTypeConfig,\n        this._clickableCellsEndpoints\n      );\n      if (\n        isMatchingSearch(\n          this.advancedSearchComp.searchForm.get('search').value,\n          this.advancedSearchComp.advancedSearchChips,\n          this.dataViewProperties.getDisplayedColumns(),\n          flattenData\n        )\n      ) {\n        const updatedSource: any[] = [\n          ...this.dataViewProperties.getDataSource().data,\n          displayedData,\n        ];\n        this._updateDataSource(updatedSource);\n      }\n      this.initialSource.push(displayedData);\n    }\n\n    const succeededElementExternalId: string = newData.externalId;\n    const succeededElement: IUiEntryIds[] = [\n      {\n        id: newData.id,\n        externalId: succeededElementExternalId,\n        label: succeededElementExternalId,\n      },\n    ];\n\n    const message: string = getSucceededNotifications(\n      succeededElement,\n      this.actions.primitives.add\n    );\n\n    this._toastrService.success(message, null, {\n      positionClass: 'toast-bottom-right',\n    });\n  }\n\n  openAddNewEntryDialog(\n    title: string,\n    formData: IFormData[],\n    endpoint: string,\n    scimProperties: IScimProperties,\n    crudAction: string\n  ): void {\n    const dialogRef = this._dialog.open(AddEditGenericFormDialogComponent, {\n      minWidth: '40%',\n      restoreFocus: false,\n      data: {\n        title,\n        formData,\n        endpoint,\n        scimProperties,\n        crudAction,\n      },\n    });\n    dialogRef\n      .afterClosed()\n      .pipe(\n        tap((_) => (this.clickOnAdd = false)),\n        delay(0),\n        tap((_) => this.createBtn.focus())\n      )\n      .subscribe();\n\n    dialogRef.componentInstance.addSucceeded\n      .pipe(\n        tap((data) => {\n          this.updateArrayAfterAdd(data);\n        })\n      )\n      .subscribe();\n  }\n\n  addNewEntry(): void {\n    const action = 'create';\n    this.clickOnAdd = true;\n\n    this.openAddNewEntryDialog(\n      this.actions.primitives.add.title,\n      this.resourceCreateForm,\n      this.endpoint,\n      this.scimProperties,\n      action\n    );\n  }\n\n  getMaxHeight(): number {\n    let maxHeight: number = this._el.nativeElement.offsetHeight;\n    if (!!this.divTableHeader) {\n      maxHeight -= this.divTableHeader.nativeElement.offsetHeight;\n    }\n    if (!!this.advancedSearchComp && this.advancedSearchComp.elementRef) {\n      maxHeight -=\n        this.advancedSearchComp.elementRef.nativeElement.offsetHeight;\n    }\n    return maxHeight;\n  }\n\n  private _setDisplayProperties(): void {\n    this.dataIcon = this.configs.byId[this.selectedResourceTypeId].icon;\n    this.dataName = this.configs.byId[this.selectedResourceTypeId].label;\n    this.canCreate = this.configs.byId[this.selectedResourceTypeId].canCreate;\n    this.resourceTypeConfig = this.configs.byId[this.selectedResourceTypeId];\n    if (this.searchForm) {\n      this.searchForm.reset();\n    }\n  }\n\n  private _setArrayData(dataArray: IData): void {\n    this.dataViewProperties = new DataViewProperties(\n      getViewProperties(this.configs.byId[this.selectedResourceTypeId])\n    );\n    this.selectedElementsUiIds = [];\n    this.deletedSource = [];\n    this.canDelete = canDeleteEntries(\n      this.actions.primitives,\n      dataArray.Resources.some((data: any) => data.meta?.isDeletable)\n    );\n\n    this.attributes = this.configs.byId[this.selectedResourceTypeId].attributes;\n    const dataResourcesAsFlatArray: any[] = getDataSourceForGenericArray(\n      dataArray,\n      this.resourceTypeConfig,\n      this._clickableCellsEndpoints\n    );\n    this.initialSource = dataResourcesAsFlatArray;\n    this.dataViewProperties.setDataSource(\n      new MatTableDataSource(dataResourcesAsFlatArray)\n    );\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<ng-container *ngIf=\"arrayReady; else loadingArray\">\n  <div class=\"div-form-search\">\n    <div fxFlex fxFlex.gt-md=\"45%\">\n      <dm-advanced-search\n        #advancedSearchComponent\n        [@fadeIn]=\"arrayReady\"\n        [resourceTypeConfig]=\"resourceTypeConfig\"\n        [isLargeScreen]=\"isLargeScreen\"\n        [searchFormValue]=\"searchFormValue$ | async\"\n        [selectedResourceRootTypeId]=\"selectedResourceTypeId\"\n        [advancedSearchChips]=\"advancedSearchChips$ | async\"\n      ></dm-advanced-search>\n    </div>\n  </div>\n\n  <div\n    fxLayout=\"row\"\n    fxLayoutAlign=\"start center\"\n    class=\"div-table-title\"\n    #divTableHeader\n  >\n    <dm-generic-array-header\n      [dataLength]=\"dataViewProperties.getDataSource().data.length\"\n      [dataIcon]=\"dataIcon\"\n      [dataName]=\"dataName\"\n    ></dm-generic-array-header>\n    <dm-ellipsis-menu\n      *ngIf=\"dataViewProperties?.getDataSource()?.filteredData?.length > 0\"\n      [dataViewProperties]=\"dataViewProperties\"\n      [selectedElementsUiIds]=\"selectedElementsUiIds\"\n      [uiComponent]=\"uiComponent\"\n      [options]=\"{ canDelete }\"\n      [isProcessingRequest]=\"isProcessingRequest\"\n      [actions]=\"actions.primitives\"\n      (evtDeleteSelectedElements)=\"deleteData($event.entries, $event.dialogRef)\"\n      (evtDeleteSelectedElement)=\"deleteData([$event.entry], $event.dialogRef)\"\n    ></dm-ellipsis-menu>\n\n    <button\n      *ngIf=\"canCreate\"\n      #createBtn=\"matButton\"\n      mat-raised-button\n      color=\"accent\"\n      [disabled]=\"clickOnAdd\"\n      (click)=\"addNewEntry()\"\n      class=\"btn-create-new-entry\"\n    >\n      {{ actions.primitives.add.btnLabel }}\n    </button>\n    <ng-container *ngTemplateOutlet=\"additionalBtns\"></ng-container>\n    <ng-container *ngIf=\"arrayAccessibility$ | async as arrayAccessibility\">\n      <span\n        *ngIf=\"selectedElementsUiIds?.length > 0\"\n        class=\"span-selected-elements\"\n      >\n        {{\n          selectedElementsUiIds?.length > 1\n            ? arrayAccessibility.multipleSelection\n            : arrayAccessibility.singleSelection\n        }}{{ selectedElementsUiIds.length }}\n      </span>\n    </ng-container>\n  </div>\n  <ng-container *ngIf=\"!(isFetchingResources$ | async); else loadingArray\">\n    <div class=\"div-generic-array\">\n      <dm-generic-array\n        *ngIf=\"\n          dataViewProperties?.getDataSource()?.data?.length > 0;\n          else emptyArray\n        \"\n        [@fadeIn]=\"dataViewProperties.getDataSource().data.length\"\n        [actionsColumnTemplate]=\"actionsColumn\"\n        [isClickableRow]=\"dataViewProperties.getIsClickableRow()\"\n        [resourcesTypesProperties]=\"resourcesTypesProperties\"\n        [endpoint]=\"endpoint\"\n        [configs]=\"configs\"\n        [accessibility]=\"dataViewProperties.getAccessibility()\"\n        [selectedElementsUiIds]=\"selectedElementsUiIds\"\n        [initialDisplayedColumns]=\"dataViewProperties.getDisplayedColumns()\"\n        [columns]=\"dataViewProperties.getColumns()\"\n        [processingRequest$]=\"processingRequest$\"\n        [actions]=\"actions.primitives\"\n        [dataSource]=\"dataViewProperties.getDataSource()\"\n        [selectedResourceRootTypeId]=\"selectedResourceTypeId\"\n        (selectedData)=\"selectedData($event)\"\n      ></dm-generic-array>\n      <ng-template #actionsColumn let-row=\"row\">\n        <dm-ellipsis-menu\n          *ngIf=\"row.isRowEditable\"\n          [uiComponent]=\"uiComponent\"\n          [options]=\"{\n            canDelete: row.canDeleteEntry,\n            isForRow: true\n          }\"\n          [selectedElementsUiIds]=\"[row.selectionIds]\"\n          [selectedRow]=\"row\"\n          [isProcessingRequest]=\"isProcessingRequest\"\n          [actions]=\"actions.primitives\"\n          (click)=\"$event.stopPropagation()\"\n          (evtDeleteSelectedElement)=\"\n            deleteData([$event.entry], $event.dialogRef)\n          \"\n        ></dm-ellipsis-menu>\n      </ng-template>\n      <ng-template #emptyArray>\n        <div fxLayoutAlign=\"center start\">\n          <span class=\"placeholder-text\">\n            {{\n              (isAdvancedSearchActivated$ | async)\n                ? actions.primitives.search.advancedSearch.noResult\n                : dataViewProperties.getAccessibility().emptyArrayPlaceholder\n            }}\n          </span>\n        </div>\n      </ng-template>\n    </div>\n  </ng-container>\n</ng-container>\n<ng-template #loadingArray\n  ><dm-loading-spinner></dm-loading-spinner>\n</ng-template>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport {\n  Observable,\n  Subject,\n  catchError,\n  filter,\n  takeUntil,\n  tap,\n  withLatestFrom,\n} from 'rxjs';\nimport {\n  AddEditGenericFormDialogComponent,\n  ConfirmDialogComponent,\n  GenericDataHeaderComponent,\n  GenericListComponent,\n} from '../../../../../../feature';\nimport {\n  ConfigsState,\n  Data,\n  DataService,\n  DataState,\n  EUIComponent,\n  EUserAction,\n  Error,\n  ErrorState,\n  ErrorsHandlerService,\n  HeaderState,\n  IActions,\n  IAddActionOnList,\n  IConfig,\n  IDataItem,\n  IDeleteActionOnList,\n  IErrorDetail,\n  IFormData,\n  IPersistentUiData,\n  IResourceTypeProperties,\n  IScimProperties,\n  ITabProps,\n  IUiEntryIds,\n  InteractionsService,\n  JsTable,\n  fadeIn,\n  setTabTitle,\n} from '../../../../../../shared';\nimport { displayedSuccessNotification } from '../../../../shared/helpers/configs.helper';\nimport {\n  DataListViewProperties,\n  buildItemList,\n  getDataListAfterAdd,\n  getDataListAfterDeletion,\n  updateItem,\n} from '../../../../shared/helpers/data-list.helper';\nimport { toScimProperties } from '../../../../shared/helpers/resources.helper';\n\n@Component({\n  selector: 'dm-list-data',\n  templateUrl: './list-data.component.html',\n  styleUrls: ['./list-data.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class ListDataComponent implements OnInit, OnDestroy {\n  @ViewChild('genericList') genericList: GenericListComponent;\n  @ViewChild('genericDataHeader') genericDataHeader: GenericDataHeaderComponent;\n\n  @Select(DataState.getSelectedEntryId)\n  selectedEntryId$: Observable<string>;\n\n  @Select(ErrorState.getIsHandlingError) isHandlingError$: Observable<boolean>;\n\n  @Select(ErrorState.getErrorDetail) errorDetail$: Observable<IErrorDetail>;\n\n  @Select(DataState.getDataJsTable)\n  dataJsTable$: Observable<JsTable<IPersistentUiData>>;\n\n  @Select(ConfigsState.getConfigsJsTable) configsJsTable$: Observable<\n    JsTable<IConfig>\n  >;\n\n  @Input()\n  set dataList(dataList: IDataItem[]) {\n    if (dataList) {\n      this.listReady = false;\n      this.dataListViewProperties = new DataListViewProperties();\n      this.dataListViewProperties.setDataSource(dataList);\n      this.listReady = true;\n      this._interactionsService.displayDataList(dataList);\n    }\n  }\n\n  @Input() isLargeScreen: boolean;\n\n  @Input() set selectedResourceRootTypeId(selectedResourceRootTypeId: string) {\n    this._selectedResourceRootTypeId = selectedResourceRootTypeId;\n    this.dataListViewProperties = null;\n    this.listReady = false;\n    this.search = this.dataJsTable.byId[selectedResourceRootTypeId]\n      ? this.dataJsTable.byId[selectedResourceRootTypeId].filterValue\n      : '';\n  }\n\n  get selectedResourceRootTypeId(): string {\n    return this._selectedResourceRootTypeId;\n  }\n\n  get resourcesTypesProperties(): JsTable<IResourceTypeProperties> {\n    return this._resourcesTypesProperties;\n  }\n\n  @Input() set resourcesTypesProperties(\n    resourcesTypesProperties: JsTable<IResourceTypeProperties>\n  ) {\n    if (resourcesTypesProperties) {\n      this._resourcesTypesProperties = resourcesTypesProperties;\n      this.endpoint =\n        resourcesTypesProperties.byId[\n          this._selectedResourceRootTypeId\n        ].endpoint;\n      this.resourceCreateForm =\n        resourcesTypesProperties.byId[\n          this._selectedResourceRootTypeId\n        ].createForm;\n      this.scimProperties = toScimProperties(\n        resourcesTypesProperties.byId[this._selectedResourceRootTypeId].schema\n      );\n      this.canCreate =\n        resourcesTypesProperties.byId[\n          this._selectedResourceRootTypeId\n        ].canCreate;\n      this.actions =\n        resourcesTypesProperties.byId[this._selectedResourceRootTypeId].actions;\n    }\n  }\n\n  @Input() isProcessingRequest: boolean;\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _resourcesTypesProperties: JsTable<IResourceTypeProperties>;\n\n  private _selectedResourceRootTypeId: string;\n\n  public listReady: boolean;\n\n  public dataListViewProperties: DataListViewProperties;\n\n  public endpoint: string;\n\n  public resourceCreateForm: IFormData[];\n\n  public scimProperties: IScimProperties;\n\n  public actions: IActions;\n\n  public canCreate: boolean;\n\n  public dataJsTable: JsTable<IPersistentUiData>;\n\n  public search: string;\n\n  public uiComponent: EUIComponent = EUIComponent.LIST_DATA;\n\n  private _tab: ITabProps;\n\n  constructor(\n    private _dataService: DataService,\n    private _errorsHandlerService: ErrorsHandlerService,\n    private _interactionsService: InteractionsService,\n    private _dialog: MatDialog,\n    private _router: Router,\n    private _store$: Store,\n    public toastrService: ToastrService,\n    private _titleService: Title\n  ) {\n    this.dataJsTable$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((dataJsTable: JsTable<IPersistentUiData>) => {\n          this.dataJsTable = dataJsTable;\n          this.search = this.selectedResourceRootTypeId\n            ? dataJsTable.byId[this.selectedResourceRootTypeId].filterValue\n            : '';\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnInit(): void {\n    this._tab = this._store$.selectSnapshot(HeaderState.getTabProps);\n\n    this._interactionsService.updateListItemName$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.selectedEntryId$),\n        tap(([newItemName, selectedEntryId]) => {\n          updateItem(\n            selectedEntryId,\n            this.dataListViewProperties.getDataSource(),\n            newItemName\n          );\n        })\n      )\n      .subscribe();\n\n    this.isHandlingError$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.errorDetail$),\n        filter(([isHandlingError, errorDetail]) => {\n          const is404Error: boolean =\n            !!errorDetail &&\n            errorDetail.handledError instanceof HttpErrorResponse &&\n            errorDetail.handledError.status === 404;\n          return (\n            isHandlingError &&\n            is404Error &&\n            (errorDetail.userActionOnError === EUserAction.LIST_GET ||\n              errorDetail.userActionOnError === EUserAction.LIST_UPDATE)\n          );\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  openAddNewResourceDialog(\n    title: string,\n    formData: IFormData[],\n    endpoint: string,\n    scimProperties: IScimProperties,\n    crudAction: string\n  ): void {\n    const dialogRef = this._dialog.open(AddEditGenericFormDialogComponent, {\n      minWidth: '40%',\n      restoreFocus: false,\n      data: {\n        title,\n        formData,\n        endpoint,\n        scimProperties,\n        crudAction,\n        entryId: null,\n      },\n    });\n\n    dialogRef\n      .afterClosed()\n      .pipe(\n        tap((_) => {\n          this.genericDataHeader.createMiniFabBtn._elementRef.nativeElement.classList.contains(\n            'hide-btn'\n          )\n            ? this.genericDataHeader.createLargeBtn.focus()\n            : this.genericDataHeader.createMiniFabBtn.focus();\n        })\n      )\n      .subscribe();\n\n    dialogRef.componentInstance.addSucceeded\n      .pipe(\n        tap((data) => {\n          if (data) {\n            const addedItem: IDataItem = this._updateListDataAfterAdd(data);\n            const succeededAddedElement: IUiEntryIds = {\n              ...addedItem.ids,\n              label: addedItem.name,\n            };\n            const action: IAddActionOnList = {\n              actionType: EUserAction.LIST_ADD,\n            };\n            this._redirectOnAdd(addedItem);\n            displayedSuccessNotification(\n              this.toastrService,\n              this.actions,\n              action,\n              [succeededAddedElement]\n            );\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  onAddNewResource() {\n    this.openAddNewResourceDialog(\n      this.actions?.primitives?.add?.title,\n      this.resourceCreateForm,\n      this.endpoint,\n      this.scimProperties,\n      'create'\n    );\n  }\n\n  onDeleteResource(\n    entry: IUiEntryIds,\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>\n  ): void {\n    this._interactionsService.isProcessingRequest(true);\n    this._dataService\n      .removeData(this.endpoint, entry.id)\n      .pipe(\n        withLatestFrom(this.selectedEntryId$, this.configsJsTable$),\n        tap(([_, selectedEntryId, configs]) => {\n          this._interactionsService.isProcessingRequest(false);\n          this.dataListViewProperties.setDataSource(\n            getDataListAfterDeletion(\n              this.dataListViewProperties.getDataSource(),\n              entry.id\n            )\n          );\n          const action: IDeleteActionOnList = {\n            actionType: EUserAction.LIST_DELETE,\n          };\n          displayedSuccessNotification(\n            this.toastrService,\n            this.actions,\n            action,\n            [entry]\n          );\n          if (selectedEntryId === entry.id) {\n            this._redirectToResourceRootTypeId();\n          }\n          setTabTitle(\n            this._tab,\n            this._titleService,\n            null,\n            configs.byId[this.selectedResourceRootTypeId]\n          );\n\n          dialogRef?.close();\n        }),\n        catchError((err) => {\n          this._interactionsService.isProcessingRequest(false);\n\n          this._store$.dispatch([\n            new Error.SetErrorDetail({\n              error: err,\n              userActionOnError: EUserAction.LIST_DELETE,\n            }),\n            new Error.IsHandlingError(true),\n          ]);\n\n          if (err instanceof HttpErrorResponse && err.status === 404) {\n            this.dataListViewProperties.setDataSource(\n              getDataListAfterDeletion(\n                this.dataListViewProperties.getDataSource(),\n                entry.id\n              )\n            );\n\n            dialogRef?.close();\n          }\n\n          return this._errorsHandlerService.handleError(err);\n        })\n      )\n      .subscribe();\n  }\n\n  private _updateListDataAfterAdd(newData: any): IDataItem {\n    const itemToAdd: IDataItem = buildItemList(newData);\n    this.dataListViewProperties.setDataSource(\n      getDataListAfterAdd(\n        this.dataListViewProperties.getDataSource(),\n        itemToAdd\n      )\n    );\n    return itemToAdd;\n  }\n\n  private _redirectOnAdd(addedItem: IDataItem): void {\n    this._store$.dispatch(\n      new Data.SetSelectedEntryIds({\n        ids: addedItem.ids,\n      })\n    );\n    const itemLink: string = '/home/' + this.endpoint + '/' + addedItem.link;\n    this._router.navigate([itemLink]);\n  }\n\n  private _redirectToResourceRootTypeId(): void {\n    const rootLink: string = '/home/' + this.endpoint;\n    this._store$.dispatch(new Data.ResetSelectedEntryIds());\n    this._router.navigate([rootLink]);\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<mat-drawer\n  fxLayout=\"column\"\n  position=\"start\"\n  mode=\"side\"\n  opened\n  [disableClose]=\"true\"\n  [ngClass]=\"\n    isLargeScreen && listReady\n      ? 'sidenav-list-lg-screen'\n      : 'sidenav-list-sm-screen'\n  \"\n  class=\"sidenav-list\"\n>\n  <div\n    *ngIf=\"\n      genericList?.ulGenericList?.nativeElement?.offsetHeight > 0 ||\n        dataListViewProperties?.getDataSource()?.length === 0;\n      else loadinglist\n    \"\n    fxLayout=\"column\"\n    @fadeIn\n  >\n    <dm-generic-data-header\n      #genericDataHeader\n      [style.visibility]=\"listReady ? 'visible' : 'hidden'\"\n      [dataJsTable]=\"dataJsTable\"\n      [canCreate]=\"canCreate\"\n      [addBtnLabel]=\"actions.primitives.add.btnLabel\"\n      [selectedResourceRootTypeId]=\"selectedResourceRootTypeId\"\n      [offsetWidth]=\"genericList?.divMatList?.nativeElement?.offsetWidth\"\n      (clickOnAddResourceBtn)=\"onAddNewResource()\"\n    ></dm-generic-data-header>\n  </div>\n  <ng-template #loadinglist>\n    <dm-loading-spinner></dm-loading-spinner>\n  </ng-template>\n\n  <dm-generic-list\n    fxFlex\n    *ngIf=\"listReady\"\n    #genericList\n    [actionsMenuTemplate]=\"actionsMenu\"\n    [search]=\"search\"\n    [selectedItemId]=\"selectedEntryId$ | async\"\n    [initialDataList]=\"dataListViewProperties.getDataSource()\"\n    [isLargeScreen]=\"isLargeScreen\"\n    @fadeIn\n  ></dm-generic-list>\n  <ng-template #actionsMenu let-data=\"data\">\n    <dm-ellipsis-menu\n      *ngIf=\"data?.canDelete\"\n      [selectedElementsUiIds]=\"[\n        {\n          id: data.ids.id,\n          externalId: data.ids.externalId,\n          label: data.name\n        }\n      ]\"\n      [uiComponent]=\"uiComponent\"\n      [item]=\"data\"\n      [isProcessingRequest]=\"isProcessingRequest\"\n      [actions]=\"actions.primitives\"\n      (evtDeleteSelectedElement)=\"\n        onDeleteResource($event.entry, $event.dialogRef)\n      \"\n    ></dm-ellipsis-menu>\n  </ng-template>\n</mat-drawer>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { trigger } from '@angular/animations';\nimport { Location } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport {\n  Component,\n  ElementRef,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n} from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { ToastrService } from 'ngx-toastr';\nimport {\n  Observable,\n  ReplaySubject,\n  Subject,\n  catchError,\n  delay,\n  filter,\n  forkJoin,\n  take,\n  takeUntil,\n  tap,\n  withLatestFrom,\n} from 'rxjs';\nimport {\n  AddEditGenericFormDialogComponent,\n  AdvancedSearchComponent,\n  ConfirmDialogComponent,\n  GenericDataHeaderComponent,\n} from '../../../../../../feature';\nimport {\n  ActionsTypes,\n  Data,\n  DataService,\n  DataState,\n  EUIComponent,\n  EUserAction,\n  Error,\n  ErrorState,\n  ErrorsHandlerService,\n  HeaderState,\n  IActions,\n  IAddActionOnTree,\n  IAdvancedSearchChip,\n  IConfig,\n  IDataNode,\n  IDataNodeIdsFields,\n  IDeleteActionOnTree,\n  IErrorDetail,\n  IFormData,\n  IMoveNodeActionOnTree,\n  IPersistentUiData,\n  IResourceTypeProperties,\n  IRouteDetail,\n  IScimProperties,\n  ITabProps,\n  IUiEntryIds,\n  IUpdateActionOnTree,\n  InteractionsService,\n  JsTable,\n  Routing,\n  RoutingState,\n  addNodeInDataTree,\n  fadeIn,\n  getFlattenTree,\n  getFlattenTreeIds,\n  getNodeById,\n  setTabTitle,\n  updateNodeName,\n  updateSubTreelinks,\n} from '../../../../../../shared';\nimport { displayedSuccessNotification } from '../../../../shared/helpers/configs.helper';\nimport {\n  DataTreeViewProperties,\n  buildNodeTree,\n  deleteTreeNodes,\n  getNodesIdsNamesParentIds,\n  getParentNode,\n  getRemovedNodesSubTree,\n  updateLevelForPadding,\n  updateRoutingHistory,\n} from '../../../../shared/helpers/data-tree.helper';\nimport {\n  getFullUrl,\n  toScimProperties,\n} from '../../../../shared/helpers/resources.helper';\nimport { isMatchingSearch } from '../../../../shared/helpers/search.helper';\n\n@Component({\n  selector: 'dm-tree-data',\n  templateUrl: './tree-data.component.html',\n  styleUrls: ['./tree-data.component.scss'],\n  animations: [trigger('fadeIn', fadeIn(':enter'))],\n})\nexport class TreeDataComponent implements OnInit, OnDestroy {\n  @ViewChild('divHeader')\n  set divHeader(divHeader: ElementRef) {\n    this._divHeader = divHeader;\n    if (\n      divHeader?.nativeElement?.offsetHeight > 0 &&\n      this.treeViewportHeight == null\n    ) {\n      this._setTreeViewportHeight();\n    }\n  }\n\n  get divHeader(): ElementRef {\n    return this._divHeader;\n  }\n\n  @ViewChild('genericDataHeader') genericDataHeader: GenericDataHeaderComponent;\n\n  @ViewChild('advancedSearchComponent')\n  advancedSearchComp: AdvancedSearchComponent;\n\n  @Select(DataState.isFetchingResources)\n  isFetchingResources$: Observable<boolean>;\n\n  @Select(DataState.getSelectedEntryId)\n  selectedEntryId$: Observable<string>;\n\n  @Select(ErrorState.getIsHandlingError) isHandlingError$: Observable<boolean>;\n\n  @Select(ErrorState.getErrorDetail) errorDetail$: Observable<IErrorDetail>;\n\n  @Select(DataState.getDataJsTable)\n  dataJsTable$: Observable<JsTable<IPersistentUiData>>;\n\n  @Select(RoutingState.getRoutingHistory) routingHistory$: Observable<\n    IRouteDetail[]\n  >;\n\n  @Select(DataState.getAdvancedSearchChips)\n  advancedSearchChips$: Observable<IAdvancedSearchChip[]>;\n\n  @Select(DataState.getSearchFormValue)\n  searchFormValue$: Observable<string>;\n\n  @Select(DataState.isAdvancedSearchActivated)\n  isAdvancedSearchActivated$: Observable<boolean>;\n\n  @Select(DataState.getEntriesIdsMatchingAdvancedSearch)\n  entriesIdsMatchingAdvancedSearch$: Observable<{ [id: string]: true }>;\n\n  @Input()\n  set dataTree(dataTree: IDataNode[]) {\n    if (!!dataTree) {\n      this.treeReady = false;\n      if (!this._isTreeInit) {\n        this._setDisplayProperties();\n        this._isTreeInit = true;\n      }\n      this._setDisplayData(dataTree);\n      this.treeReady = true;\n      this._interactionsService.displayDataTree(dataTree);\n    }\n  }\n\n  @Input() isLargeScreen: boolean;\n\n  @Input() set selectedResourceRootTypeId(selectedResourceRootTypeId: string) {\n    this._isTreeInit = false;\n    this.genericDataHeaderWidth = 0;\n    this._selectedResourceRootTypeId = selectedResourceRootTypeId;\n    this.treeReady = false;\n    this.search = this.dataJsTable.byId[selectedResourceRootTypeId]\n      ? this.dataJsTable.byId[selectedResourceRootTypeId].filterValue\n      : '';\n    this.expandedTreeNodesUuids = this.dataJsTable.byId[\n      selectedResourceRootTypeId\n    ]\n      ? this.dataJsTable.byId[selectedResourceRootTypeId].expandedTreeNodesUuids\n      : [];\n  }\n\n  get selectedResourceRootTypeId(): string {\n    return this._selectedResourceRootTypeId;\n  }\n\n  get resourcesTypesProperties(): JsTable<IResourceTypeProperties> {\n    return this._resourcesTypesProperties;\n  }\n\n  @Input() set resourcesTypesProperties(\n    resourcesTypesProperties: JsTable<IResourceTypeProperties>\n  ) {\n    if (resourcesTypesProperties) {\n      this._resourcesTypesProperties = resourcesTypesProperties;\n\n      resourcesTypesProperties.allIds.forEach(\n        (resourceTypeId: string, index: number) => {\n          this.endpoint = Object.assign(index === 0 ? {} : this.endpoint, {\n            [resourceTypeId]:\n              resourcesTypesProperties.byId[resourceTypeId].endpoint,\n          });\n          this.resourceCreateForm = Object.assign(\n            index === 0 ? {} : this.resourceCreateForm,\n            {\n              [resourceTypeId]:\n                resourcesTypesProperties.byId[resourceTypeId].createForm,\n            }\n          );\n          this.scimProperties = Object.assign(\n            index === 0 ? {} : this.scimProperties,\n            {\n              [resourceTypeId]: toScimProperties(\n                resourcesTypesProperties.byId[resourceTypeId].schema\n              ),\n            }\n          );\n          this.canCreate = Object.assign(index === 0 ? {} : this.canCreate, {\n            [resourceTypeId]:\n              resourcesTypesProperties.byId[resourceTypeId].canCreate,\n          });\n          this.actions = Object.assign(index === 0 ? {} : this.actions, {\n            [resourceTypeId]:\n              resourcesTypesProperties.byId[resourceTypeId].actions,\n          });\n          this.nodeNameModelRef = Object.assign(\n            index === 0 ? {} : this.nodeNameModelRef,\n            {\n              [resourceTypeId]:\n                resourcesTypesProperties.byId[resourceTypeId].nodeNameModelRef,\n            }\n          );\n        }\n      );\n    }\n  }\n\n  @Input() isProcessingRequest: boolean;\n\n  @Input() configs: JsTable<IConfig>;\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _resourcesTypesProperties: JsTable<IResourceTypeProperties>;\n\n  private _selectedResourceRootTypeId: string;\n\n  private _tab: ITabProps;\n\n  private _isTreeInit = false;\n\n  private _divHeader: ElementRef;\n\n  public flattenDataTree: IDataNode[] = [];\n\n  public treeReady: boolean;\n\n  public dataTreeViewProperties: DataTreeViewProperties;\n\n  public resourceTypeConfig: IConfig;\n\n  public clickOnAdd = false;\n\n  public endpoint: { [id: string]: string };\n\n  public resourceCreateForm: { [resourceType: string]: IFormData[] };\n\n  public scimProperties: { [resourceType: string]: IScimProperties };\n\n  public actions: { [id: string]: IActions };\n\n  public canCreate: { [resourceTypeId: string]: boolean };\n\n  public refreshTree = new ReplaySubject<ActionsTypes>();\n\n  public allNodesIdsNames: IDataNodeIdsFields[] = [];\n\n  public dataJsTable: JsTable<IPersistentUiData>;\n\n  public search: string;\n\n  public expandedTreeNodesUuids: string[];\n\n  public DRAWER_MIN_WIDTH = 290;\n\n  public genericDataHeaderWidth: number;\n\n  public nodeNameModelRef: { [resourceType: string]: string };\n\n  public isHandling404Error = false;\n\n  public treeViewportHeight: number;\n\n  public uiComponent: EUIComponent = EUIComponent.TREE_DATA;\n\n  constructor(\n    private _dataService: DataService,\n    private _errorsHandlerService: ErrorsHandlerService,\n    private _interactionsService: InteractionsService,\n    private _dialog: MatDialog,\n    private _router: Router,\n    private _store$: Store,\n    private _location: Location,\n    private _titleService: Title,\n    public elementRef: ElementRef,\n    public toastrService: ToastrService\n  ) {\n    this.dataJsTable$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((dataJsTable: JsTable<IPersistentUiData>) => {\n          this.dataJsTable = dataJsTable;\n          this.search = this.selectedResourceRootTypeId\n            ? dataJsTable.byId[this.selectedResourceRootTypeId].filterValue\n            : '';\n          this.expandedTreeNodesUuids = this.selectedResourceRootTypeId\n            ? dataJsTable.byId[this.selectedResourceRootTypeId]\n                .expandedTreeNodesUuids\n            : [];\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnInit(): void {\n    this._tab = this._store$.selectSnapshot(HeaderState.getTabProps);\n\n    this._interactionsService.updateTreeNodeName$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.selectedEntryId$, this.searchFormValue$),\n        tap(([newNodeName, selectedEntryId, advancedSearchFormValue]) => {\n          const formattedNodeName: string = newNodeName\n            .getRidOfDiacritics()\n            .toLocaleUpperCase();\n\n          const formattedAdvSearchValue: string = advancedSearchFormValue\n            .getRidOfDiacritics()\n            .toLocaleUpperCase();\n\n          const formattedExternalId: string = getNodeById(\n            selectedEntryId,\n            this.dataTreeViewProperties.getDataSource()\n          )\n            .ids?.externalId.getRidOfDiacritics()\n            .toLocaleUpperCase();\n          if (\n            formattedNodeName.includes(formattedAdvSearchValue) ||\n            (formattedExternalId.includes(formattedAdvSearchValue) &&\n              this.configs.byId[this.selectedResourceRootTypeId].props\n                ?.filterOnExternalId)\n          ) {\n            this._store$.dispatch(\n              new Data.AddEntryIdMatchingAdvancedSearch({\n                entryId: selectedEntryId,\n              })\n            );\n          } else {\n            this._store$.dispatch(\n              new Data.RemoveEntriesIdsMatchingAdvancedSearch({\n                entriesIds: [selectedEntryId],\n              })\n            );\n          }\n          updateNodeName(\n            selectedEntryId,\n            this.dataTreeViewProperties.getDataSource(),\n            newNodeName\n          );\n          const action: IUpdateActionOnTree = {\n            actionType: EUserAction.TREE_UPDATE,\n            triggerNodeId: selectedEntryId,\n            newNodeName,\n          };\n          this._updateAllNodesIdsNames(action);\n          this.flattenDataTree = getFlattenTree(\n            this.dataTreeViewProperties.getDataSource()\n          );\n          this.refreshTree.next(action);\n        })\n      )\n      .subscribe();\n\n    this._interactionsService.updateExternalId$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(\n          this.selectedEntryId$,\n          this.routingHistory$,\n          this.searchFormValue$\n        ),\n        tap(\n          ([\n            newNodeExternalId,\n            selectedEntryId,\n            routingHistory,\n            advancedSearchFormValue,\n          ]) => {\n            const updatedUrl: string = this._router.url.replace(\n              /[^/]+$/g,\n              encodeURIComponent(newNodeExternalId.toLowerCase())\n            );\n            if (\n              this.configs.byId[this.selectedResourceRootTypeId].props\n                ?.filterOnExternalId\n            ) {\n              const formattedExternalId: string = newNodeExternalId\n                .getRidOfDiacritics()\n                .toLocaleUpperCase();\n\n              const formattedAdvSearchValue: string = advancedSearchFormValue\n                .getRidOfDiacritics()\n                .toLocaleUpperCase();\n\n              const formattedSelectedNodeName: string = getNodeById(\n                selectedEntryId,\n                this.dataTreeViewProperties.getDataSource()\n              )\n                .name.getRidOfDiacritics()\n                .toLocaleUpperCase();\n\n              if (\n                formattedExternalId.includes(formattedAdvSearchValue) ||\n                formattedSelectedNodeName.includes(formattedAdvSearchValue)\n              ) {\n                this._store$.dispatch(\n                  new Data.AddEntryIdMatchingAdvancedSearch({\n                    entryId: selectedEntryId,\n                  })\n                );\n              } else {\n                this._store$.dispatch(\n                  new Data.RemoveEntriesIdsMatchingAdvancedSearch({\n                    entriesIds: [selectedEntryId],\n                  })\n                );\n              }\n            }\n\n            this._store$.dispatch(\n              new Routing.UpdateSelectedEntryChildrenRoutes({\n                routingHistory: updateRoutingHistory(\n                  routingHistory,\n                  selectedEntryId,\n                  this.dataTreeViewProperties.getDataSource(),\n                  this._router.url,\n                  updatedUrl,\n                  newNodeExternalId\n                ),\n              })\n            );\n\n            updateSubTreelinks(\n              selectedEntryId,\n              this.dataTreeViewProperties.getDataSource(),\n              newNodeExternalId\n            );\n            const action: IUpdateActionOnTree = {\n              actionType: EUserAction.TREE_UPDATE,\n              triggerNodeId: selectedEntryId,\n              newNodeExternalId,\n            };\n            this.flattenDataTree = getFlattenTree(\n              this.dataTreeViewProperties.getDataSource()\n            );\n            this.refreshTree.next(action);\n          }\n        )\n      )\n      .subscribe();\n\n    this.isHandlingError$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.errorDetail$),\n        filter(([isHandlingError, errorDetail]) => {\n          const is404Error: boolean =\n            !!errorDetail &&\n            errorDetail.handledError instanceof HttpErrorResponse &&\n            errorDetail.handledError.status === 404;\n          return (\n            isHandlingError &&\n            is404Error &&\n            (errorDetail.userActionOnError === EUserAction.TREE_GET ||\n              errorDetail.userActionOnError === EUserAction.TREE_UPDATE ||\n              errorDetail.userActionOnError === EUserAction.TREE_MOVE_NODE ||\n              errorDetail.userActionOnError === EUserAction.TREE_DELETE ||\n              errorDetail.userActionOnError === EUserAction.DETAIL_GET ||\n              errorDetail.userActionOnError === EUserAction.DETAIL_PATCH ||\n              errorDetail.userActionOnError === EUserAction.DETAIL_EDIT ||\n              errorDetail.userActionOnError === EUserAction.DETAIL_UPDATE_ARRAY)\n          );\n        }),\n        tap((_) => {\n          this._store$.dispatch(\n            new Data.FetchResources({\n              resourceTypeId: this.selectedResourceRootTypeId,\n              isRedirectingToDetail: false,\n            })\n          );\n          this.isHandling404Error = true;\n        })\n      )\n      .subscribe();\n\n    this._interactionsService.updateFilteredDetailAttributes$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.selectedEntryId$),\n        tap(([isSelectedNodeMatchingAdvancedSearch, selectedEntryId]) => {\n          if (isSelectedNodeMatchingAdvancedSearch) {\n            this._store$.dispatch(\n              new Data.AddEntryIdMatchingAdvancedSearch({\n                entryId: selectedEntryId,\n              })\n            );\n          } else {\n            this._store$.dispatch(\n              new Data.RemoveEntriesIdsMatchingAdvancedSearch({\n                entriesIds: [selectedEntryId],\n              })\n            );\n          }\n          const action: IUpdateActionOnTree = {\n            actionType: EUserAction.TREE_UPDATE,\n            triggerNodeId: selectedEntryId,\n          };\n          this.refreshTree.next(action);\n        })\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  @HostListener('window:resize')\n  onResizeHandler(): void {\n    this._setTreeViewportHeight();\n  }\n\n  openAddNewResourceDialog(\n    title: string,\n    formData: IFormData[],\n    endpoint: string,\n    scimProperties: IScimProperties,\n    crudAction: string,\n    triggerNode: IDataNode,\n    isAddingChild: boolean,\n    menuTrigger?: MatMenuTrigger\n  ): void {\n    const dialogRef = this._dialog.open(AddEditGenericFormDialogComponent, {\n      minWidth: '40%',\n      restoreFocus: false,\n      data: {\n        title,\n        formData,\n        endpoint,\n        scimProperties,\n        crudAction,\n        entryId: !!triggerNode ? triggerNode.ids.id : null,\n      },\n    });\n\n    dialogRef\n      .afterClosed()\n      .pipe(\n        tap((_) => (this.clickOnAdd = false)),\n        delay(0),\n        tap((_) => {\n          if (menuTrigger) {\n            menuTrigger.focus();\n          } else {\n            this.genericDataHeader.createMiniFabBtn._elementRef.nativeElement.classList.contains(\n              'hide-btn'\n            )\n              ? this.genericDataHeader.createLargeBtn.focus()\n              : this.genericDataHeader.createMiniFabBtn.focus();\n          }\n        })\n      )\n      .subscribe();\n\n    dialogRef.componentInstance.addSucceeded\n      .pipe(\n        tap((data) => {\n          if (data) {\n            const addedNode: IDataNode = this._updateTreeDataAfterAdd(\n              data,\n              triggerNode\n            );\n            const parentType: string = !!triggerNode\n              ? triggerNode.type\n              : this._selectedResourceRootTypeId;\n            const action: IAddActionOnTree = {\n              actionType: EUserAction.TREE_ADD,\n              triggerNodeId: !!triggerNode ? triggerNode.ids.id : null,\n              addedNode,\n              isAddingDifferentTypeChild:\n                isAddingChild &&\n                'addChildren' in this.actions[parentType].primitives,\n            };\n            this._updateAllNodesIdsNames(action);\n            this.refreshTree.next(action);\n            this.flattenDataTree = getFlattenTree(\n              this.dataTreeViewProperties.getDataSource()\n            );\n            this._redirectOnAdd(addedNode);\n            displayedSuccessNotification(\n              this.toastrService,\n              this.actions[parentType],\n              action,\n              [{ ...addedNode.ids, label: addedNode.name }]\n            );\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  onAddNewResource(\n    event: {\n      triggerNode: IDataNode;\n      isAddingChild: boolean;\n      menuTrigger: MatMenuTrigger;\n    } = { triggerNode: null, isAddingChild: false, menuTrigger: null }\n  ) {\n    const action = 'create';\n    const triggerType: string = !!event.triggerNode\n      ? event.triggerNode.type\n      : this.selectedResourceRootTypeId;\n    const triggerChildrenType = !!event.triggerNode\n      ? event.triggerNode.childrenType\n      : null;\n    const newResourceType: string = event.isAddingChild\n      ? triggerChildrenType\n      : triggerType;\n    this.clickOnAdd = true;\n\n    this.openAddNewResourceDialog(\n      event.isAddingChild && triggerType !== triggerChildrenType\n        ? this.actions[triggerType].primitives.addChildren.title\n        : this.actions[triggerType].primitives.add.title,\n      this.resourceCreateForm[newResourceType],\n      this.endpoint[newResourceType],\n      this.scimProperties[newResourceType],\n      action,\n      event.triggerNode,\n      event.isAddingChild,\n      event.menuTrigger\n    );\n  }\n\n  onDeleteResource(event: {\n    triggerNode: IDataNode;\n    elementUiIds?: IUiEntryIds[];\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>;\n  }): void {\n    const succeededRemovedElements: IUiEntryIds[] = [];\n    const failedRemovedElements: IUiEntryIds[] = [];\n    forkJoin(\n      event.elementUiIds.map((element: IUiEntryIds) => {\n        this._interactionsService.isProcessingRequest(true);\n        return this._dataService\n          .removeData(this.endpoint[event.triggerNode.type], element.id)\n          .pipe(\n            tap((_) => {\n              this._interactionsService.isProcessingRequest(false);\n              succeededRemovedElements.push(element);\n            }),\n            catchError((err) => {\n              this._interactionsService.isProcessingRequest(false);\n\n              this._store$.dispatch([\n                new Error.SetErrorDetail({\n                  error: err,\n                  userActionOnError: EUserAction.TREE_DELETE,\n                }),\n                new Error.IsHandlingError(true),\n              ]);\n\n              if (err instanceof HttpErrorResponse && err.status === 404) {\n                failedRemovedElements.push(element);\n              }\n\n              return this._errorsHandlerService.handleError(err);\n            })\n          );\n      })\n    )\n      .pipe(\n        take(1),\n        takeUntil(this._onDestroy$),\n        tap((_) => event.dialogRef?.close()),\n        filter(\n          (_) =>\n            failedRemovedElements.length === 0 &&\n            succeededRemovedElements.length > 0\n        ),\n        withLatestFrom(this.selectedEntryId$, this.isAdvancedSearchActivated$),\n        tap(([_, selectedEntryId, isAdvancedSearchActivated]) => {\n          const removedNodesIds: string[] = succeededRemovedElements.map(\n            (elt: IUiEntryIds) => elt.id\n          );\n          const triggerNodeParent: IDataNode = getParentNode(\n            event.triggerNode,\n            this.dataTreeViewProperties.getDataSource()\n          );\n\n          const triggerNode: IDataNode = getNodeById(\n            event.triggerNode.ids.id,\n            this.dataTreeViewProperties.getDataSource()\n          );\n\n          // Get the level depending on removed nodes location\n          const removedNodesSubtree: IDataNode[] = getRemovedNodesSubTree(\n            removedNodesIds,\n            triggerNode,\n            triggerNodeParent,\n            this.dataTreeViewProperties.getDataSource()\n          );\n\n          const hasRemovedSelectedNode: boolean =\n            this._isSelectedNodeInDeletedNodes(\n              removedNodesSubtree,\n              removedNodesIds,\n              selectedEntryId\n            );\n          const action: IDeleteActionOnTree = {\n            actionType: EUserAction.TREE_DELETE,\n            triggerNodeId: event.triggerNode.ids.id,\n            removedNodesIds,\n            hasRemovedSelectedNode,\n          };\n\n          if (isAdvancedSearchActivated) {\n            const allRemovedNodesIds: string[] = [];\n            removedNodesSubtree\n              .filter((node: IDataNode) =>\n                removedNodesIds.includes(node.ids.id)\n              )\n              .forEach((node: IDataNode) =>\n                allRemovedNodesIds.push(\n                  node.ids.id,\n                  ...getFlattenTreeIds(node.children)\n                )\n              );\n\n            this._store$.dispatch(\n              new Data.RemoveEntriesIdsMatchingAdvancedSearch({\n                entriesIds: allRemovedNodesIds,\n              })\n            );\n          }\n          deleteTreeNodes(removedNodesSubtree, removedNodesIds);\n          this._updateAllNodesIdsNames(action);\n          this.flattenDataTree = getFlattenTree(\n            this.dataTreeViewProperties.getDataSource()\n          );\n          this.refreshTree.next(action);\n          setTabTitle(\n            this._tab,\n            this._titleService,\n            null,\n            this.configs.byId[triggerNode.type],\n            event.triggerNode.parentIds\n          );\n          if (hasRemovedSelectedNode) {\n            this._redirectToNearestParentOnDelete(\n              removedNodesIds,\n              triggerNode,\n              triggerNodeParent\n            );\n          }\n          displayedSuccessNotification(\n            this.toastrService,\n            this.actions[event.triggerNode.type],\n            action,\n            succeededRemovedElements\n          );\n        })\n      )\n      .subscribe();\n  }\n\n  onMoveDataNode(event: {\n    triggerNode: IDataNode;\n    destinationNode: IDataNode;\n    dialogRef?: MatDialogRef<ConfirmDialogComponent>;\n  }): void {\n    const requestBody: any = {\n      schemas: this.scimProperties[event.triggerNode.type],\n      ...event.triggerNode.ids,\n      parentId: event.destinationNode ? event.destinationNode.ids.id : null,\n    };\n    this._dataService\n      .updateData(\n        this.endpoint[event.triggerNode.type],\n        event.triggerNode.ids.id,\n        requestBody\n      )\n      .pipe(\n        take(1),\n        takeUntil(this._onDestroy$),\n        withLatestFrom(this.selectedEntryId$, this.routingHistory$),\n        tap(([_, selectedEntryId, routingHistory]) => {\n          const triggerNodeParent: IDataNode = getParentNode(\n            event.triggerNode,\n            this.dataTreeViewProperties.getDataSource()\n          );\n          let triggerNode: IDataNode = getNodeById(\n            event.triggerNode.ids.id,\n            this.dataTreeViewProperties.getDataSource()\n          );\n          const destinationNode: IDataNode = event.destinationNode\n            ? getNodeById(\n                event.destinationNode.ids.id,\n                this.dataTreeViewProperties.getDataSource()\n              )\n            : null;\n\n          let removedNodesSubTree: IDataNode[] = triggerNodeParent\n            ? triggerNodeParent.children\n            : this.dataTreeViewProperties.getDataSource();\n\n          // Move node\n          removedNodesSubTree.splice(\n            removedNodesSubTree.findIndex(\n              (node: IDataNode) => node.ids.id === triggerNode.ids.id\n            ),\n            1\n          );\n          triggerNode.parentIds = destinationNode\n            ? destinationNode.ids\n            : {\n                id: 'root',\n                externalId: null,\n              };\n          triggerNode.parentIdForDisplay = destinationNode\n            ? destinationNode.ids.id\n            : null;\n          triggerNode = updateLevelForPadding(\n            destinationNode ? destinationNode.levelForPadding : null,\n            triggerNode\n          );\n          addNodeInDataTree(\n            this.dataTreeViewProperties.getDataSource(),\n            destinationNode ? destinationNode.ids.id : null,\n            triggerNode\n          );\n\n          const hasMovedSelectedNode: boolean =\n            this._isSelectedNodeInMovedNodes(triggerNode, selectedEntryId);\n\n          // Update nodes links and routing history\n          const previousUrl: string = getFullUrl(\n            this.endpoint[this.selectedResourceRootTypeId],\n            triggerNode.link\n          );\n          updateSubTreelinks(\n            triggerNode.ids.id,\n            this.dataTreeViewProperties.getDataSource()\n          );\n          const triggerNodeUpdatedUrl: string = getFullUrl(\n            this.endpoint[this.selectedResourceRootTypeId],\n            triggerNode.link\n          );\n          const storeActions: any[] = [];\n          if (hasMovedSelectedNode) {\n            let selectedNodeUpdatedUrl: string;\n            if (triggerNode.ids.id === selectedEntryId) {\n              storeActions.push(\n                new Data.SetSelectedEntryParentIds({ ids: triggerNode.ids })\n              );\n              setTabTitle(\n                this._tab,\n                this._titleService,\n                undefined,\n                this.configs.byId[triggerNode.type],\n                triggerNode.parentIds,\n                triggerNode.ids\n              );\n              selectedNodeUpdatedUrl = triggerNodeUpdatedUrl;\n            } else {\n              const selectedNode: IDataNode = getNodeById(\n                selectedEntryId,\n                this.dataTreeViewProperties.getDataSource()\n              );\n              selectedNodeUpdatedUrl = getFullUrl(\n                this.endpoint[this.selectedResourceRootTypeId],\n                selectedNode.link\n              );\n            }\n            this._router.navigate([selectedNodeUpdatedUrl], {\n              replaceUrl: true,\n            });\n            storeActions.push(new Routing.RemoveLastRoute());\n          }\n          storeActions.push(\n            new Routing.UpdateSelectedEntryRoute({\n              route: {\n                url: triggerNodeUpdatedUrl,\n                extras: {\n                  ids: triggerNode.ids,\n                  parentIds: triggerNode.parentIds,\n                },\n              },\n            }),\n            new Routing.UpdateSelectedEntryChildrenRoutes({\n              routingHistory: updateRoutingHistory(\n                routingHistory,\n                triggerNode.ids.id,\n                this.dataTreeViewProperties.getDataSource(),\n                previousUrl,\n                triggerNodeUpdatedUrl\n              ),\n            })\n          );\n          this._store$.dispatch(storeActions);\n\n          // Prepare for refresh generic-tree\n          const action: IMoveNodeActionOnTree = {\n            actionType: EUserAction.TREE_MOVE_NODE,\n            triggerNodeId: triggerNode.ids.id,\n            destinationNode: destinationNode,\n            hasMovedSelectedNode,\n          };\n          this._updateAllNodesIdsNames(action);\n          this.flattenDataTree = getFlattenTree(\n            this.dataTreeViewProperties.getDataSource()\n          );\n          this.refreshTree.next(action);\n\n          displayedSuccessNotification(\n            this.toastrService,\n            this.actions[triggerNode.type],\n            action,\n            [{ ...triggerNode.ids, label: triggerNode.name }]\n          );\n          event.dialogRef?.close();\n        }),\n        catchError((err: Error | HttpErrorResponse) => {\n          this._interactionsService.isProcessingRequest(false);\n          const selectedEntryId: string = this._store$.selectSnapshot(\n            DataState.getSelectedEntryId\n          );\n          if (err instanceof HttpErrorResponse && err.status === 404) {\n            event.dialogRef?.close();\n            const errorMessageRegExp = new RegExp(`.* ${selectedEntryId}$`);\n            if (\n              event.triggerNode.ids.id === selectedEntryId &&\n              errorMessageRegExp.test(err.error.message)\n            ) {\n              this._router.navigate(\n                [this._router.url.replace(/[^/]+$/g, 'not-found')],\n                { replaceUrl: true }\n              );\n            }\n          }\n          this._store$.dispatch([\n            new Error.SetErrorDetail({\n              error: err,\n              userActionOnError: EUserAction.TREE_MOVE_NODE,\n            }),\n            new Error.IsHandlingError(true),\n          ]);\n          return this._errorsHandlerService.handleError(err);\n        })\n      )\n      .subscribe();\n  }\n\n  onUpdateWidth(width: string): void {\n    this.genericDataHeaderWidth =\n      width === '100%'\n        ? this.DRAWER_MIN_WIDTH\n        : Number(width.replace('px', ''));\n  }\n\n  private _updateTreeDataAfterAdd(\n    newData: any,\n    triggerNode: IDataNode\n  ): IDataNode {\n    const nodeToAdd: IDataNode = buildNodeTree(\n      newData,\n      this.endpoint,\n      triggerNode,\n      this.nodeNameModelRef\n    );\n    if (this.resourceTypeConfig.hasAdvancedSearch) {\n      const nodeNames: string[] = ['name'];\n      if (\n        this.configs.byId[this.selectedResourceRootTypeId].props\n          ?.filterOnExternalId\n      ) {\n        nodeNames.push('externalId');\n      }\n      if (\n        isMatchingSearch(\n          this.advancedSearchComp.searchForm.get('search').value,\n          this.advancedSearchComp.advancedSearchChips,\n          nodeNames,\n          newData\n        )\n      ) {\n        this._store$.dispatch(\n          new Data.AddEntryIdMatchingAdvancedSearch({\n            entryId: nodeToAdd.ids.id,\n          })\n        );\n      }\n    }\n    addNodeInDataTree(\n      this.dataTreeViewProperties.getDataSource(),\n      !!triggerNode ? triggerNode.ids.id : null,\n      nodeToAdd\n    );\n    return nodeToAdd;\n  }\n\n  private _redirectOnAdd(addedNode: IDataNode): void {\n    this._store$.dispatch([\n      new Data.SetSelectedEntryIds({\n        ids: addedNode.ids,\n      }),\n      new Data.SetSelectedEntryParentIds({\n        ids: addedNode.parentIds,\n      }),\n    ]);\n    const treeNodeLink: string =\n      '/home/' +\n      this.endpoint[this._selectedResourceRootTypeId] +\n      '/' +\n      addedNode.link;\n    this._router.navigate([treeNodeLink]);\n  }\n\n  private _redirectToNearestParentOnDelete(\n    removedNodesIds: string[],\n    triggerNode: IDataNode,\n    triggerNodeParent: IDataNode\n  ): void {\n    const isRemovingChild = !removedNodesIds.includes(triggerNode.ids.id);\n    const nearestParentNode: IDataNode = isRemovingChild\n      ? triggerNode\n      : triggerNodeParent;\n    const resourceTypeUrlRegex = new RegExp('^(/[^/]*){2}', 'g');\n    const resourceTypeUrl: string = this._router.url\n      .match(resourceTypeUrlRegex)\n      .toString();\n    let nearestParentUrl: string = resourceTypeUrl;\n    if (!!nearestParentNode) {\n      this._store$.dispatch([\n        new Data.SetSelectedEntryIds({\n          ids: nearestParentNode.ids,\n        }),\n        new Data.SetSelectedEntryParentIds({\n          ids: nearestParentNode.parentIds,\n        }),\n      ]);\n      nearestParentUrl = resourceTypeUrl.concat('/', nearestParentNode.link);\n    } else {\n      this._store$.dispatch([\n        new Data.ResetSelectedEntryIds(),\n        new Data.ResetSelectedEntryParentIds(),\n      ]);\n    }\n    this._router.navigate([nearestParentUrl]);\n  }\n\n  private _isSelectedNodeInDeletedNodes(\n    removedNodesSubtree: IDataNode[],\n    removedNodesIds: string[],\n    selectedNodeId: string\n  ): boolean {\n    const allDeletedNodesIds = getFlattenTreeIds(\n      removedNodesSubtree.filter((removedNode: IDataNode) =>\n        removedNodesIds.includes(removedNode.ids.id)\n      )\n    );\n    return allDeletedNodesIds.includes(selectedNodeId);\n  }\n\n  private _isSelectedNodeInMovedNodes(\n    triggerNode: IDataNode,\n    selectedNodeId: string\n  ): boolean {\n    const flattenChildrenNodesIds: string[] = getFlattenTreeIds(\n      triggerNode.children\n    );\n\n    return (\n      triggerNode.ids.id === selectedNodeId ||\n      flattenChildrenNodesIds.includes(selectedNodeId)\n    );\n  }\n\n  private _updateAllNodesIdsNames(action: ActionsTypes): void {\n    switch (action.actionType) {\n      case EUserAction.TREE_ADD:\n        this.allNodesIdsNames.push({\n          ids: action.addedNode.ids,\n          name: action.addedNode.name,\n          parentId: action.addedNode.parentIds.id,\n        });\n        break;\n      case EUserAction.TREE_DELETE:\n        this.allNodesIdsNames = this.allNodesIdsNames.filter(\n          (nodeIds: IDataNodeIdsFields) =>\n            !action.removedNodesIds.includes(nodeIds.ids.id)\n        );\n        break;\n      case EUserAction.TREE_UPDATE:\n        this.allNodesIdsNames.find(\n          (nodeIds: IDataNodeIdsFields) =>\n            nodeIds.ids.id === action.triggerNodeId\n        ).name = action.newNodeName;\n        break;\n      case EUserAction.TREE_MOVE_NODE:\n        this.allNodesIdsNames.find(\n          (nodeIds: IDataNodeIdsFields) =>\n            nodeIds.ids.id === action.triggerNodeId\n        ).parentId = action.destinationNode\n          ? action.destinationNode.ids.id\n          : 'root';\n        break;\n      default:\n        break;\n    }\n  }\n\n  private _updateRouterUrlDependingOnAuthorization(): void {\n    const selectedNodeId: string = this._store$.selectSnapshot(\n      DataState.getSelectedEntryId\n    );\n    if (!!selectedNodeId) {\n      const selectedNode: IDataNode = this.flattenDataTree.find(\n        (node: IDataNode) => node.ids.id === selectedNodeId\n      );\n      if (!!selectedNode) {\n        const selectedNodeUrl: string = getFullUrl(\n          this.endpoint[this.selectedResourceRootTypeId],\n          selectedNode.link\n        );\n        if (selectedNodeUrl !== this._router.url) {\n          if (!this.isHandling404Error) {\n            this._store$.dispatch(\n              new Routing.UpdateCurrentUrl({\n                newUrl: selectedNodeUrl,\n              })\n            );\n            this._location.replaceState(\n              selectedNodeUrl,\n              '',\n              this._location.getState()\n            );\n          } else {\n            this._store$.dispatch(new Routing.RemoveLastRoute());\n            this._router.navigate([selectedNodeUrl], { replaceUrl: true });\n            this.isHandling404Error = false;\n          }\n        }\n      }\n    }\n  }\n\n  private _setDisplayProperties(): void {\n    this.dataTreeViewProperties = new DataTreeViewProperties();\n    this.resourceTypeConfig =\n      this.configs.byId[this.selectedResourceRootTypeId];\n  }\n\n  private _setDisplayData(dataTree: IDataNode[]): void {\n    this.flattenDataTree = getFlattenTree(dataTree);\n    this.dataTreeViewProperties.setDataSource(dataTree);\n    this.allNodesIdsNames = getNodesIdsNamesParentIds(dataTree);\n    this._updateRouterUrlDependingOnAuthorization();\n  }\n\n  private _setTreeViewportHeight(): void {\n    this.treeViewportHeight =\n      this.elementRef.nativeElement.offsetHeight -\n      this.divHeader.nativeElement.offsetHeight;\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<mat-drawer\n  fxLayout=\"column\"\n  position=\"start\"\n  mode=\"side\"\n  opened\n  [disableClose]=\"true\"\n  [ngClass]=\"\n    isLargeScreen && genericDataHeaderWidth > 0\n      ? 'sidenav-tree-lg-screen'\n      : 'sidenav-tree-sm-screen'\n  \"\n  class=\"sidenav-tree\"\n>\n  <div\n    *ngIf=\"genericDataHeaderWidth > 0; else loadingSpinner\"\n    fxLayout=\"column\"\n    #divHeader\n  >\n    <div *ngIf=\"resourceTypeConfig.hasAdvancedSearch\" fxFlex>\n      <dm-advanced-search\n        #advancedSearchComponent\n        [@fadeIn]=\"treeReady\"\n        [resourceTypeConfig]=\"resourceTypeConfig\"\n        [searchFormValue]=\"searchFormValue$ | async\"\n        [selectedResourceRootTypeId]=\"selectedResourceRootTypeId\"\n        [advancedSearchChips]=\"advancedSearchChips$ | async\"\n        [isLargeScreen]=\"isLargeScreen\"\n      ></dm-advanced-search>\n    </div>\n\n    <dm-generic-data-header\n      #genericDataHeader\n      [advancedSearchMatHint]=\"advancedSearchComp?.matHint\"\n      [dataJsTable]=\"dataJsTable$ | async\"\n      [isAdvancedSearchActivated]=\"isAdvancedSearchActivated$ | async\"\n      [canCreate]=\"canCreate[selectedResourceRootTypeId]\"\n      [addBtnLabel]=\"\n        actions[selectedResourceRootTypeId].primitives.add?.btnLabel\n      \"\n      [selectedResourceRootTypeId]=\"selectedResourceRootTypeId\"\n      [offsetWidth]=\"genericDataHeaderWidth\"\n      (clickOnAddResourceBtn)=\"onAddNewResource($event)\"\n    ></dm-generic-data-header>\n  </div>\n  <ng-template #loadingSpinner\n    ><dm-loading-spinner></dm-loading-spinner\n  ></ng-template>\n\n  <ng-container\n    *ngIf=\"!(isFetchingResources$ | async) || !treeReady; else loadingSpinner\"\n  >\n    <div\n      #divGenericTree\n      *ngIf=\"treeReady\"\n      fxFlex=\"1 1 auto\"\n      class=\"div-generic-tree\"\n    >\n      <dm-generic-tree\n        [style.visibility]=\"genericDataHeaderWidth > 0 ? 'visible' : 'hidden'\"\n        [actionsMenuTemplate]=\"actionsMenu\"\n        [isFilteringOnExternalId]=\"\n          configs.byId[selectedResourceRootTypeId].props?.filterOnExternalId\n        \"\n        [expandedTreeNodesUuids]=\"expandedTreeNodesUuids\"\n        [isAdvancedSearchActivated]=\"isAdvancedSearchActivated$ | async\"\n        [allNodesIdsNames]=\"allNodesIdsNames\"\n        [selectedNodeId]=\"selectedEntryId$ | async\"\n        [selectedResourceRootTypeId]=\"selectedResourceRootTypeId\"\n        [actions]=\"actions\"\n        [refresh]=\"refreshTree\"\n        [nodesIdsMatchingAdvancedSearch]=\"\n          entriesIdsMatchingAdvancedSearch$ | async\n        \"\n        [advancedSearch]=\"{\n          searchForm: advancedSearchComp?.searchFormValue,\n          advancedSearchChips: advancedSearchComp?.advancedSearchChips\n        }\"\n        [search]=\"search\"\n        [flattenInitialDataTree]=\"flattenDataTree\"\n        [initialDataTree]=\"dataTreeViewProperties.getDataSource()\"\n        [isLargeScreen]=\"isLargeScreen\"\n        [viewportHeight]=\"treeViewportHeight\"\n        (widthUpdated)=\"onUpdateWidth($event)\"\n      ></dm-generic-tree>\n      <ng-template\n        #actionsMenu\n        let-node=\"node\"\n        let-selectedElementsUiIds=\"selectedElementsUiIds\"\n      >\n        <dm-ellipsis-menu\n          *ngIf=\"canCreate[node?.childrenType] || node?.canDelete\"\n          #ellipsisMenu\n          [selectedElementsUiIds]=\"selectedElementsUiIds\"\n          [uiComponent]=\"uiComponent\"\n          [options]=\"{\n            canCreateChild: canCreate[node.childrenType]\n          }\"\n          [node]=\"node\"\n          [isProcessingRequest]=\"isProcessingRequest\"\n          [actions]=\"actions[node.type].primitives\"\n          (evtDeleteSelectedElement)=\"\n            onDeleteResource({\n              triggerNode: node,\n              elementUiIds: [$event.entry],\n              dialogRef: $event.dialogRef\n            })\n          \"\n          (evtDeleteSelectedElements)=\"\n            onDeleteResource({\n              triggerNode: node,\n              elementUiIds: $event.entries,\n              dialogRef: $event.dialogRef\n            })\n          \"\n          (evtMoveDataNode)=\"\n            onMoveDataNode({\n              destinationNode: $event.destinationNode,\n              triggerNode: node,\n              dialogRef: $event.dialogRef\n            })\n          \"\n          (clickOnAddResourceBtn)=\"\n            onAddNewResource({\n              triggerNode: node,\n              isAddingChild: true,\n              menuTrigger: ellipsisMenu.menuTrigger\n            })\n          \"\n        ></dm-ellipsis-menu>\n      </ng-template>\n    </div>\n  </ng-container>\n</mat-drawer>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport {\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Select, Store } from '@ngxs/store';\nimport {\n  Observable,\n  Subject,\n  filter,\n  takeUntil,\n  tap,\n  withLatestFrom,\n} from 'rxjs';\nimport {\n  ConfigsState,\n  DataState,\n  EResourceComponent,\n  HeaderState,\n  HomeState,\n  IConfig,\n  IData,\n  IDataItem,\n  IDataNode,\n  IEntryIds,\n  IResourceType,\n  IResourceTypeProperties,\n  ITabProps,\n  InteractionsService,\n  JsTable,\n  ResourcesTypesState,\n  emptyJsTable,\n  isLargeScreen,\n  setTabTitle,\n  toJsTable,\n} from '../../../../../shared';\nimport { getResourcesTypesProperties } from '../../../shared/helpers/resources.helper';\n\n@Component({\n  selector: 'dm-resource-page',\n  templateUrl: './resource-page.component.html',\n  styleUrls: ['./resource-page.component.scss'],\n})\nexport class ResourcePageComponent implements OnInit, OnDestroy {\n  @Select(ResourcesTypesState.getResourcesTypesJsTable)\n  resourcesTypesJsTable$: Observable<JsTable<IResourceType>>;\n\n  @Select(ConfigsState.getConfigsJsTable) configsJsTable$: Observable<\n    JsTable<IConfig>\n  >;\n\n  @Select(DataState.getSelectedResourceTypeId)\n  selectedResourceTypeId$: Observable<string>;\n\n  @Select(DataState.getRootIdSelectedResourceType)\n  selectedResourceTypeRootId$: Observable<string>;\n\n  @Select(DataState.getResources) resources$: Observable<\n    IData | IDataNode[] | IDataItem[]\n  >;\n\n  @Select(DataState.getSelectedEntryIds)\n  selectedEntryIds$: Observable<IEntryIds>;\n\n  @Select(DataState.isFetchingDataDetail)\n  isFetchingDataDetail$: Observable<boolean>;\n\n  @Input() additionalBtns: TemplateRef<any>;\n\n  private _onDestroy$ = new Subject<void>();\n\n  private _tabPrefix: ITabProps;\n\n  private _homepageTabTitle: string;\n\n  public displayChild = false;\n\n  public resourcesComponent: string;\n\n  public placeholderDetailPage: string;\n\n  public isLargeScreen$: Observable<boolean>;\n\n  public resourcesTypesProperties: JsTable<IResourceTypeProperties> =\n    emptyJsTable<IResourceTypeProperties>();\n\n  public processingRequest$: Observable<boolean>;\n\n  public resourcesComponentType = EResourceComponent;\n\n  constructor(\n    private _store$: Store,\n    private _titleService: Title,\n    private _interactionsService: InteractionsService\n  ) {}\n\n  ngOnInit(): void {\n    this.isLargeScreen$ = isLargeScreen(this._store$);\n\n    this.processingRequest$ = this._interactionsService.processingRequest$;\n\n    this._tabPrefix = this._store$.selectSnapshot(HeaderState.getTabProps);\n    this._homepageTabTitle = this._store$.selectSnapshot(HomeState.getTabTitle);\n    setTabTitle(this._tabPrefix, this._titleService, this._homepageTabTitle);\n\n    this.selectedResourceTypeRootId$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        filter(\n          (selectedResourceTypeRootId: string) => !!selectedResourceTypeRootId\n        ),\n        withLatestFrom(\n          this.resourcesTypesJsTable$,\n          this.configsJsTable$,\n          this.selectedEntryIds$\n        ),\n        tap(\n          ([\n            selectedResourceTypeRootId,\n            resourcesTypes,\n            configs,\n            selectedEntryIds,\n          ]) => {\n            if (selectedEntryIds === null) {\n              setTabTitle(\n                this._tabPrefix,\n                this._titleService,\n                configs.byId[selectedResourceTypeRootId].label\n              );\n            }\n            this.resourcesTypesProperties = toJsTable<IResourceTypeProperties>(\n              getResourcesTypesProperties(\n                selectedResourceTypeRootId,\n                resourcesTypes,\n                configs\n              )\n            );\n            this.resourcesComponent =\n              configs.byId[selectedResourceTypeRootId].component;\n            this.placeholderDetailPage = configs.byId[\n              selectedResourceTypeRootId\n            ].actions.primitives.noSelectedElement\n              ? configs.byId[selectedResourceTypeRootId].actions.primitives\n                  .noSelectedElement.title\n              : null;\n          }\n        )\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n\n  onActivate(event: any): void {\n    if (event !== undefined) {\n      this.displayChild = true;\n    }\n  }\n\n  onDeactivate(event: any): void {\n    if (event !== undefined) {\n      this.displayChild = false;\n    }\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<div\n  fxFlex\n  fxLayout=\"{{\n    resourcesComponent === resourcesComponentType.ARRAY ? 'column' : 'row'\n  }}\"\n  class=\"resource-page-container\"\n>\n  <ng-container *ngIf=\"resourcesComponent === resourcesComponentType.ARRAY\">\n    <ng-container\n      *ngIf=\"\n        (selectedEntryIds$ | async) == null && !displayChild;\n        else loadingSpinner\n      \"\n    >\n      <dm-array-data\n        [additionalBtns]=\"additionalBtns\"\n        [isLargeScreen]=\"isLargeScreen$ | async\"\n        [configs]=\"configsJsTable$ | async\"\n        [selectedResourceTypeId]=\"selectedResourceTypeId$ | async\"\n        [resourcesTypesProperties]=\"resourcesTypesProperties\"\n        [isProcessingRequest]=\"processingRequest$ | async\"\n        [dataArray]=\"resources$ | async\"\n      ></dm-array-data>\n    </ng-container>\n    <ng-container [ngTemplateOutlet]=\"routerOutlet\"></ng-container>\n  </ng-container>\n\n  <ng-container *ngIf=\"resourcesComponent === resourcesComponentType.LIST\">\n    <dm-list-data\n      [selectedResourceRootTypeId]=\"selectedResourceTypeRootId$ | async\"\n      [resourcesTypesProperties]=\"resourcesTypesProperties\"\n      [isProcessingRequest]=\"processingRequest$ | async\"\n      [dataList]=\"resources$ | async\"\n      [isLargeScreen]=\"isLargeScreen$ | async\"\n    ></dm-list-data>\n\n    <ng-container [ngTemplateOutlet]=\"detailPage\"></ng-container>\n  </ng-container>\n\n  <ng-container *ngIf=\"resourcesComponent === resourcesComponentType.TREE\">\n    <dm-tree-data\n      [configs]=\"configsJsTable$ | async\"\n      [resourcesTypesProperties]=\"resourcesTypesProperties\"\n      [selectedResourceRootTypeId]=\"selectedResourceTypeRootId$ | async\"\n      [isProcessingRequest]=\"processingRequest$ | async\"\n      [dataTree]=\"resources$ | async\"\n      [isLargeScreen]=\"isLargeScreen$ | async\"\n    ></dm-tree-data>\n\n    <ng-container [ngTemplateOutlet]=\"detailPage\"></ng-container>\n  </ng-container>\n\n  <ng-template #detailPage>\n    <div fxFlex fxLayout=\"column\" class=\"div-resource-page-detail\">\n      <div\n        *ngIf=\"\n          (selectedEntryIds$ | async) == null && !displayChild;\n          else loadingSpinner\n        \"\n        fxFlex\n        fxLayout=\"column\"\n        fxLayoutAlign=\"center center\"\n        [ngClass]=\"\n          (isLargeScreen$ | async)\n            ? 'lg-placeholder-detail-page'\n            : 'sm-placeholder-detail-page'\n        \"\n      >\n        <mat-icon aria-hidden=\"true\" class=\"placeholder-detail-page-icon\">\n          search\n        </mat-icon>\n        <span class=\"placeholder-text placeholder-detail-page-text\">\n          {{ placeholderDetailPage }}\n        </span>\n      </div>\n      <ng-container [ngTemplateOutlet]=\"routerOutlet\"></ng-container>\n    </div>\n  </ng-template>\n\n  <ng-template #loadingSpinner>\n    <dm-loading-spinner\n      *ngIf=\"isFetchingDataDetail$ | async\"\n    ></dm-loading-spinner>\n  </ng-template>\n\n  <ng-template #routerOutlet>\n    <router-outlet\n      (activate)=\"onActivate($event)\"\n      (deactivate)=\"onDeactivate($event)\"\n    ></router-outlet>\n  </ng-template>\n</div>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { FeatureModule } from '../../../../../feature';\nimport { SharedModule } from '../../../../../shared';\nimport { UiModule } from '../../../../../ui';\nimport { ArrayDataComponent } from './array-data/array-data.component';\nimport { ListDataComponent } from './list-data/list-data.component';\nimport { ResourcePageComponent } from './resource-page.component';\nimport { TreeDataComponent } from './tree-data/tree-data.component';\n\n@NgModule({\n  declarations: [\n    ResourcePageComponent,\n    ArrayDataComponent,\n    ListDataComponent,\n    TreeDataComponent,\n  ],\n  imports: [SharedModule, FeatureModule, UiModule],\n  exports: [ResourcePageComponent],\n})\nexport class ResourcePageModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable, Subject, takeUntil, tap } from 'rxjs';\nimport { User, UserState, UserStateModel } from '../../../../shared';\n\n@Component({\n  selector: 'dm-login',\n  templateUrl: './login.component.html',\n  styleUrls: ['./login.component.scss'],\n})\nexport class LoginComponent implements OnDestroy, OnInit {\n  private _onDestroy$ = new Subject<void>();\n\n  @Select(UserState.getUser) user$: Observable<UserStateModel>;\n\n  public loginForm: FormGroup;\n\n  constructor(\n    private _fb: FormBuilder,\n    private _store$: Store,\n    private _router: Router\n  ) {}\n\n  ngOnInit(): void {\n    this.loginForm = this._fb.group({\n      displayName: ['', Validators.required],\n      password: ['', Validators.required],\n    });\n\n    this.user$\n      .pipe(\n        takeUntil(this._onDestroy$),\n        tap((user: UserStateModel) => {\n          if (user.isConnecting || user.isConnected) {\n            this.loginForm.disable();\n            this.loginForm.disable();\n          } else {\n            this.loginForm.enable();\n            this.loginForm.enable();\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  onSubmit(value: { displayName: string; password: string }): void {\n    this._store$.dispatch(\n      new User.Connect({\n        userInfo: value,\n      })\n    );\n    this._store$.dispatch(new User.ConnectSuccess());\n    this._router.navigate(['../']);\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next();\n    this._onDestroy$.complete();\n  }\n}\n","<!-- Copyright (C) 2020-2024 Linagora\n\nThis program is free software: you can redistribute it and/or modify it under\nthe terms of the GNU Affero General Public License as published by the Free\nSoftware Foundation, either version 3 of the License, or (at your option) any\nlater version, provided you comply with the Additional Terms applicable for\nLinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\nAffero General Public License, subsections (b), (c), and (e), pursuant to\nwhich these Appropriate Legal Notices must notably (i) retain the display of\nthe \"LinID™\" trademark/logo at the top of the interface window, the display\nof the “You are using the Open Source and free version of LinID™, powered by\nLinagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\noffer!” infobox and in the e-mails sent with the Program, notice appended to\nany type of outbound messages (e.g. e-mail and meeting requests) as well as\nin the LinID Directory Manager user interface, (ii) retain all hypertext\nlinks between LinID Directory Manager and https://linid.org/, as well as\nbetween LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\nintellectual property rights over its trademarks and commercial brands. Other\nAdditional Terms apply, see <http://www.linagora.com/licenses/> for more\ndetails.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\nFOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\ndetails.\n\nYou should have received a copy of the GNU Affero General Public License and\nits applicable Additional Terms for LinID Directory Manager along with this\nprogram. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\nGeneral Public License version 3 and <http://www.linagora.com/licenses/> for\nthe Additional Terms applicable to the LinID Directory Manager software. -->\n\n<mat-card *ngIf=\"user$ | async as user\">\n  <form\n    [formGroup]=\"loginForm\"\n    (ngSubmit)=\"onSubmit(loginForm.value)\"\n    fxLayout=\"column\"\n  >\n    <mat-form-field class=\"margin-top-x1\">\n      <span matPrefix>\n        <mat-icon aria-hidden=\"true\" color=\"primary\">person</mat-icon>\n      </span>\n      <input\n        matInput\n        color=\"primary\"\n        type=\"text\"\n        placeholder=\"Identifiant\"\n        formControlName=\"username\"\n        required\n      />\n      <mat-error>Requis!</mat-error>\n    </mat-form-field>\n\n    <mat-form-field class=\"margin-top-x1\">\n      <span matPrefix>\n        <mat-icon aria-hidden=\"true\" color=\"primary\">vpn_key</mat-icon>\n      </span>\n      <input\n        matInput\n        color=\"primary\"\n        type=\"password\"\n        placeholder=\"Mot de passe\"\n        formControlName=\"password\"\n        required\n      />\n      <mat-error>Requis!</mat-error>\n    </mat-form-field>\n\n    <button\n      mat-raised-button\n      color=\"accent\"\n      class=\"margin-top-x1\"\n      [disabled]=\"loginForm.invalid || user.isConnecting || user.isConnected\"\n    >\n      <span\n        *ngIf=\"user?.isConnecting || user?.isConnected; else userLoginTpl\"\n        fxLayout=\"row\"\n        fxLayoutAlign=\"center center\"\n        class=\"span-color\"\n      >\n        Connexion en cours\n        <mat-spinner [diameter]=\"16\" [strokeWidth]=\"1\"></mat-spinner>\n      </span>\n      <ng-template #userLoginTpl>\n        <span fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"span-color\">\n          Se connecter\n        </span>\n      </ng-template>\n    </button>\n  </form>\n</mat-card>\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LoginComponent } from './login.component';\n\nconst routes: Routes = [\n  {\n    path: '',\n    component: LoginComponent,\n  },\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n})\nexport class LoginRoutingModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '../../../../shared';\nimport { LoginRoutingModule } from './login-routing.module';\nimport { LoginComponent } from './login.component';\n\n@NgModule({\n  declarations: [LoginComponent],\n  imports: [SharedModule, LoginRoutingModule],\n})\nexport class LoginModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './app/app.component';\nexport * from './app/app.guard';\nexport * from './app/app.module';\nexport * from './app/core/core.module';\nexport * from './app/shared/helpers';\nexport * from './app/shared/interfaces';\nexport * from './app/shared/services';\nexport * from './app/features/homepage/homepage.component';\nexport * from './app/features/homepage/homepage.module';\nexport * from './app/features/homepage/resource-page/data-detail/data-detail.component';\nexport * from './app/features/homepage/resource-page/data-detail/data-detail.guard';\nexport * from './app/features/homepage/resource-page/data-detail/data-detail.module';\nexport * from './app/features/homepage/resource-page/resource-page.component';\nexport * from './app/features/homepage/resource-page/resource-page.guard';\nexport * from './app/features/homepage/resource-page/resource-page.module';\nexport * from './app/features/login/login.module';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './public-api';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nimport { NgModule } from '@angular/core';\nimport { FeatureModule } from './feature';\nimport { SharedModule } from './shared';\nimport { UiModule } from './ui';\n\n@NgModule({\n  exports: [SharedModule, UiModule, FeatureModule],\n})\nexport class ClientCoreModule {}\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './shared';\nexport * from './dm-core';\nexport * from './feature';\nexport * from './ui';\nexport * from './client-core.module';\n","/**\n * Copyright (C) 2020-2024 Linagora\n *\n * This program is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, either version 3 of the License, or (at your option) any\n * later version, provided you comply with the Additional Terms applicable for\n * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU\n * Affero General Public License, subsections (b), (c), and (e), pursuant to\n * which these Appropriate Legal Notices must notably (i) retain the display of\n * the \"LinID™\" trademark/logo at the top of the interface window, the display\n * of the “You are using the Open Source and free version of LinID™, powered by\n * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise\n * offer!” infobox and in the e-mails sent with the Program, notice appended to\n * any type of outbound messages (e.g. e-mail and meeting requests) as well as\n * in the LinID Directory Manager user interface, (ii) retain all hypertext\n * links between LinID Directory Manager and https://linid.org/, as well as\n * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA\n * intellectual property rights over its trademarks and commercial brands. Other\n * Additional Terms apply, see <http://www.linagora.com/licenses/> for more\n * details.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License and\n * its applicable Additional Terms for LinID Directory Manager along with this\n * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero\n * General Public License version 3 and <http://www.linagora.com/licenses/> for\n * the Additional Terms applicable to the LinID Directory Manager software.\n */\n\nexport * from './lib/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_","Error.SetErrorDetail","Error.IsHandlingError","i1","i2.EnvService","Error.ResetLastError","i3.InteractionsService","Error.ResetErrorDetail","Error.SetGenericErrorMessages","PATH_RESOURCES_TYPES","Configs.FetchConfigsError","ResourcesTypes.FetchResourcesTypesError","ErrorActions.IsHandlingError","ErrorActions.ResetErrorDetail","ExternalLinks.SetExternalLinksConfig","User.SetCurrentUserConfig","Home.SetHomepageConfig","Header.SetHeaderConfig","LogoutDialog.SetLogoutDialogConfig","Ui.SetGenericAccessibility","Configs.FetchConfigsSuccess","i1.ConfigsService","i2","Configs.FetchConfigs","Data.SetSelectedResourceTypeId","Data.ResetSelectedResourceTypeId","Data.SetSelectedEntryIds","Data.ResetSelectedEntryIds","Data.SetSelectedEntryId","Data.ResetSelectedEntryId","Data.SetSelectedEntryExternalId","Data.ResetSelectedEntryExternalId","Data.SetSelectedEntryParentIds","Data.ResetSelectedEntryParentIds","Data.SetSelectedEntryParentId","Data.ResetSelectedEntryParentId","Data.SetSelectedEntryParentExternalId","Data.ResetSelectedEntryParentExternalId","Data.SetRootIdSelectedResourceType","Data.ResetRootIdSelectedResourceType","Data.InitDataJsTable","Data.ToggleFoldTreeNode","Data.SetFilterValue","Data.SetSearchFormValue","Data.SetAdvancedSearchChips","Data.ResetSearchFormValue","Data.RemoveAdvancedSearchChip","Data.ResetAdvancedSearchChips","Data.FilterResources","Data.FetchResources","Data.StopFilteringResources","Data.AddEntryIdMatchingAdvancedSearch","Data.RemoveEntriesIdsMatchingAdvancedSearch","Data.FetchResourcesSuccess","Data.FetchResourcesError","Data.SetResources","Data.ResetResources","Data.FetchDataDetail","Data.FetchDataDetailSuccess","Data.FetchDataDetailError","Data.SetDataDetail","Data.ResetDataDetail","ResourcesTypes.FetchResourcesTypesSuccess","i1.ResourcesTypesService","ResourcesTypes.FetchResourcesTypes","Routing.AddCurrentRoute","Routing.RestoreRoute","Routing.RemoveLastRoute","Routing.SetIsRedirectAllowed","Routing.SetAvailableRoutes","Routing.UpdateSelectedEntryRoute","Routing.UpdateSelectedEntryChildrenRoutes","Routing.UpdateCurrentUrl","Ui.SetLanguage","Ui.ToggleSidenav","Ui.ChangeScreenSize","Ui.ChangeTheme","User.UpdateCurrentUserConfig","User.Connect","User.ConnectError","User.ConnectSuccess","User.Disconnect","User.DisconnectError","User.DisconnectSuccess","i3","i4.AuthService","i5.RoutingService","i6","i4.EnvService","i4","i5.EnvService","i6.ResourcePageGuard","i7.DataDetailGuard","i3.EnvService","ErrorActions.SetErrorDetail","i2.DataService","i2.InteractionsService","i2.ErrorsHandlerService","i1.AuthService","i2.AuthService","i5","i8","i9","i6.SidenavService","i7","i10","i11","i12","i14.HeaderComponent","i13","i16.CastToIAttributeActions","i7.ColorSearchedLettersDirective","i10.LoadingSpinnerComponent","i1.InteractionsService","i1.DataService","i1.ErrorsHandlerService","i11.OmitCharsDirective","i12.GenericArrayHeaderComponent","i13.LoadingSpinnerComponent","i14.GenericArrayComponent","i15.GenericListComponent","i16.GenericTreeComponent","i17.SearchBarComponent","i4.DataService","i4.InteractionsService","i4.ErrorsHandlerService","i10.GenericArrayHeaderComponent","i11.EllipsisMenuComponent","i12.GenericArrayComponent","i2.FormService","i14","i15","i21.InfiniteScrollDirective","i22.UnfocusableDirective","i23.OmitCharsDirective","i3.GenericFormComponent","i1.EnvService","i9.FlexGrowFitContentDirective","i3.RoutingService","i8.DataDetailArrayAttributesComponent","i9.DataDetailEditButtonComponent","i10.DataDetailHeaderComponent","i11.DataDetailSimpleAttributesComponent","i12.LoadingSpinnerComponent","i15.DisableControlDirective","i16.GenericFormComponent","i8.AdvancedSearchComponent","i9.EllipsisMenuComponent","i10.GenericArrayComponent","i11.GenericArrayHeaderComponent","i12.GenericDataHeaderComponent","i13.GenericListComponent","i14.LoadingSpinnerComponent","i11.AdvancedSearchComponent","i12.EllipsisMenuComponent","i13.GenericDataHeaderComponent","i14.GenericTreeComponent","i15.LoadingSpinnerComponent","i9.LoadingSpinnerComponent","i10.ArrayDataComponent","i11.ListDataComponent","i12.TreeDataComponent"],"mappings":"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"}