{"version":3,"file":"arlas-wui-toolkit.mjs","sources":["../../../projects/arlas-toolkit/src/lib/tools/utils.ts","../../../projects/arlas-toolkit/src/lib/services/arlas-authentification/arlas-authentification.service.ts","../../../projects/arlas-toolkit/src/lib/services/settings/arlas.settings.service.ts","../../../projects/arlas-toolkit/src/lib/services/arlas-iam/arlas-iam.service.ts","../../../projects/arlas-toolkit/src/lib/services/authentification/authentification.service.ts","../../../projects/arlas-toolkit/src/lib/components/denied-access-dialog/denied-access-dialog.component.ts","../../../projects/arlas-toolkit/src/lib/components/denied-access-dialog/denied-access-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/reconnect-dialog/reconnect-dialog.component.ts","../../../projects/arlas-toolkit/src/lib/components/reconnect-dialog/reconnect-dialog.component.html","../../../projects/arlas-toolkit/src/lib/tools/errors/error.ts","../../../projects/arlas-toolkit/src/lib/tools/errors/backend-error.ts","../../../projects/arlas-toolkit/src/lib/tools/errors/settings-error.ts","../../../projects/arlas-toolkit/src/lib/services/collaborative-search/arlas.collaborative-search.service.ts","../../../projects/arlas-toolkit/src/lib/services/error/error.service.ts","../../../projects/arlas-toolkit/src/lib/tools/errors/authorisation-error.ts","../../../projects/arlas-toolkit/src/lib/services/interceptor/fetch-interceptor.service.ts","../../../projects/arlas-toolkit/src/lib/components/change-password/change-password.component.ts","../../../projects/arlas-toolkit/src/lib/components/change-password/change-password.component.html","../../../projects/arlas-toolkit/src/lib/components/user-infos/user-infos.component.ts","../../../projects/arlas-toolkit/src/lib/components/user-infos/user-infos.component.html","../../../projects/arlas-toolkit/src/lib/components/top-menu/about/about.component.ts","../../../projects/arlas-toolkit/src/lib/components/top-menu/about/about.component.html","../../../projects/arlas-toolkit/src/lib/components/top-menu/about/about-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/top-menu/links/link/link.component.ts","../../../projects/arlas-toolkit/src/lib/components/top-menu/links/link/link.component.html","../../../projects/arlas-toolkit/src/lib/components/top-menu/links/links.component.ts","../../../projects/arlas-toolkit/src/lib/components/top-menu/links/links.component.html","../../../projects/arlas-toolkit/src/lib/components/top-menu/top-menu.component.ts","../../../projects/arlas-toolkit/src/lib/components/top-menu/top-menu.component.html","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/chip/chip.component.ts","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/chip/chip.component.html","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/filters-handler/filters-handler.component.ts","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/filters-handler/filters-handler.component.html","../../../projects/arlas-toolkit/src/lib/components/progress-spinner/progress-spinner.component.ts","../../../projects/arlas-toolkit/src/lib/components/progress-spinner/progress-spinner.component.html","../../../projects/arlas-toolkit/src/lib/tools/errors/dashboard-error.ts","../../../projects/arlas-toolkit/src/lib/services/configuration-updater/configurationUpdater.service.ts","../../../projects/arlas-toolkit/src/lib/services/permission/permission.service.ts","../../../projects/arlas-toolkit/src/lib/services/persistence/persistence.service.ts","../../../projects/arlas-toolkit/src/lib/services/process/process.service.ts","../../../projects/arlas-toolkit/src/lib/services/startup/contributorBuilder.ts","../../../projects/arlas-toolkit/src/lib/services/startup/startup.service.ts","../../../projects/arlas-toolkit/src/lib/services/collection/arlas-collection.service.ts","../../../projects/arlas-toolkit/src/lib/services/export-csv/export-csv.service.ts","../../../projects/arlas-toolkit/src/lib/components/histogram-tooltip-overlay/histogram-tooltip-overlay.component.ts","../../../projects/arlas-toolkit/src/lib/components/histogram-tooltip-overlay/histogram-tooltip-overlay.component.html","../../../projects/arlas-toolkit/src/lib/components/donut-tooltip-overlay/donut-tooltip-overlay.component.ts","../../../projects/arlas-toolkit/src/lib/components/donut-tooltip-overlay/donut-tooltip-overlay.component.html","../../../projects/arlas-toolkit/src/lib/components/calendar-timeline-tooltip-overlay/calendar-timeline-tooltip-overlay.component.ts","../../../projects/arlas-toolkit/src/lib/components/calendar-timeline-tooltip-overlay/calendar-timeline-tooltip-overlay.component.html","../../../projects/arlas-toolkit/src/lib/services/overlays/overlay.service.ts","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/filter-shortcut.utils.ts","../../../projects/arlas-toolkit/src/lib/pipes/contributor-updating.pipe.ts","../../../projects/arlas-toolkit/src/lib/components/histogram-widget/histogram-widget.component.ts","../../../projects/arlas-toolkit/src/lib/components/histogram-widget/histogram-widget.component.html","../../../projects/arlas-toolkit/src/lib/components/widget/widget.component.ts","../../../projects/arlas-toolkit/src/lib/components/widget/widget.component.html","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/filter-shortcut.component.ts","../../../projects/arlas-toolkit/src/lib/components/filter-shortcut/filter-shortcut.component.html","../../../projects/arlas-toolkit/src/lib/services/analytics/analytics.service.ts","../../../projects/arlas-toolkit/src/lib/components/analytics/analytics-board/analytics-board.component.ts","../../../projects/arlas-toolkit/src/lib/components/analytics/analytics-board/analytics-board.component.html","../../../projects/arlas-toolkit/src/lib/components/analytics/analytics-menu/analytics-menu.component.ts","../../../projects/arlas-toolkit/src/lib/components/analytics/analytics-menu/analytics-menu.component.html","../../../projects/arlas-toolkit/src/lib/tools/arlasLocalDatabase.ts","../../../projects/arlas-toolkit/src/lib/services/aoi/aoiDatabase.ts","../../../projects/arlas-toolkit/src/lib/services/aoi/aoi.service.ts","../../../projects/arlas-toolkit/src/lib/tools/arlasDataSource.ts","../../../projects/arlas-toolkit/src/lib/components/aoi/aoi.component.ts","../../../projects/arlas-toolkit/src/lib/components/aoi/aoi.component.html","../../../projects/arlas-toolkit/src/lib/services/bookmark/bookmarkLocalDatabase.ts","../../../projects/arlas-toolkit/src/lib/tools/arlasPersistenceDatabase.ts","../../../projects/arlas-toolkit/src/lib/services/bookmark/bookmarkPersistenceDatabase.ts","../../../projects/arlas-toolkit/src/lib/services/bookmark/model.ts","../../../projects/arlas-toolkit/src/lib/services/bookmark/bookmark.service.ts","../../../projects/arlas-toolkit/src/lib/components/bookmark/bookmark-add-dialog.component.ts","../../../projects/arlas-toolkit/src/lib/components/bookmark/bookmark-add-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/bookmark/bookmark.component.ts","../../../projects/arlas-toolkit/src/lib/components/bookmark/bookmark.component.html","../../../projects/arlas-toolkit/src/lib/components/bookmark-menu/bookmark-menu.component.ts","../../../projects/arlas-toolkit/src/lib/components/bookmark-menu/bookmark-menu.component.html","../../../projects/arlas-toolkit/src/lib/services/bookmark/bookmarkDataSource.ts","../../../projects/arlas-toolkit/src/lib/tools/consts.ts","../../../projects/arlas-toolkit/src/lib/tools/errors/authorisation-on-action-error.ts","../../../projects/arlas-toolkit/src/lib/components/config-manager/share-config/share-config.component.ts","../../../projects/arlas-toolkit/src/lib/components/config-manager/share-config/share-config.component.html","../../../projects/arlas-toolkit/src/lib/components/config-manager/action-modal/action-modal.component.ts","../../../projects/arlas-toolkit/src/lib/components/config-manager/action-modal/action-modal.component.html","../../../projects/arlas-toolkit/src/lib/components/config-manager/config-menu/config-menu.component.ts","../../../projects/arlas-toolkit/src/lib/components/config-manager/config-menu/config-menu.component.html","../../../projects/arlas-toolkit/src/lib/components/config-manager/share-config/share-config.module.ts","../../../projects/arlas-toolkit/src/lib/components/config-manager/action-modal/action-modal.module.ts","../../../projects/arlas-toolkit/src/lib/components/config-manager/config-menu/config-menu.module.ts","../../../projects/arlas-toolkit/src/lib/components/confirm-modal/confirm-modal.component.ts","../../../projects/arlas-toolkit/src/lib/components/confirm-modal/confirm-modal.component.html","../../../projects/arlas-toolkit/src/lib/components/calendar-timeline/calendar-timeline.component.ts","../../../projects/arlas-toolkit/src/lib/components/calendar-timeline/calendar-timeline.component.html","../../../projects/arlas-toolkit/src/lib/components/share/model/ArlasSearchField.ts","../../../projects/arlas-toolkit/src/lib/components/admonition-card/admonition-card.component.ts","../../../projects/arlas-toolkit/src/lib/components/admonition-card/admonition-card.component.html","../../../projects/arlas-toolkit/src/lib/components/download/download.component.ts","../../../projects/arlas-toolkit/src/lib/components/download/download.component.html","../../../projects/arlas-toolkit/src/lib/components/download/download-dialog.component.html","../../../projects/arlas-toolkit/src/lib/services/extend/extendLocalDatabase.ts","../../../projects/arlas-toolkit/src/lib/services/extend/extendPersistenceDatabase.ts","../../../projects/arlas-toolkit/src/lib/services/extend/extend.service.ts","../../../projects/arlas-toolkit/src/lib/components/extend/extend.component.ts","../../../projects/arlas-toolkit/src/lib/components/extend/extend.component.html","../../../projects/arlas-toolkit/src/lib/components/filters/filters.component.ts","../../../projects/arlas-toolkit/src/lib/components/filters/filters.component.html","../../../projects/arlas-toolkit/src/lib/components/permissions-creator/permissions-creator-dialog/permissions-creator-dialog.component.ts","../../../projects/arlas-toolkit/src/lib/components/permissions-creator/permissions-creator-dialog/permissions-creator-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/permissions-creator/permissions-creator.component.ts","../../../projects/arlas-toolkit/src/lib/components/permissions-creator/permissions-creator.component.html","../../../projects/arlas-toolkit/src/lib/components/language-switcher/language-switcher.component.ts","../../../projects/arlas-toolkit/src/lib/components/language-switcher/language-switcher.component.html","../../../projects/arlas-toolkit/src/lib/components/search/search.component.ts","../../../projects/arlas-toolkit/src/lib/components/search/search.component.html","../../../projects/arlas-toolkit/src/lib/components/search/search-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/share/exclude-type.pipe.ts","../../../projects/arlas-toolkit/src/lib/components/share/share.component.ts","../../../projects/arlas-toolkit/src/lib/components/share/share.component.html","../../../projects/arlas-toolkit/src/lib/components/share/share-dialog.component.html","../../../projects/arlas-toolkit/src/lib/services/tag/tag.service.ts","../../../projects/arlas-toolkit/src/lib/components/tag/tag.component.ts","../../../projects/arlas-toolkit/src/lib/components/tag/tag.component.html","../../../projects/arlas-toolkit/src/lib/components/tag/tag-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/tag/tag-management-dialog.component.html","../../../projects/arlas-toolkit/src/lib/components/timeline/date-picker/date-picker.component.ts","../../../projects/arlas-toolkit/src/lib/components/timeline/date-picker/date-picker.component.html","../../../projects/arlas-toolkit/src/lib/pipes/get-time-label.pipe.ts","../../../projects/arlas-toolkit/src/lib/components/timeline/timeline-shortcut/timeline-shortcut.component.ts","../../../projects/arlas-toolkit/src/lib/components/timeline/timeline-shortcut/timeline-shortcut.component.html","../../../projects/arlas-toolkit/src/lib/components/timeline/timeline/timeline.component.ts","../../../projects/arlas-toolkit/src/lib/components/timeline/timeline/timeline.component.html","../../../projects/arlas-toolkit/src/lib/tools/color-generator-loader.ts","../../../projects/arlas-toolkit/src/lib/services/configuration-descriptor/configurationDescriptor.service.ts","../../../projects/arlas-toolkit/src/lib/services/map-settings/map-settings.service.ts","../../../projects/arlas-toolkit/src/lib/services/map/map.service.ts","../../../projects/arlas-toolkit/src/lib/services/walkthrough/walkthrough.utils.ts","../../../projects/arlas-toolkit/src/lib/services/walkthrough/walkthrough.service.ts","../../../projects/arlas-toolkit/src/lib/services/walkthrough/walkthrough.module.ts","../../../projects/arlas-toolkit/src/lib/tools/process.interface.ts","../../../projects/arlas-toolkit/src/lib/components/aias/aias-process.ts","../../../projects/arlas-toolkit/src/lib/components/aias/aias-result/aias-result.component.ts","../../../projects/arlas-toolkit/src/lib/components/aias/aias-result/aias-result.component.html","../../../projects/arlas-toolkit/src/lib/components/aias/aias-download/aias-download.component.ts","../../../projects/arlas-toolkit/src/lib/components/aias/aias-download/aias-download.component.html","../../../projects/arlas-toolkit/src/lib/components/aias/aias-enrich/aias-enrich.component.ts","../../../projects/arlas-toolkit/src/lib/components/aias/aias-enrich/aias-enrich.component.html","../../../projects/arlas-toolkit/src/lib/tools/Translation/custom-translate-loader.ts","../../../projects/arlas-toolkit/src/lib/shared.module.ts","../../../projects/arlas-toolkit/src/lib/tagger.module.ts","../../../projects/arlas-toolkit/src/lib/components/login/login.component.ts","../../../projects/arlas-toolkit/src/lib/components/login/login.component.html","../../../projects/arlas-toolkit/src/lib/components/register/register.component.ts","../../../projects/arlas-toolkit/src/lib/components/register/register.component.html","../../../projects/arlas-toolkit/src/lib/toolkit.component.ts","../../../projects/arlas-toolkit/src/lib/toolkit.component.html","../../../projects/arlas-toolkit/src/lib/components/verify/verify.component.ts","../../../projects/arlas-toolkit/src/lib/components/verify/verify.component.html","../../../projects/arlas-toolkit/src/lib/components/reset/reset.component.ts","../../../projects/arlas-toolkit/src/lib/components/reset/reset.component.html","../../../projects/arlas-toolkit/src/lib/components/forgot/forgot.component.ts","../../../projects/arlas-toolkit/src/lib/components/forgot/forgot.component.html","../../../projects/arlas-toolkit/src/lib/toolkit-routing.module.ts","../../../projects/arlas-toolkit/src/lib/components/timeline/date-picker/ArlasTranslateIntl.ts","../../../projects/arlas-toolkit/src/lib/services/arlas-iam/auth-guard-iam.service.ts","../../../projects/arlas-toolkit/src/lib/tools/paginatori18n.ts","../../../projects/arlas-toolkit/src/lib/toolkit.module.ts","../../../projects/arlas-toolkit/src/lib/tools/jwt.interceptor.ts","../../../projects/arlas-toolkit/src/lib/login.module.ts","../../../projects/arlas-toolkit/src/public-api.ts","../../../projects/arlas-toolkit/src/arlas-wui-toolkit.ts"],"sourcesContent":["/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Filter } from 'arlas-api';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Contributor } from 'arlas-web-core';\nimport {\n  ComputeContributor,\n  DetailedHistogramContributor,\n  HistogramContributor,\n  ResultListContributor,\n  SwimLaneContributor,\n  TreeContributor\n} from 'arlas-web-contributors';\nimport { ArlasError } from './errors/error';\nimport { ArlasSearchField } from '../components/share/model/ArlasSearchField';\n\nexport const CONFIG_ID_QUERY_PARAM = 'config_id';\nexport const GET_OPTIONS = new InjectionToken<Function>('get_options');\nexport const NOT_CONFIGURED = 'NOT_CONFIGURED';\n\nexport interface ConfigAction {\n  type: ConfigActionEnum;\n  enabled?: boolean;\n  name?: string;\n  url?: string;\n  configIdParam?: string;\n  config: Config;\n}\n\nexport interface Config {\n  id: string;\n  name: string;\n  value: string;\n  lastUpdate: number;\n  readers: Array<string>;\n  writers: Array<string>;\n  zone: string;\n  org: string;\n  displayPublic: boolean;\n}\n\nexport enum ConfigActionEnum {\n  VIEW,\n  DELETE,\n  EDIT,\n  DUPLICATE,\n  SHARE,\n  CREATE,\n  RENAME\n}\n\nexport interface ArlasStorageObject {\n  id: string;\n  date: Date;\n  name: string;\n}\n\nexport enum ArlasStorageType {\n  local,\n  persistence\n}\n\nexport interface SpinnerOptions {\n  color?: string;\n  diameter?: number;\n  strokeWidth?: number;\n}\n\nexport interface CollectionUnit {\n  collection: string;\n  unit: string;\n  ignored: boolean;\n}\n\nexport interface CollectionCount {\n  count: number;\n  collection: string;\n  color: string;\n  hasCentroidPath: boolean;\n  hasGeometryPath: boolean;\n  ignored: boolean;\n  unit?: string;\n}\n\nexport interface AuthentSetting {\n  use_discovery: boolean;\n  force_connect: boolean;\n  use_authent: boolean;\n  auth_mode?: 'openid' | 'iam';\n  client_id: string;\n  issuer: string;\n  scope?: string;\n  response_type?: string;\n  redirect_uri?: string;\n  silent_refresh_redirect_uri?: string;\n  silent_refresh_timeout?: number;\n  timeout_factor?: number;\n  session_checks_enabled?: boolean;\n  show_debug_information?: boolean;\n  clear_hash_after_login?: boolean;\n  disable_at_hash_check?: boolean;\n  require_https?: boolean;\n  dummy_client_secret?: string;\n  userinfo_endpoint?: string;\n  token_endpoint?: string;\n  jwks_endpoint?: string;\n  login_url?: string;\n  logout_url?: string;\n  post_logout_redirect_uri?: string;\n  storage?: string;\n  customQueryParams?: Object;\n  threshold?: number;\n  url?: string;\n  sign_up_enabled?: boolean;\n}\n\nexport interface GeocodingSetting {\n  enabled?: boolean;\n  find_place_url?: string;\n  find_place_zoom_to?: number;\n}\n\nexport interface DeniedAccessData {\n  error: ArlasError;\n  forceAction?: boolean;\n}\n\nexport enum ZoomToDataStrategy {\n  NONE = 'none',\n  CENTROID = 'centroid',\n  GEOMETRY = 'geometry'\n}\n\n/**\n * This interface lists the possible methods to apply on a Map object of a given cartographic client\n */\nexport interface MapService {\n  zoomToData(collection: string, geoPointField: string, map: any);\n}\n\nexport function hashCode(str) { // java String#hashCode\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = str.charCodeAt(i) + ((hash << 5) - hash);\n  }\n  return hash;\n}\n\nexport function intToRGB(i) {\n  const c = (i & 0x00FFFFFF)\n    .toString(16)\n    .toUpperCase();\n  return '00000'.substring(0, 6 - c.length) + c;\n}\n\nexport class Guid {\n  public newGuid() {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n      const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n      return v.toString(16);\n    });\n  }\n}\n\nexport function sortOnDate(data: ArlasStorageObject[]): ArlasStorageObject[] {\n  const sortedData = data.sort((a, b) => {\n    let propertyA: number = new Date(0).getTime();\n    let propertyB: number = new Date(0).getTime();\n    [propertyA, propertyB] = [a.date.getTime(), b.date.getTime()];\n    const valueA = isNaN(+propertyA) ? propertyA : +propertyA;\n    const valueB = isNaN(+propertyB) ? propertyB : +propertyB;\n\n    return (valueA < valueB ? -1 : 1) * (-1);\n  });\n  return sortedData;\n}\n\nexport function getKeyForColor(dataModel: Object): string {\n  const finalKeys: string[] = [];\n  Object.keys(dataModel).forEach(k => {\n    const key = new Set();\n    const dataModelFilters = dataModel[k].filters;\n    if (!!dataModelFilters) {\n      dataModelFilters.forEach((filters: Filter[], collection: string) => {\n        filters.forEach(filter => {\n          if (filter.f !== undefined) {\n            filter.f.forEach(e => e\n              .forEach(ex => {\n                if (!key.has(collection + 'f' + ex.field + ex.op)) {\n                  key.add('f' + ex.field + ex.op);\n                }\n              }));\n          }\n          if (filter.q !== undefined) {\n            if (!key.has(collection + 'q')) {\n              key.add(collection + 'q');\n            }\n          }\n        });\n      });\n\n    }\n    finalKeys.push(Array.from(key).sort().join(','));\n  });\n  return intToRGB(hashCode(finalKeys.sort().join(',')));\n}\n\nexport function getFieldProperties(fieldList: any, parentPrefix?: string,\n  arlasFields?: Array<{ label: string; type: string; }>, isFirstLevel?: boolean\n): Array<{ label: string; type: string; }> {\n  if (!arlasFields) {\n    arlasFields = new Array();\n  }\n  if (isFirstLevel === undefined) {\n    isFirstLevel = true;\n  }\n  Object.keys(fieldList).forEach(fieldName => {\n    if (fieldList[fieldName].type === 'OBJECT') {\n      const subFields = fieldList[fieldName].properties;\n      if (subFields) {\n        getFieldProperties(subFields, (parentPrefix ? parentPrefix : '') + fieldName + '.', arlasFields, false);\n      }\n    } else {\n      arlasFields.push({ label: (parentPrefix ? parentPrefix : '') + fieldName, type: fieldList[fieldName].type });\n    }\n  });\n\n  if (isFirstLevel) {\n    return arlasFields;\n  }\n}\n\n\n\nexport function ConfirmedValidator(controlName: string, matchingControlName: string) {\n  return (formGroup: FormGroup) => {\n    const control = formGroup.controls[controlName];\n    const matchingControl = formGroup.controls[matchingControlName];\n    if (matchingControl.errors && !matchingControl.errors.confirmedValidator) {\n      return;\n    }\n    if (control.value !== matchingControl.value) {\n      matchingControl.setErrors({ confirmedValidator: true });\n    } else {\n      matchingControl.setErrors(null);\n    }\n  };\n}\n\nexport class ArlasOverlayRef {\n  public constructor(private overlayRef: OverlayRef) { }\n  public close(): void {\n    if (!!this.overlayRef) {\n      this.overlayRef.dispose();\n    }\n  }\n}\nexport const HISTOGRAM_TOOLTIP_DATA = new InjectionToken<any>('HISTOGRAM_TOOLTIP_DATA');\nexport const CALENDAR_TIMELINE_TOOLTIP_DATA = new InjectionToken<any>('CALENDAR_TIMELINE_TOOLTIP_DATA');\nexport const DONUT_TOOLTIP_DATA = new InjectionToken<any>('DONUT_TOOLTIP_DATA');\n\nexport interface WidgetConfiguration {\n  /**\n   * @description Identifier of the contributor that serves data to the graphic component.\n   */\n  contributorId: string;\n\n  uuid: string;\n  /**\n   * @description swimlane | histogram | donut | powerbars | resultlist\n   */\n  componentType?: string;\n  /**\n * @description whether we display export csv button\n */\n  showExportCsv?: boolean;\n  /**\n   * @description Set of inputs of a ARLAS-web-component.\n   */\n  input: any;\n}\n\n/**\n * @param param Parameter to extract\n * @returns Value of the parameter contained in the URL\n */\nexport function getParamValue(param: string) {\n  let paramValue = null;\n  const url = window.location.href;\n  const regex = new RegExp('[?&]' + param + '(=([^&#]*)|&|#|$)');\n  const results = regex.exec(url);\n  if (results && results[2]) {\n    paramValue = results[2];\n  }\n  return paramValue;\n}\n\nexport function hasContributorData(contributor: Contributor): boolean {\n  if (contributor instanceof ComputeContributor) {\n    return contributor.metricValue !== undefined;\n  } else if (contributor instanceof DetailedHistogramContributor) {\n    return contributor.chartData.length > 0;\n  } else if (contributor instanceof HistogramContributor) {\n    return contributor.chartData.length > 0;\n  } else if (contributor instanceof ResultListContributor) {\n    return contributor.data.length > 0;\n  } else if (contributor instanceof SwimLaneContributor) {\n    return contributor.swimData !== undefined;\n  } else if (contributor instanceof TreeContributor) {\n    return contributor.treeData !== undefined;\n  } else {\n    // Other types of histogram don't have data\n    return false;\n  }\n}\n\nexport function orderAlphabeticallyArlasSearchFields(arlasSearchFieldA: ArlasSearchField, arlasSearchFieldB: ArlasSearchField,) {\n  const comparedWordA = arlasSearchFieldA?.label.trim().toLowerCase();\n  const comparedWordB = arlasSearchFieldB?.label.trim().toLowerCase();\n  return comparedWordA.localeCompare(comparedWordB);\n}\n\nexport function flattenData(y: Object) {\n  const out = {};\n  function flatten(x, name = '') {\n    if (typeof x === 'object' && !Array.isArray(x)) {\n      for (const a in x) {\n        if (Object.prototype.hasOwnProperty.call(x, a)) {\n          flatten(x[a], name + a + '_');\n        }\n      }\n    } else if (Array.isArray(x)) {\n      for (let i = 0; i < x.length; i++) {\n        flatten(x[i], name + i + '_');\n      }\n    } else {\n      out[name.slice(0, -1)] = x;\n    }\n  }\n  flatten(y);\n  return out;\n}\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { AuthentSetting } from '../../tools/utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasAuthentificationService {\n\n  public authConfigValue: AuthentSetting;\n\n  public constructor() { }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ArlasSettings, LinkSettings, ProcessSettings, ResultlistSettings } from '../startup/startup.service';\nimport { PersistenceSetting } from '../persistence/persistence.service';\nimport { PermissionSetting } from '../permission/permission.service';\nimport {AuthentSetting, GeocodingSetting} from '../../tools/utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasSettingsService {\n  public settings: ArlasSettings;\n\n  public constructor() { }\n\n  public setSettings(settings: ArlasSettings): void {\n    this.settings = settings;\n  }\n\n  public getSettings(): ArlasSettings {\n    return this.settings;\n  }\n\n  public getPersistenceSettings(): PersistenceSetting {\n    return !!this.settings && !!this.settings.persistence ? this.settings.persistence : undefined;\n  }\n\n  public getPermissionSettings(): PermissionSetting {\n    return !!this.settings && !!this.settings.permission ? this.settings.permission : undefined;\n  }\n\n  public getGeocodingSettings(): GeocodingSetting {\n    return !!this.settings && !!this.settings.geocoding ? this.settings.geocoding : undefined;\n  }\n\n  public getArlasWuiUrl(): string {\n    return !!this.settings && !!this.settings.arlas_wui_url ? this.settings.arlas_wui_url : undefined;\n  }\n\n  public getArlasBuilderUrl(): string {\n    return !!this.settings && !!this.settings.arlas_builder_url ? this.settings.arlas_builder_url : undefined;\n  }\n\n  public getArlasHubUrl(): string {\n    return !!this.settings && !!this.settings.arlas_hub_url ? this.settings.arlas_hub_url : undefined;\n  }\n\n  public getArlasIAMWuiUrl(): string {\n    return !!this.settings && !!this.settings.arlas_iam_wui_url ? this.settings.arlas_iam_wui_url : undefined;\n  }\n\n  public getLinksSettings(): LinkSettings[] {\n    return !!this.settings && !!this.settings.links ? this.settings.links : undefined;\n  }\n\n  public getTicketingKey(): string {\n    return !!this.settings && !!this.settings.ticketing_key && this.settings.ticketing_key !== '' ? this.settings.ticketing_key : undefined;\n  }\n\n  public getHistogramMaxBucket(): number {\n    return !!this.settings && !!this.settings.histogram && !!this.settings.histogram.max_buckets ? this.settings.histogram.max_buckets : 200;\n  }\n\n  public isResultListExportEnabled(): boolean {\n    return !!this.settings && !!this.settings.resultlist && !!this.settings.resultlist.enable_export;\n  }\n\n  public getResultlistSettings(): ResultlistSettings {\n    return !!this.settings && !!this.settings.resultlist ? this.settings.resultlist : undefined;\n  }\n\n  public getHistogramNbBucketAtExport(): number {\n    return !!this.settings && !!this.settings.histogram && !!this.settings.histogram.export_nb_buckets ?\n      this.settings.histogram.export_nb_buckets : 1000;\n  }\n\n  public getAuthentSettings(): AuthentSetting {\n    return !!this.settings && !!this.settings.authentication ? this.settings.authentication : undefined;\n  }\n\n  public getProcessSettings(name: string): ProcessSettings {\n    return !!this.settings && !!this.settings.processes ? this.settings.processes.find(p => p.name === name) : undefined;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ArlasMessage, LoginData, PermissionData, PermissionDef, UserData } from 'arlas-iam-api';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { from } from 'rxjs/internal/observable/from';\nimport { timer } from 'rxjs/internal/observable/timer';\nimport { takeUntil } from 'rxjs/internal/operators/takeUntil';\nimport { AuthentSetting, NOT_CONFIGURED } from '../../tools/utils';\nimport { ArlasAuthentificationService } from '../arlas-authentification/arlas-authentification.service';\nimport { ArlasIamApi } from '../startup/startup.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\nimport { finalize, tap } from 'rxjs';\n\nexport const ARLAS_ORG_FILTER = 'arlas-org-filter';\n\n\nexport interface IamHeader {\n  Authorization: string;\n  [ARLAS_ORG_FILTER]: string;\n}\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasIamService extends ArlasAuthentificationService {\n\n  private options;\n  private arlasIamApi: ArlasIamApi;\n  private refreshTokenTimer$;\n  private unsubscribe: Subject<void> = new Subject<void>();\n  private tokenRefreshedSource: BehaviorSubject<LoginData> = new BehaviorSubject(null);\n  private currentOrganisation = '';\n\n  public tokenRefreshed$ = this.tokenRefreshedSource.asObservable();\n  public user: UserData;\n  public reloadState: string;\n  public storage = new Map();\n\n  public constructor(\n    private router: Router,\n    private settings: ArlasSettingsService\n  ) {\n    super();\n  }\n\n  public declareReloadState(reloadState) {\n    this.reloadState = reloadState;\n  }\n\n  public consumeReloadState() {\n    if (this.reloadState) {\n      window.open(this.reloadState, '_self');\n    }\n  }\n\n  public setOptions(options): void {\n    this.options = options;\n  }\n\n  public setArlasIamApi(api: ArlasIamApi) {\n    this.arlasIamApi = api;\n  }\n\n  /**\n   * - Strores the given access token in localstorage\n   * - Set the headers of iamService with an already stored organisation in localstorage.  */\n  public setHeadersFromAccesstoken(accessToken: string): void {\n    this.storeAccessToken(accessToken);\n    const headers = {\n      Authorization: 'Bearer ' + accessToken\n    };\n    const organisation = this.getOrganisation();\n    if (organisation) {\n      headers[ARLAS_ORG_FILTER] = organisation;\n    }\n    this.setOptions({ headers });\n  }\n\n  /** Stores the given org and access token in localstorage + set iamService headers. */\n  public setHeaders(org: string, accessToken: string): void {\n    this.storeAccessToken(accessToken);\n    this.storeOrganisation(org);\n    const headers = {\n      Authorization: 'Bearer ' + accessToken,\n      [ARLAS_ORG_FILTER]: org\n    };\n    this.setOptions({ headers });\n  }\n\n  public storeAccessToken(accessToken: string): void {\n    this.storage.set('accessToken', accessToken);\n  }\n\n  public getAccessToken(): string {\n    return this.storage.get('accessToken');\n  }\n\n  /** Gets organisation from localstorage.\n   * The method checks if the organisation is defined\n   * If not returned the first of the list in user's organisations.\n   */\n  public getOrganisation(): string {\n    if (!!this.currentOrganisation) {\n      return this.currentOrganisation;\n    } else {\n      if (!!this.user && this.user.organisations?.length > 0) {\n        return this.user.organisations[0].name;\n      }\n      return null;\n    }\n  }\n\n  public storeOrganisation(organisation: string): void {\n    this.currentOrganisation = organisation;\n  }\n\n  public notifyTokenRefresh(loginData: LoginData) {\n    this.tokenRefreshedSource.next(loginData);\n  }\n\n  private clearTokens() {\n    this.storage.delete('accessToken');\n  }\n\n  private clearOrganisation() {\n    this.currentOrganisation = null;\n  }\n\n  /** This method should be called right after being logged in\n   * THUS; there is no need to refresh the token at 0; we can wait for the moment the token is about to expire to **start** the timer.\n   * By doing this we avoid refreshing the token twice in a row.\n   * Also starting the refresh at 0 causes some incoherence in localstorage when we activate 'redirect_uri' parameter in settings.yaml\n   */\n  public startRefreshTokenTimer(loginData: LoginData): void {\n    this.tokenRefreshedSource.next(loginData);\n    // permit to obtain accessToken expiration date\n    const accessToken = loginData.access_token;\n    const jwtToken = JSON.parse(atob(accessToken.split('.')[1]));\n    const exp = jwtToken.exp;\n    const iat = jwtToken.iat;\n    const threshold = (exp-iat)/2;\n    const expires = new Date(exp * 1000);\n    // set a timeout to refresh the accessToken at de half life of the accessToken\n    const timeout = expires.getTime() - Date.now() - (threshold * 1000);\n    // refresh accessToken when timeout ended (passing the refreshToken)\n    // start the timer at 'timeout' which is the duration where the token is about to expire\n    // repeat each 'timeout'\n    this.refreshTokenTimer$ = timer(timeout, timeout).pipe(takeUntil(this.unsubscribe)).subscribe(() => {\n      this.refresh().subscribe({\n        next: (loginData: LoginData) => {\n          // store localy accessToken\n          this.user = loginData.user;\n          this.setHeadersFromAccesstoken(loginData.access_token);\n          this.tokenRefreshedSource.next(loginData);\n        },\n        error: (e) => {\n          this.logout();\n        }\n      });\n    });\n  }\n\n  public initAuthService() {\n    return this.refresh().toPromise()\n      .then(\n        (loginData: LoginData) => {\n          this.user = loginData.user;\n          this.setHeadersFromAccesstoken(loginData.access_token);\n          this.startRefreshTokenTimer(loginData);\n          return Promise.resolve();\n        })\n      .catch((err) => {\n        this.checkForceConnect();\n        console.error(err);\n        return Promise.resolve();\n      });\n  }\n\n\n  private checkForceConnect() {\n    const authSettings = this.settings.getAuthentSettings();\n    if (!!authSettings && authSettings.force_connect && this.needsRedirection(window.location.pathname)) {\n      this.forceConnect(authSettings);\n    }\n  }\n\n  private needsRedirection(path: string): boolean {\n    return !path.includes('/verify') && !path.includes('/reset') && !path.includes('/register') && !path.includes('/password_forgot');\n  }\n\n  private forceConnect(authSettings: AuthentSetting) {\n    if (authSettings.login_url && authSettings.login_url !== NOT_CONFIGURED) {\n      window.open(authSettings.login_url, '_self');\n    } else {\n      this.router.navigate(['login']);\n    }\n  }\n\n  public isAuthenticated(){\n    return !!this.user;\n  }\n\n  public areSettingsValid(authentSetting: AuthentSetting): [boolean, string] {\n    let valid = true;\n    const missingInfo = [];\n    if (authentSetting && authentSetting.use_authent) {\n      if (!authentSetting.url || authentSetting.url === NOT_CONFIGURED) {\n        valid = false;\n        missingInfo.push('- `iam server url` must be configured when `auth_mode=iam`');\n      }\n      if (!authentSetting.threshold) {\n        valid = false;\n        missingInfo.push('- `iam server threshold` must be configured when `auth_mode=iam`');\n      }\n    }\n    return [valid, missingInfo.join('\\n')];\n  }\n\n  public stopRefreshTokenTimer(): void {\n    this.unsubscribe.next();\n    if (this.refreshTokenTimer$) {\n      this.refreshTokenTimer$.unsubscribe();\n    }\n  }\n\n  public clearStore() {\n    this.clearTokens();\n    this.clearOrganisation();\n  }\n\n  public logoutWithoutRedirection$() {\n    return from(this.arlasIamApi.logout(this.options)).pipe(\n      tap(() => {\n        this.user = undefined;\n        this.clearStore();\n        this.stopRefreshTokenTimer();\n        this.notifyTokenRefresh(null);\n        localStorage.setItem('arlas-logout-event', 'logout' + Date.now());\n      })\n    );\n\n  }\n\n  public logout(redirectPageAfterLogout: string[] = ['/login']): void {\n    this.logoutWithoutRedirection$().pipe(\n      finalize(() => this.router.navigate(redirectPageAfterLogout).then(() => {\n        window.location.reload();\n      }))\n    ).subscribe(() => this.user = undefined);\n  }\n\n  public refresh(): Observable<LoginData> {\n    // No need access token to refresh so we remove the access token in header if present\n    let options = this.options;\n    if (!!options && options.headers && options.headers.Authorization) {\n      delete options.headers.Authorization;\n    }\n    if (!options) {\n      options = { credentials: 'include' };\n    } else {\n      options.credentials = 'include';\n    }\n    return from(this.arlasIamApi.refresh(options));\n  }\n\n  public login(email: string, password: string) {\n    let options = this.options;\n    if (!!options && options.headers && options.headers.Authorization) {\n      delete options.headers.Authorization;\n    }\n    if (!options) {\n      options = { credentials: 'include' };\n    } else {\n      options.credentials = 'include';\n    }\n    return from(this.arlasIamApi.login({ email, password }, options));\n  }\n\n  public signUp(email: string): Observable<UserData> {\n    return from(this.arlasIamApi.createUser({ email }, this.options));\n  }\n\n  public verify(userId: string, token: string, password: string): Observable<UserData> {\n    return from(this.arlasIamApi.verifyUser(password, userId, token, this.options));\n  }\n\n  public reset(userId: string, token: string, password: string): Observable<UserData> {\n    return from(this.arlasIamApi.resetUserPassword(password, userId, token, this.options));\n  }\n\n  public forgot(email: string): Observable<ArlasMessage> {\n    return from(this.arlasIamApi.askPasswordReset(email, this.options));\n  }\n\n  public change(oldPassword: string, newPassword: string): Observable<UserData> {\n    return from(this.arlasIamApi.updateUser({ oldPassword: oldPassword, newPassword: newPassword }, this.user.id, this.options));\n  }\n\n  public createPermission(oid: string, permissionDef: PermissionDef): Observable<PermissionData> {\n    return from(this.arlasIamApi.addPermission(permissionDef, oid, this.options));\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AuthConfig, OAuthErrorEvent, OAuthEvent, OAuthService, OAuthStorage, UserInfo } from 'angular-oauth2-oidc';\nimport { BehaviorSubject, Observable, ReplaySubject, combineLatest } from 'rxjs';\nimport { from } from 'rxjs/internal/observable/from';\nimport { filter } from 'rxjs/internal/operators/filter';\nimport { map } from 'rxjs/internal/operators/map';\nimport { AuthentSetting, CONFIG_ID_QUERY_PARAM, NOT_CONFIGURED } from '../../tools/utils';\nimport { ArlasAuthentificationService } from '../arlas-authentification/arlas-authentification.service';\n\n\nexport class CustomMemoryStorage implements OAuthStorage {\n  private storage;\n  private data = new Map<string, string>();\n  public constructor(storage) {\n    this.storage = storage;\n  }\n  private needsExternalStorage(key: string) {\n    // Those three keys must be in external storage to stay logged at refresh with KC, but it's not sensible data\n    return key === 'nonce' || key === 'PKCE_verifier' || key === 'refresh_token';\n  }\n  public getItem(key: string) {\n    if (this.needsExternalStorage(key)) {\n      return this.storage.getItem(key);\n    }\n    return this.data.get(key);\n  }\n  public removeItem(key: string) {\n    if (this.needsExternalStorage(key)) {\n      return this.storage.removeItem(key);\n    }\n    this.data.delete(key);\n  }\n  public setItem(key: string, data: string) {\n    if (this.needsExternalStorage(key)) {\n      return this.storage.setItem(key, data);\n    }\n    this.data.set(key, data);\n  }\n}\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AuthentificationService extends ArlasAuthentificationService {\n\n  public authConfig: AuthConfig;\n  private isAuthenticatedSubject = new BehaviorSubject<boolean>(false);\n  public isAuthenticated = this.isAuthenticatedSubject.asObservable();\n  private isDoneLoadingSubject = new ReplaySubject<boolean>();\n  public isDoneLoading = this.isDoneLoadingSubject.asObservable();\n\n  public silentRefreshErrorSubject: Observable<OAuthEvent>;\n  /**\n   * Publishes `true` if and only if (a) all the asynchronous initial\n   * login calls have completed or errorred, and (b) the user ended up\n   * being authenticated.\n   *\n   * In essence, it combines:\n   *\n   * - the latest known state of whether the user is authorized\n   * - whether the ajax calls for initial log in have all been done\n   */\n  public canActivateProtectedRoutes: Observable<boolean> = combineLatest(\n    this.isAuthenticated,\n    this.isDoneLoading\n  ).pipe(map(values => values.every(b => b)));\n\n  public constructor(\n    private oauthService: OAuthService,\n    private http: HttpClient\n  ) {\n    super();\n    this.silentRefreshErrorSubject = this.oauthService.events.pipe(filter(e => e instanceof OAuthErrorEvent),\n      filter((e: OAuthErrorEvent) => e.type === 'silent_refresh_error' || e.type === 'silent_refresh_timeout'));\n  }\n\n  public initAuthService(): Promise<void> {\n    if (this.authConfigValue) {\n      if (this.authConfigValue.use_authent) {\n        const storage = this.authConfigValue['storage'] === 'localstorage' ? localStorage :\n          this.authConfigValue['storage'] === 'sessionstorage' ? sessionStorage : new CustomMemoryStorage(sessionStorage);\n        if (this.authConfigValue.use_discovery || this.authConfigValue['jwks_endpoint'] === undefined) {\n          this.authConfig = this.getAuthConfig(this.authConfigValue);\n          this.setupAuthService(storage);\n          return this.runInitialLoginSequence(this.authConfigValue.use_discovery, this.authConfigValue.force_connect);\n        } else {\n          // Call jwks endpoint to set in config\n          if (this.authConfigValue['token_endpoint'] && this.authConfigValue['userinfo_endpoint']\n            && this.authConfigValue['login_url'] && this.authConfigValue['jwks_endpoint']) {\n            return this.http.get(this.authConfigValue['jwks_endpoint']).toPromise()\n              .then(jwks => {\n                this.authConfig = this.getAuthConfig(this.authConfigValue, jwks);\n                this.setupAuthService(storage);\n                this.runInitialLoginSequence(false, this.authConfigValue.force_connect);\n              });\n          } else {\n            console.error('Authentication config error : if useDiscovery ' +\n              'is set to false in configuration, tokenEndpoint, userinfoEndpoint, loginUrl and jwksEndpoint must be defined.');\n          }\n        }\n      }\n    }\n  }\n\n  public runInitialLoginSequence(useDiscovery?: boolean, forceConnect?: boolean): Promise<void> {\n    let startToLogin: Promise<any>;\n    if (useDiscovery) {\n      startToLogin = this.oauthService.loadDiscoveryDocument()\n        .then(() => this.oauthService.tryLogin());\n    } else {\n      startToLogin = this.oauthService.tryLogin();\n    }\n    return startToLogin\n      .then(() => {\n        if (this.oauthService.hasValidAccessToken()) {\n          return Promise.resolve();\n        }\n        return this.oauthService.refreshToken()\n          .then(() => Promise.resolve())\n          .catch(result => {\n            if (forceConnect) {\n              this.oauthService.initLoginFlow();\n              console.warn('User interaction is needed to log in, we will wait for the user to manually log in.');\n              return Promise.resolve();\n            }\n            return Promise.reject(result);\n          });\n      })\n      .then(() => {\n        this.isDoneLoadingSubject.next(true);\n      })\n      .catch(() => this.isDoneLoadingSubject.next(true));\n  }\n\n\n  public login() {\n    this.oauthService.initLoginFlow();\n  }\n  public logout() {\n    this.oauthService.logOut();\n  }\n  public refresh() {\n    this.oauthService.refreshToken();\n  }\n  public hasValidAccessToken() {\n    return this.oauthService.hasValidAccessToken();\n  }\n  public hasValidIdToken() {\n    return this.oauthService.hasValidIdToken();\n  }\n  public get accessToken() {\n    return this.oauthService.getAccessToken();\n  }\n  public get identityClaims() {\n    return this.oauthService.getIdentityClaims();\n  }\n  public get idToken() {\n    return this.oauthService.getIdToken();\n  }\n  public get logoutUrl() {\n    return this.oauthService.logoutUrl;\n  }\n\n  public areSettingsValid(authentSetting: AuthentSetting): [boolean, string] {\n    let valid = true;\n    const missingInfo = [];\n    if (authentSetting && authentSetting.use_authent) {\n\n      if (!authentSetting.client_id || authentSetting.client_id === NOT_CONFIGURED) {\n        valid = false;\n        missingInfo.push('- `client_id` must be configured when `auth_mode=openid`');\n      }\n      if (!authentSetting.issuer || authentSetting.issuer === NOT_CONFIGURED) {\n        valid = false;\n        missingInfo.push('- `issuer` must be configured when `auth_mode=openid`');\n      }\n      if (!authentSetting.scope || authentSetting.scope === NOT_CONFIGURED) {\n        valid = false;\n        missingInfo.push('- `scope` must be configured when `auth_mode=openid`');\n      }\n      if (!authentSetting.response_type || authentSetting.response_type === NOT_CONFIGURED) {\n        valid = false;\n        missingInfo.push('- `response_type` must be configured when `auth_mode=openid`');\n      }\n      if (authentSetting.use_discovery === false) {\n        if (!authentSetting.login_url || authentSetting.login_url === NOT_CONFIGURED) {\n          valid = false;\n          missingInfo.push('- `login_url`  must be configured when `use_discovery=false`');\n        }\n        if (!authentSetting.token_endpoint || authentSetting.token_endpoint === NOT_CONFIGURED) {\n          valid = false;\n          missingInfo.push('- `token_endpoint` must be configured when `use_discovery=false`');\n        }\n        if (!authentSetting.jwks_endpoint || authentSetting.jwks_endpoint === NOT_CONFIGURED) {\n          valid = false;\n          missingInfo.push('- `jwks_endpoint` must be configured when `use_discovery=false`');\n        }\n        if (!authentSetting.userinfo_endpoint || authentSetting.userinfo_endpoint === NOT_CONFIGURED) {\n          valid = false;\n          missingInfo.push('- `userinfo_endpoint` must be configured when `use_discovery=false`');\n        }\n      }\n\n    }\n    return [valid, missingInfo.join('\\n')];\n  }\n\n  /**\n   * Return an observable of the user Auth0 profile\n   */\n  public loadUserInfo(): Observable<UserInfo> {\n    return from(<Promise<UserInfo>>this.oauthService.loadUserProfile());\n  }\n\n  private setupAuthService(storage: OAuthStorage) {\n    this.oauthService.setStorage(storage);\n    this.oauthService.configure(this.authConfig);\n    // Useful for debugging:\n    if (this.authConfig['showDebugInformation']) {\n      this.oauthService.events.subscribe(event => {\n        if (event instanceof OAuthErrorEvent) {\n          console.error(event);\n        } else {\n          console.warn(event);\n        }\n      });\n    }\n\n    this.oauthService.events.pipe(filter(e => e.type !== 'session_unchanged'))\n      .subscribe(e => {\n        this.isAuthenticatedSubject.next(this.oauthService.hasValidAccessToken());\n      });\n    this.oauthService.setupAutomaticSilentRefresh();\n  }\n\n\n  private getAuthConfig(authConfigValue: AuthentSetting, jwks?): AuthConfig {\n    let authServiceConfig: AuthConfig;\n    let url = window.location.origin.concat(window.location.pathname);\n    if (url.slice(-1) !== '/') {\n      url = url.concat('/');\n    }\n    if (authConfigValue) {\n      authServiceConfig = {\n        clientId: authConfigValue['client_id'],\n        issuer: authConfigValue['issuer'],\n        scope: authConfigValue['scope'],\n        responseType: authConfigValue['response_type'],\n        redirectUri: (authConfigValue['redirect_uri'] !== undefined && authConfigValue['redirect_uri'] !== NOT_CONFIGURED) ?\n          authConfigValue['redirect_uri'] : url + 'callback',\n        silentRefreshRedirectUri: (authConfigValue['silent_refresh_redirect_uri'] !== undefined\n          && authConfigValue['silent_refresh_redirect_uri'] !== NOT_CONFIGURED) ?\n          authConfigValue['silent_refresh_redirect_uri'] : url + 'silent-refresh.html',\n        timeoutFactor: authConfigValue['timeout_factor'] !== undefined ? authConfigValue['timeout_factor'] : 0.75,\n        sessionChecksEnabled: authConfigValue['session_checks_enabled'] !== undefined ? authConfigValue['session_checks_enabled'] : true,\n        showDebugInformation: authConfigValue['show_debug_information'] !== undefined ? authConfigValue['show_debug_information'] : false,\n        silentRefreshTimeout: authConfigValue['silent_refresh_timeout'] !== undefined ? authConfigValue['silent_refresh_timeout'] : 5000,\n        clearHashAfterLogin: authConfigValue['clear_hash_after_login'] !== undefined ? authConfigValue['clear_hash_after_login'] : false,\n        disableAtHashCheck: authConfigValue['disable_at_hash_check'] !== undefined ? authConfigValue['disable_at_hash_check'] : false,\n        requireHttps: authConfigValue['require_https'] !== undefined ? authConfigValue['require_https'] : true\n      };\n      if (authConfigValue['post_logout_redirect_uri'] !== undefined && authConfigValue['post_logout_redirect_uri'] !== NOT_CONFIGURED) {\n        authServiceConfig.postLogoutRedirectUri = authConfigValue['post_logout_redirect_uri'];\n      }\n      if (authConfigValue['dummy_client_secret'] !== undefined && authConfigValue['dummy_client_secret'] !== NOT_CONFIGURED) {\n        authServiceConfig.dummyClientSecret = authConfigValue['dummy_client_secret'];\n      }\n      if (authConfigValue['custom_query_params'] !== undefined && authConfigValue['custom_query_params'] !== NOT_CONFIGURED) {\n        const customQueryParams = {};\n        authConfigValue['custom_query_params'].forEach(obj => {\n          for (const [key, value] of Object.entries(obj)) {\n            customQueryParams[key] = value;\n          }\n        });\n        authServiceConfig.customQueryParams = customQueryParams;\n      }\n      if (authConfigValue['logout_url'] !== undefined && authConfigValue['logout_url'] !== NOT_CONFIGURED) {\n        authServiceConfig.logoutUrl = authConfigValue['logout_url'];\n      }\n      if (!authConfigValue['use_discovery']) {\n        authServiceConfig.tokenEndpoint = authConfigValue['token_endpoint'];\n        authServiceConfig.userinfoEndpoint = authConfigValue['userinfo_endpoint'];\n        authServiceConfig.loginUrl = authConfigValue['login_url'];\n        if (jwks !== undefined) {\n          authServiceConfig['jwks'] = jwks;\n        }\n      }\n    }\n    // Apend arlas query parameters in the redirectUrl\n    const queryParam =\n      this.getQueryParam(CONFIG_ID_QUERY_PARAM) +\n      this.getQueryParam('filter') +\n      this.getQueryParam('extend') +\n      this.getQueryParam('lg') +\n      this.getQueryParam('rt') +\n      this.getQueryParam('vs') +\n      this.getQueryParam('at') +\n      this.getQueryParam('ao') +\n      this.getQueryParam('to') +\n      this.getQueryParam('ro');\n    if (queryParam !== '') {\n      // remove last &\n      authServiceConfig.redirectUri = authServiceConfig.redirectUri + '?' + encodeURI(queryParam.slice(0, -1));\n    }\n    return authServiceConfig;\n  }\n  private getQueryParam(param) {\n    const value = (new URL(window.location.href)).searchParams.get(param);\n    if (value) {\n      return param.concat('=').concat(value).concat('&');\n    } else {\n      return '';\n    }\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { AuthentificationService } from '../../services/authentification/authentification.service';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\nimport { ArlasError } from '../../tools/errors/error';\nimport { DeniedAccessData } from '../../tools/utils';\n\n@Component({\n  selector: 'arlas-denied-access-dialog',\n  templateUrl: './denied-access-dialog.component.html',\n  styleUrls: ['./denied-access-dialog.component.scss']\n})\nexport class DeniedAccessDialogComponent implements OnInit, OnDestroy {\n\n  private isAuthentActivated: boolean;\n  private authentMode: 'openid' | 'iam';\n\n  public forceAction = false;\n  public arlasError: ArlasError;\n  private actionSubscription: Subscription;\n  public constructor(\n    @Inject(MAT_DIALOG_DATA) data: DeniedAccessData,\n    private settingsService: ArlasSettingsService,\n    private authentService: AuthentificationService,\n    private arlasIamService: ArlasIamService,\n    private dialog: MatDialogRef<DeniedAccessDialogComponent>,\n    private router: Router) {\n    this.arlasError = data.error;\n    this.forceAction = data.forceAction;\n  }\n\n  public ngOnInit() {\n    const authSettings = this.settingsService.getAuthentSettings();\n    this.authentMode = !!authSettings ? authSettings.auth_mode : undefined;\n    this.isAuthentActivated = !!authSettings && !!authSettings.use_authent;\n    if (this.isAuthentActivated && !this.authentMode) {\n      this.authentMode = 'openid';\n    }\n    this.actionSubscription = this.arlasError.actionSeeker$.subscribe({\n      next: (type) => {\n        if (type === 'login') {\n          this.login();\n          this.dialog.close();\n        }\n      }\n    });\n  }\n\n  public ngOnDestroy(): void {\n    if (this.actionSubscription) {\n      this.actionSubscription.unsubscribe();\n    }\n  }\n\n  private login() {\n    if (this.authentMode === 'openid') {\n      this.authentService.login();\n    } else if (this.authentMode === 'iam') {\n      this.checkIamCurrentUrl();\n      this.router.navigate(['login']);\n    }\n  }\n\n\n  private checkIamCurrentUrl() {\n    const url = new URL(window.location.href);\n    const paramOrg = url.searchParams.get('org');\n    const paramConfigId = url.searchParams.get('config_id');\n    // it meanse it's arlas-wui, we will ask to login in arlas-wui ignoring the\n    // login_uri, because after login we can go back to previous state !\n    if (paramOrg && paramConfigId) {\n      this.arlasIamService.declareReloadState(window.location.href);\n    }\n  }\n\n}\n","<div mat-dialog-title class=\"title\">{{arlasError?.title| translate}}</div>\n<mat-dialog-content class=\"content\">\n    <div class=\"errored\">\n        <div><mat-icon class=\"icon\">error</mat-icon></div>\n        <div class=\"state\">{{arlasError?.message | translate:{service: $any(arlasError)?.service | translate} }}</div>\n        <ng-container *ngIf=\"arlasError?.actionType === 'link'; else buttonType\">\n            <div *ngIf=\"arlasError?.showAction\" class=\"action\" (click)=\"arlasError.executeAction()\">{{arlasError?.actionMessage | translate }}</div>\n        </ng-container>\n        <ng-template #buttonType>\n            <button mat-stroked-button *ngIf=\"arlasError?.showAction\" (click)=\"arlasError.executeAction()\">{{arlasError?.actionMessage | translate}}</button>\n        </ng-template>\n    </div>\n</mat-dialog-content>\n<mat-dialog-actions class=\"actions\" *ngIf=\"!forceAction\">\n    <button mat-button [mat-dialog-close]=\"true\">{{'Close' | translate}}</button>\n</mat-dialog-actions>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit, Inject } from '@angular/core';\nimport { AuthentificationService } from '../../services/authentification/authentification.service';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n@Component({\n  selector: 'arlas-tool-reconnect-dialog',\n  templateUrl: './reconnect-dialog.component.html',\n  styleUrls: ['./reconnect-dialog.component.css']\n})\nexport class ReconnectDialogComponent implements OnInit {\n\n  public code: number;\n  public authService;\n  public constructor(private authentService: AuthentificationService,\n    @Inject(MAT_DIALOG_DATA) data) {\n    this.code = data.code;\n  }\n\n  public ngOnInit() {\n  }\n\n  public login() {\n    this.authentService.login();\n  }\n\n  public logout() {\n    this.authentService.logout();\n  }\n}\n","<div *ngIf=\"code === 401\" class=\"code-401\">\n    <h2 mat-dialog-title>{{'Session Expired' | translate}}</h2>\n    <mat-dialog-content>{{'You are no more connected or your session has expired. Would you like to log in again?'| translate}}</mat-dialog-content>\n    <mat-dialog-actions>\n        <!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->\n        <button mat-raised-button class=\"modal_button\" color=\"primary\" (click)=\"login()\" [mat-dialog-close]=\"true\">{{'Connection' | translate}}</button>\n        <button mat-raised-button class=\"modal_button\" (click)=\"logout()\" [mat-dialog-close]=\"true\">{{'Continue' | translate}}</button>\n    </mat-dialog-actions>\n</div>\n\n<div *ngIf=\"code === 403\" class=\"code-403\">\n    <h2 mat-dialog-title>{{'Unauthorized action' | translate}}</h2>\n    <mat-dialog-content>{{'You are not authorized to access this resource.'| translate}}</mat-dialog-content>\n    <mat-dialog-actions>\n        <!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->\n        <button mat-raised-button class=\"modal_button\" color=\"primary\" [mat-dialog-close]=\"true\">{{'OK' | translate}}</button>\n    </mat-dialog-actions>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Observable, Subject } from 'rxjs';\n\n\nexport abstract class ArlasError {\n\n  protected actionSeekerSource: Subject<any> = new Subject();\n  public actionSeeker$: Observable<any> = this.actionSeekerSource.asObservable();\n\n  protected status: number;\n  public title: string;\n  public message: string;\n\n  public showAction: boolean;\n  public actionMessage: string;\n  public actionType: ActionType;\n\n  public constructor(status: number) {\n    this.status = status;\n  }\n\n  public abstract executeAction();\n}\n\nexport type ActionType = 'link' | 'button';\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ArlasError } from './error';\n\n\nexport class BackendError extends ArlasError {\n  private readonly service: string = marker('ARLAS backend services');\n  private readonly hubUrl: string;\n\n  public constructor(status: number, message: string, hubUrl: string, service?: string) {\n    super(status);\n    if (service && service !== '') {\n      this.service = service;\n    }\n    this.hubUrl = hubUrl;\n    this.title = marker('ARLAS encountered an error');\n    if (this.status === 400 || this.status === 404) {\n      this.message = message;\n      this.showAction = true;\n      this.actionMessage = marker('go to arlas hub');\n      this.actionType = 'link';\n    } else if (this.status === 502) {\n      this.message = marker('The connection is lost');\n      this.showAction = false;\n    } else if (this.status === 503) {\n      this.message = marker('The service is unavailable');\n      this.showAction = false;\n    } else {\n      this.message = marker('An error occured in the service');\n      this.showAction = false;\n    }\n  }\n\n  public executeAction() {\n    this.goToArlasHub();\n  }\n\n  private goToArlasHub() {\n    if (this.hubUrl) {\n      window.open(this.hubUrl, '_self');\n    }\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ArlasError } from './error';\n\nexport class SettingsError extends ArlasError {\n  public constructor() {\n    super(0);\n    this.title = marker('ARLAS Front-end Settings error');\n    this.showAction = false;\n    this.actionMessage = '';\n    this.message = marker('Please check if the settings.yaml file is provided and has a valid syntax');\n  }\n\n  public executeAction() {\n  }\n\n}\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { Injectable } from '@angular/core';\nimport { Filter } from 'arlas-api';\nimport { MetricsTableContributor, TreeContributor } from 'arlas-web-contributors';\nimport { CollaborativesearchService } from 'arlas-web-core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasCollaborativesearchService extends CollaborativesearchService {\n  public constructor() {\n    super();\n  }\n\n  public endOfUrlCollaboration = false;\n\n  /**\n   * @param filter The filter query parameter\n   * @param changeOperator Whether to change the operator of the filters applied for TreeContributors\n   * @returns A dictionnary of the current collaborations\n   */\n  public dataModelBuilder(filter, changeOperator = false) {\n    const dataModel = JSON.parse(filter);\n    const defaultCollection = this.defaultCollection;\n    const registry = this.registry;\n    /** transform \"filters\" object to Map */\n    Object.keys(dataModel).forEach(key => {\n      const collab = dataModel['' + key];\n      const contributor = registry.get(key);\n      if (!!collab && !!collab.filters) {\n        collab.filters = new Map(Object.entries(collab.filters));\n      } else if (!!collab && !collab.filters && !!collab.filter) {\n        /** retrocompatibility code to transform an pre-18 collaboration structure to 18 one */\n        collab.filters = new Map();\n        collab.filters.set(defaultCollection, [{...collab.filter}]);\n        delete collab.filter;\n      }\n      if (contributor && contributor instanceof TreeContributor && changeOperator) {\n        collab.filters.forEach((filters: any[], collection: string) => {\n          const exp = filters[0].f[0][0];\n          const op = exp.op;\n          const treecontributor = contributor;\n          if (op !== treecontributor.getFilterOperator()) {\n            if (treecontributor.allowOperatorChange) {\n              treecontributor.setFilterOperator(op, true);\n            } else {\n              delete dataModel['' + key];\n              this.collaborations.delete(key);\n            }\n          }\n        });\n      }\n      if (contributor && contributor instanceof MetricsTableContributor && changeOperator) {\n        collab.filters.forEach((filters: any[], collection: string) => {\n          const exp = filters[0].f[0][0];\n          const op = exp.op;\n          const metrictablecontributor = contributor;\n          if (op !== metrictablecontributor.getFilterOperator()) {\n            metrictablecontributor.setFilterOperator(op, true);\n\n          }\n        });\n      }\n    });\n    return dataModel;\n  }\n\n  public getCollectionsFromFilters(dataModel): Set<string> {\n    const collections = new Set<string>();\n    Object.keys(dataModel).forEach(k => {\n      const collab = dataModel[k];\n      if (collab?.filters) {\n        const filters = collab.filters as Map<string, any>;\n        Array.from(filters.keys()).forEach(c => collections.add(c));\n      }\n    });\n    return collections;\n  }\n\n  public getFilters(collection: string): Array<Filter> {\n    const filters: Filter[] = [];\n    Array.from(this.collaborations.values()).forEach(c => {\n      if (c.filters.get(collection)) {\n        filters.push(...c.filters.get(collection));\n      }\n    });\n\n    return filters;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { Subscription } from 'rxjs';\nimport { DeniedAccessDialogComponent } from '../../components/denied-access-dialog/denied-access-dialog.component';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\nimport { AuthorisationError } from '../../tools/errors/authorisation-error';\nimport { BackendError } from '../../tools/errors/backend-error';\nimport { SettingsError } from '../../tools/errors/settings-error';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ErrorService {\n\n  private arlasErrorsSubscription: Subscription;\n\n  public constructor(\n    private readonly dialog: MatDialog,\n    private readonly settingsService: ArlasSettingsService,\n    private readonly arlasCollaborationService: ArlasCollaborativesearchService,\n    private readonly snackBar: MatSnackBar,\n    private readonly translate: TranslateService\n  ) { }\n\n  public emitAuthorisationError(error: AuthorisationError, forceAction = true) {\n    if (!this.dialog.openDialogs || this.dialog.openDialogs.length === 0) {\n      this.dialog.open(DeniedAccessDialogComponent, {\n        disableClose: true, data: {\n          error,\n          forceAction\n        },\n        panelClass: 'arlas-error-dialog'\n      });\n    }\n  }\n\n  public emitUnavailableService(service: string) {\n    if (!this.dialog.openDialogs || this.dialog.openDialogs.length === 0) {\n      this.dialog.open(DeniedAccessDialogComponent, {\n        disableClose: true, data: {\n          error: new BackendError(502, '', this.settingsService.getArlasHubUrl(),  service),\n          forceAction: true\n        },\n        panelClass: 'arlas-error-dialog'\n      });\n    }\n  }\n\n  public emitSettingsError() {\n    if (!this.dialog.openDialogs || this.dialog.openDialogs.length === 0) {\n      this.dialog.open(DeniedAccessDialogComponent, {\n        disableClose: true, data: {\n          error: new SettingsError(),\n          forceAction: true\n        },\n        panelClass: 'arlas-error-dialog'\n      });\n    }\n  }\n\n  public emitBackendError(status: number, message: string, service: string, mode: 'snackbar' | 'dialog' = 'dialog') {\n    if (mode === 'dialog') {\n      if (!this.dialog.openDialogs || this.dialog.openDialogs.length === 0) {\n        this.dialog.open(DeniedAccessDialogComponent, {\n          disableClose: true, data: {\n            error: new BackendError(status, message, this.settingsService.getArlasHubUrl(), service),\n            forceAction: true\n          },\n          panelClass: 'arlas-error-dialog'\n        });\n      }\n    } else if (mode === 'snackbar') {\n      this.snackBar.open(message, this.translate.instant('Close'), { panelClass: 'arlas-error-snackbar' });\n    }\n  }\n\n  public closeAll() {\n    this.dialog.closeAll();\n    return this.dialog;\n  }\n\n  public listenToArlasCollaborativeErrors() {\n    this.arlasErrorsSubscription = this.arlasCollaborationService.collaborationErrorBus.subscribe((e: any) => {\n      if (e.status >= 400) {\n        this.emitBackendError(e.status, e.message, marker('ARLAS-server'));\n      } else if (!e.status) {\n        // In case ARLAS-server got down during the use of the app\n        this.emitUnavailableService(marker('ARLAS-server'));\n      }\n    });\n  }\n\n  public unlistenToArlasCollaborativeErrors() {\n    this.arlasErrorsSubscription.unsubscribe();\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ArlasError } from './error';\n\n\nexport class AuthorisationError extends ArlasError {\n  public constructor(status: number) {\n    super(status);\n    this.title = marker('Could not access the service');\n    if (this.status === 403) {\n      this.showAction = false;\n      this.actionMessage = '';\n      this.message = marker('acces forbidden');\n    } else if (this.status === 401) {\n      this.message = marker('access not authorized');\n      this.actionType = 'button';\n      this.showAction = true;\n      this.actionMessage = 'login';\n    } else {\n      // could never happen because this error should be thrown only for the statuses 401 & 403\n      this.message = marker('Unknown error');\n      this.showAction = false;\n    }\n  }\n\n  public executeAction() {\n    this.actionSeekerSource.next('login');\n  }\n\n}\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport fetchIntercept from 'fetch-intercept';\nimport { DeniedAccessDialogComponent } from '../../components/denied-access-dialog/denied-access-dialog.component';\nimport { ReconnectDialogComponent } from '../../components/reconnect-dialog/reconnect-dialog.component';\nimport { ErrorService } from '../../services/error/error.service';\nimport { AuthorisationError } from '../../tools/errors/authorisation-error';\nimport { DeniedAccessData } from '../../tools/utils';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FetchInterceptorService {\n\n  public constructor(\n    private readonly arlasSettings: ArlasSettingsService,\n    private readonly dialog: MatDialog,\n    private readonly errorService: ErrorService,\n    private readonly router: Router) { }\n\n  public interceptLogout() {\n    const settings = this.arlasSettings.settings;\n    if (settings.authentication.auth_mode === 'iam') {\n      this.router.navigate(['login']);\n    } else {\n      this.errorService.emitAuthorisationError(new AuthorisationError(401));\n    }\n  }\n\n  public applyInterceptor() {\n    const settings = this.arlasSettings.settings;\n    const useAuthent = !!settings && !!settings.authentication && !!settings.authentication.use_authent;\n    if (useAuthent) {\n      fetchIntercept.register({\n        request: (url, config) =>\n          // Modify the url or config here\n          [url, config]\n        ,\n        requestError: (error) => Promise.reject(error),\n        response: (response) => {\n          // Modify the reponse object\n          let code = response.status;\n          if (code === 401 || code === 403) {\n            // Check if the response comes from a call to a non arlas public uri\n            if (response.headers.has('WWW-Authenticate')) {\n              code = 403;\n            }\n            if (settings.authentication.auth_mode === 'iam') {\n              // If not currently logging in, display error\n              if (this.router.url !== '/login') {\n                this.errorService.emitAuthorisationError(new AuthorisationError(code));\n              }\n            } else if (this.dialog.openDialogs?.length === undefined || this.dialog.openDialogs?.length === 0) {\n              // Propose to reconnect or stay disconnected\n              this.dialog.open(\n                ReconnectDialogComponent,\n                {\n                  disableClose: true,\n                  data: { code },\n                  backdropClass: 'reconnect-dialog',\n                  panelClass: 'reconnect-dialog-panel'\n                });\n            }\n          } else if (code >= 400) {\n            let message: string = marker('An error occured.');\n\n            if (code === 400) {\n              message = marker('An error occured when requesting data.');\n            } else if (code === 404) {\n              message = marker('The requested data does not exist.');\n            }\n            this.errorService.emitBackendError(code, message, marker('ARLAS-server'), 'snackbar');\n          }\n          return response;\n        },\n        // Handle a fetch error\n        responseError: (error) =>  {\n          console.log(error);\n          return Promise.reject(error);\n        }\n      });\n    }\n  }\n\n  public interceptInvalidConfig(dahsboardDeniedData: DeniedAccessData) {\n    this.dialog.open(DeniedAccessDialogComponent, {\n      disableClose: true, data: dahsboardDeniedData,\n      panelClass: 'arlas-error-dialog'\n    });\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { ConfirmedValidator } from '../../tools/utils';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\n\n@Component({\n  selector: 'arlas-tool-change-password',\n  templateUrl: './change-password.component.html',\n  styleUrls: ['./change-password.component.scss']\n})\nexport class ChangePasswordComponent implements OnInit {\n\n  public changeForm: FormGroup;\n  public validated = false;\n  public displayForm = true;\n\n  public constructor(\n    private formBuilder: FormBuilder,\n    private iamService: ArlasIamService,\n  ) { }\n\n  public ngOnInit(): void {\n    this.changeForm = this.formBuilder.group({\n      old_password: ['', [Validators.required]],\n      password: ['', [Validators.required]],\n      confirm_password: ['', [Validators.required]]\n    }, {\n      validator: ConfirmedValidator('password', 'confirm_password')\n    });\n  }\n\n  public submit(): void {\n    this.validated = false;\n    this.iamService.change(this.changeForm.get('old_password').value, this.changeForm.get('password').value).subscribe({\n      next: () => {\n        this.validated = true;\n        this.changeForm.reset();\n        this.displayForm = false;\n      },\n      error: err => {\n        this.changeForm.setErrors({\n          wrong: true\n        });\n        console.error(err);\n      }\n    });\n  }\n\n}\n","<div class=\"change-title\" mat-dialog-title>\n  {{'Change password' | translate}}\n</div>\n<div mat-dialog-content class=\"change-container\">\n  <div class=\"change-form\">\n    <div>\n\n      <form [formGroup]=\"changeForm\">\n        <div class=\"form-content\" *ngIf=\"displayForm\">\n          <mat-form-field appearance=\"outline\">\n            <mat-label>{{'Old password' | translate}}</mat-label>\n            <input matInput type=\"password\" formControlName=\"old_password\">\n          </mat-form-field>\n          <mat-form-field appearance=\"outline\">\n            <mat-label>{{'Password' | translate}}</mat-label>\n            <input matInput type=\"password\" formControlName=\"password\">\n          </mat-form-field>\n          <mat-form-field appearance=\"outline\">\n            <mat-label>{{'Confirm password' | translate}}</mat-label>\n            <input matInput type=\"password\" formControlName=\"confirm_password\">\n          </mat-form-field>\n          <mat-error\n            *ngIf=\"changeForm.get('confirm_password').touched\n        && changeForm.get('confirm_password').invalid && changeForm.hasError('confirmedValidator', 'confirm_password')\"\n            class=\"confirm-error\">\n            {{'Password and Confirm Password must be match' | translate}}\n          </mat-error>\n        </div>\n        <div class=\"validate\" *ngIf=\"validated\">\n          {{'Your password has been changed.' | translate}}\n        </div>\n        <div class=\"error\" *ngIf=\"changeForm.getError('wrong')\">\n          {{ 'Old password does not match' | translate}}\n        </div>\n      </form>\n    </div>\n  </div>\n</div>\n<div mat-dialog-action class=\"change-buttons\">\n  <button type=\"button\" mat-flat-button [mat-dialog-close]=\"true\">{{ 'Close' | translate}}</button>\n  <button *ngIf=\"displayForm\" type=\"button\" (click)=\"submit()\" class=\"change\" [class.active]=\"!this.changeForm.invalid\"\n    [disabled]=\"this.changeForm.invalid\" mat-flat-button color=\"primary\">{{ 'Change' | translate}}</button>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { AuthentificationService } from '../../services/authentification/authentification.service';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\n\n\n@Component({\n  selector: 'arlas-user-infos',\n  templateUrl: './user-infos.component.html',\n  styleUrls: ['./user-infos.component.scss']\n})\nexport class UserInfosComponent implements OnInit {\n\n  private isAuthentActivated: boolean;\n  public authentMode;\n\n  public organisations: Array<string>;\n  public name: string;\n  public email: string;\n  public avatar: string;\n\n  public constructor(\n    private authentService: AuthentificationService,\n    private arlasIamService: ArlasIamService,\n    private settingsService: ArlasSettingsService\n  ) { }\n\n  public ngOnInit() {\n    const authSettings = this.settingsService.getAuthentSettings();\n    this.authentMode = !!authSettings ? authSettings.auth_mode : undefined;\n    this.isAuthentActivated = !!authSettings && !!authSettings.use_authent;\n    if (this.isAuthentActivated && !this.authentMode) {\n      this.authentMode = 'openid';\n    }\n    if (!!authSettings) {\n      if (authSettings.auth_mode === 'iam') {\n        const userInfos = this.arlasIamService.user;\n        if (userInfos.firstName && userInfos.lastName) {\n          this.name = userInfos.firstName + ' ' + userInfos.lastName;\n        }\n        this.email = userInfos.email;\n        this.organisations = userInfos.organisations.map(o => o.displayName);\n        this.avatar = '';\n      } else {\n        this.authentService.loadUserInfo().subscribe(user => {\n          const data = user.info;\n          this.name = data['preferred_username'];\n          this.email = data['email'];\n          this.organisations = [];\n          this.avatar = '';\n        });\n      }\n    }\n  }\n\n  public computeName = (n) => {\n    if (typeof n !== 'string') {\n      return '';\n    }\n    const list = n.split('/');\n    list.shift();\n    return list.join(' ');\n  };\n}\n","<div class=\"user_info-title\">\n    {{ 'User informations' | translate }}\n    @if (avatar) {\n    <img src=\"{{avatar}}\" class=\"user_info-img\">\n    }\n</div>\n\n<div class=\"user_info-list\">\n    @if (name) {\n    <div class=\"user_info\">\n        <i class=\"info\">{{ 'Name' | translate }}</i>\n        <div>{{ name }}</div>\n    </div>\n    }\n    @if (email) {\n    <div class=\"user_info\">\n        <i class=\"info\">{{ 'Email' | translate }}</i>\n        <div>{{ email }}</div>\n    </div>\n    }\n    @if (authentMode === 'iam') {\n    <div class=\"user_info\">\n        <i class=\"info\">{{ 'Organisations' | translate }}</i>\n        <div class=\"organisations\">\n            @for (o of organisations; track o) {\n            <div> {{organisations.length > 1 ? '-' : ''}} {{ o }}</div>\n            }\n        </div>\n    </div>\n    }\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Input } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n  selector: 'arlas-about',\n  templateUrl: './about.component.html',\n  styleUrls: ['./about.component.css']\n})\nexport class AboutComponent {\n\n  /**\n   * @Input : Angular\n   * @description Path to the markdown file containing the information to display\n   */\n  @Input() public pathToMd: string;\n\n  /**\n   * @Input : Angular\n   * @description Extra text data displayed before the markdown\n   */\n  @Input() public extraTextData: string;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display the About Component as a link\n   */\n  @Input() public displayLink = false;\n\n  /**\n   * @Input : Angular\n   * @description Name of the WUI in which the bar is used\n   */\n  @Input() public wuiName: string;\n  public dialogRef: MatDialogRef<AboutDialogComponent>;\n\n  public constructor(public dialog: MatDialog) { }\n\n  public openDialog() {\n    this.dialogRef = this.dialog.open(AboutDialogComponent, { panelClass: 'arlas-about-dialog' });\n    this.dialogRef.componentInstance.pathToMd = this.pathToMd;\n    this.dialogRef.componentInstance.extraTextData = this.extraTextData;\n  }\n}\n\n@Component({\n  selector: 'arlas-about-dialog',\n  templateUrl: './about-dialog.component.html',\n  styleUrls: ['./about-dialog.component.css']\n})\nexport class AboutDialogComponent {\n\n  public pathToMd: string;\n  public extraTextData: string;\n  public constructor(public dialogRef: MatDialogRef<AboutDialogComponent>) {\n\n  }\n}\n\n","<span *ngIf=\"displayLink\" (click)=\"openDialog()\">About {{ wuiName }}</span>\n","<markdown [data]=\"extraTextData\"></markdown>\n<markdown [src]=\"pathToMd\"></markdown>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\nimport { finalize } from 'rxjs';\nimport { LinkSettings } from '../../../../services/startup/startup.service';\nimport { GET_OPTIONS } from '../../../../tools/utils';\n\n@Component({\n  selector: 'arlas-link',\n  templateUrl: './link.component.html',\n  styleUrls: ['./link.component.scss']\n})\nexport class LinkComponent implements OnInit {\n\n  @Input() public link: LinkSettings;\n  @Output() public hidden$: EventEmitter<void> = new EventEmitter();\n  @Output() public onCheck$: EventEmitter<void> = new EventEmitter();\n  @Output() public onClick$: EventEmitter<void> = new EventEmitter();\n\n  public show = false;\n  public constructor(\n    private http: HttpClient,\n    @Inject(GET_OPTIONS) private getOptions,\n  ) { }\n\n  public ngOnInit(): void {\n    const options = this.getOptions();\n    if (this.link.check_url_response_type) {\n      options.responseType = this.link.check_url_response_type;\n    }\n    this.http.get(this.link.check_url, options)\n      .pipe(finalize(() => this.onCheck$.emit()))\n      .subscribe({\n        next: () => {\n          this.show = true;\n        },\n        error: () => {\n          this.show = false;\n          this.hidden$.emit();\n        }\n      });\n  }\n\n  public navigateTo(url) {\n    if (url) {\n      window.open(url);\n    }\n    this.onClick$.emit();\n  }\n}\n","<div class=\"wrapper\" *ngIf=\"show\" (click)=\"navigateTo(link?.url)\" [matTooltip]=\"link?.tooltip\">\n    <div class=\"circle\">\n        <mat-icon>{{link.icon}}</mat-icon>\n    </div>\n    <div class=\"name\">{{link.name}}</div>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, EventEmitter, HostListener, OnInit, Output } from '@angular/core';\nimport { ArlasSettingsService } from '../../../services/settings/arlas.settings.service';\nimport { LinkSettings } from '../../../services/startup/startup.service';\n\n@Component({\n  selector: 'arlas-links',\n  templateUrl: './links.component.html',\n  styleUrls: ['./links.component.scss']\n})\nexport class LinksComponent implements OnInit {\n\n  @HostListener('click')\n  public clickInside($event) {\n    $event.stopPropagation();\n  }\n\n  @HostListener('document:click')\n  public clickOutside() {\n    this.close$.emit();\n  }\n\n  @Output() public close$: EventEmitter<void> = new EventEmitter();\n\n  public links: LinkSettings[];\n  public nbHidden = 0;\n  private nbChecked = 0;\n  public showSpinner = true;\n\n  public constructor(private settingsService: ArlasSettingsService) {\n    this.links = this.settingsService.getLinksSettings();\n  }\n\n  public ngOnInit(): void {\n    this.showSpinner = true;\n  }\n\n  public onLinkChecked() {\n    this.nbChecked++;\n    this.showSpinner = !this.links || (this.nbChecked !== this.links.length);\n  }\n\n  public onLinkHidden() {\n    this.nbHidden++;\n  }\n\n  public onLinkClicked() {\n    this.close$.emit();\n  }\n}\n","<div class=\"wrapper\" (click)=\"$event.stopPropagation()\">\n    <ng-container *ngFor=\"let link of links; count as count\">\n        <arlas-link  [link]=\"link\" (hidden$)=\"onLinkHidden()\" (onCheck$)=\"onLinkChecked()\" (onClick$)=\"onLinkClicked()\"></arlas-link>\n    </ng-container>\n    <ng-container *ngIf=\"nbHidden === links?.length\">\n        <div class=\"no-link\">\n            {{'no access to apps' | translate}}\n        </div>\n    </ng-container>\n    <ng-container *ngIf=\"showSpinner\">\n        <div class=\"no-link\">\n            <mat-spinner [diameter]=\"20\"></mat-spinner>\n        </div>\n    </ng-container>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { finalize } from 'rxjs';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { AuthentificationService } from '../../services/authentification/authentification.service';\nimport { FetchInterceptorService } from '../../services/interceptor/fetch-interceptor.service';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\nimport { ChangePasswordComponent } from '../change-password/change-password.component';\nimport { UserInfosComponent } from '../user-infos/user-infos.component';\nimport { AboutComponent } from './about/about.component';\nimport { MatDialog } from '@angular/material/dialog';\n\n@Component({\n  selector: 'arlas-top-menu',\n  templateUrl: './top-menu.component.html',\n  styleUrls: ['./top-menu.component.scss']\n})\nexport class TopMenuComponent implements OnInit {\n\n  public connected: boolean;\n  public isAuthentActivated: boolean;\n  public authentMode: 'openid' | 'iam';\n\n  public name: string;\n  public avatar: string;\n  public initials: string;\n  public aboutFile: string;\n  public extraAboutText: string;\n\n  /**\n   * @Input : Angular\n   * @description Version of the WUI to display as info\n   */\n  @Input() public version: string;\n\n  /**\n   * @Input : Angular\n   * @description Name of the WUI in which the bar is used\n   */\n  @Input() public wuiName: string;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display the \"About\" button\n   */\n  @Input() public showAboutButton = true;\n\n  public showLinks = false;\n  public linksEnabled = false;\n  @ViewChild('about', { static: false }) private aboutcomponent: AboutComponent;\n\n  public constructor(\n    private authentService: AuthentificationService,\n    private arlasIamService: ArlasIamService,\n    private translate: TranslateService,\n    private router: Router,\n    private dialog: MatDialog,\n    private settingsService: ArlasSettingsService,\n    private fetchInterceptor: FetchInterceptorService\n  ) {\n    this.extraAboutText = this.translate.instant('extraAboutText') === 'extraAboutText' ? '' : this.translate.instant('extraAboutText');\n    this.aboutFile = 'assets/about/about_' + this.translate.currentLang + '.md?' + Date.now() + '.md';\n  }\n\n  public ngOnInit(): void {\n    const links = this.settingsService.getLinksSettings();\n    this.linksEnabled = !!links && links.length > 0;\n    const authSettings = this.settingsService.getAuthentSettings();\n    this.authentMode = !!authSettings ? authSettings.auth_mode : undefined;\n    this.isAuthentActivated = !!authSettings && !!authSettings.use_authent;\n    if (this.isAuthentActivated && !this.authentMode) {\n      this.authentMode = 'openid';\n    }\n    if (this.authentMode === 'openid') {\n      const claims = this.authentService.identityClaims as any;\n      this.authentService.canActivateProtectedRoutes.subscribe(isConnected => {\n        this.connected = isConnected;\n        if (isConnected) {\n          this.name = claims.preferred_username;\n          this.avatar = claims.picture;\n          this.initials = this.getInitials(this.name);\n        } else {\n          this.name = '';\n          this.avatar = '';\n        }\n      });\n    } else if (this.authentMode === 'iam') {\n      this.connected = false;\n      this.arlasIamService.tokenRefreshed$.subscribe({\n        next: (data) => {\n          if (!!data) {\n            this.connected = true;\n            this.name = data?.user.email;\n            this.initials = this.getInitials(this.name);\n          } else {\n            this.connected = false;\n            this.name = '';\n            this.initials = '';\n          }\n        },\n        error: () => {\n          this.connected = false;\n        }\n      });\n    }\n\n    /** This is a method to listen to logging out event from other tabs of the same domain. */\n    window.addEventListener('storage', (event) => {\n      if (event.key === 'arlas-logout-event' && this.connected) {\n        if (this.authentMode === 'openid') {\n          this.authentService.logout();\n        } else if (this.authentMode === 'iam') {\n          this.arlasIamService.logoutWithoutRedirection$().pipe(\n            finalize(() => this.fetchInterceptor.interceptLogout())\n          ).subscribe();\n        }\n      }\n    });\n  }\n\n  public connect() {\n    const authSettings = this.settingsService.getAuthentSettings();\n    if (this.authentMode === 'openid') {\n      if (this.connected) {\n        this.authentService.logout();\n      } else {\n        this.authentService.login();\n      }\n    } else if (this.authentMode === 'iam') {\n      if (this.connected) {\n        if (authSettings && authSettings.force_connect) {\n          this.arlasIamService.logout(['/login']);\n        } else {\n          this.arlasIamService.logout(['/']);\n        }\n      } else {\n        this.router.navigate(['login']);\n      }\n    }\n  }\n\n  public changePassword() {\n    this.dialog.open(ChangePasswordComponent, { panelClass: 'change-dialog' });\n  }\n\n  public displayAbout() {\n    this.aboutcomponent.openDialog();\n  }\n\n  public getUserInfos() {\n    this.dialog.open(UserInfosComponent, { panelClass: 'arlas-user-info-dialog' });\n  }\n\n  public getInitials(name) {\n    if (!!name && name !== '') {\n      return name[0];\n    } else {\n      return '';\n    }\n  }\n}\n","<mat-toolbar class=\"top-menu\">\n  <!-- Insert on the left -->\n  <ng-content select=\"[left-menu]\"></ng-content>\n  <span class=\"spacer\"></span>\n\n  <!-- Insert in the middle -->\n  <ng-content select=\"[middle-menu]\"></ng-content>\n\n  <span class=\"spacer\"></span>\n  <!-- Insert on the right -->\n  <ng-content select=\"[right-menu]\"></ng-content>\n\n  <!-- Information -->\n  <button mat-icon-button *ngIf=\"showAboutButton\" matTooltip=\"{{ 'About' | translate }} {{ wuiName }} {{ version }}\"\n    (click)=\"displayAbout()\">\n    <mat-icon class=\"icon\">info_outline</mat-icon>\n  </button>\n\n  <!-- Page Switcher-->\n  <button *ngIf=\"linksEnabled\" mat-icon-button matTooltip=\"{{ 'Go to' | translate }}\"\n    (click)=\"showLinks = !showLinks; $event.stopPropagation()\">\n    <mat-icon class=\"icon\">apps</mat-icon>\n  </button>\n\n  <!-- User info and login -->\n  <button mat-icon-button matTooltip=\"{{'My account' | translate}}\" *ngIf=\"connected && isAuthentActivated\"\n    [matMenuTriggerFor]=\"actionMenu\" class=\"action-menu-button\">\n    <img *ngIf=\"authentMode !== 'iam' && !!avatar; else withoutAvatar\" src=\"{{avatar}}\" class=\"user_avatar\">\n    <ng-template #withoutAvatar>\n      <div class=\"avatar\">\n        {{initials | uppercase}}\n      </div>\n    </ng-template>\n  </button>\n  <mat-menu #actionMenu=\"matMenu\">\n    <button mat-menu-item (click)=\"getUserInfos()\">\n      <mat-icon>person</mat-icon>\n      <span>{{ 'Your profile' | translate }}</span>\n    </button>\n    <button mat-menu-item *ngIf=\"authentMode === 'iam'\" (click)=\"changePassword()\">\n      <mat-icon>password</mat-icon>\n      <span>{{ 'Change my password' | translate }}</span>\n    </button>\n    <button mat-menu-item (click)=\"connect()\">\n      <mat-icon>logout</mat-icon>\n      <span>{{ 'Logout' | translate }}</span>\n    </button>\n  </mat-menu>\n\n  <button mat-icon-button *ngIf=\"!connected && isAuthentActivated\" matTooltip=\"{{'Log In' | translate}}\"\n    (click)=\"connect()\">\n    <mat-icon class=\"icon\">account_circle</mat-icon>\n  </button>\n\n</mat-toolbar>\n\n<arlas-about #about [pathToMd]=\"aboutFile\" [extraTextData]=\"extraAboutText\"></arlas-about>\n<arlas-links *ngIf=\"linksEnabled && showLinks\" (close$)=\"showLinks = false\"></arlas-links>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'arlas-filter-shortcut-chip',\n  templateUrl: './chip.component.html',\n  styleUrls: ['./chip.component.scss']\n})\nexport class FilterShortcutChipComponent {\n  @Input() public label: string;\n  @Input() public hide = false;\n  @Input() public shortenValues = true;\n  @Output() public clearEmitter: EventEmitter<string> = new EventEmitter();\n\n  public clear(event: Event) {\n    event.stopPropagation();\n    if (!this.hide) {\n      this.clearEmitter.emit(this.label.replace('≠', ''));\n    }\n  }\n\n}\n","<div class=\"container\" [class.hide]=\"hide\" [class.container--long-text]=\"!shortenValues\" (click)=\"$event.stopPropagation()\">\n    <div class=\"label\" [class.label--no-wrap]=\"!shortenValues\">{{ label | translate }}</div>\n    <mat-icon class=\"clear\" (click)=\"clear($event)\">clear</mat-icon>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from '@danielmoncada/angular-datetime-picker';\nimport { MomentDateTimeAdapter } from '@danielmoncada/angular-datetime-picker-moment-adapter';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Expression, Filter } from 'arlas-api';\nimport { HistogramParams, HistogramUtils } from 'arlas-d3';\nimport { ChartType, DataType, numberToShortValue } from 'arlas-web-components';\nimport { HistogramContributor } from 'arlas-web-contributors';\nimport { Collaboration } from 'arlas-web-core';\nimport * as _moment from 'moment';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ArlasCollaborativesearchService } from '../../../services/collaborative-search/arlas.collaborative-search.service';\n\nconst moment = (_moment as any).default ? (_moment as any).default : _moment;\n\n@Component({\n  selector: 'arlas-shortcut-filters-handler',\n  templateUrl: './filters-handler.component.html',\n  styleUrls: ['./filters-handler.component.scss'],\n  animations: [\n    trigger('fadeInOut', [\n      state('void', style({ opacity: 0 })), // Initial state when element is not present\n      state('*', style({ opacity: 1 })), // Final state when element is present\n      transition(':enter', animate('500ms ease-in-out')), // Animation duration and easing\n    ])\n  ],\n  providers: [\n    { provide: DateTimeAdapter, useClass: MomentDateTimeAdapter, deps: [OWL_DATE_TIME_LOCALE] }\n  ]\n})\nexport class ShortcutFiltersHandlerComponent implements OnInit, OnDestroy {\n  /**\n   * @Input : Angular\n   * @description The contributor Id of the shortcut\n   */\n  @Input() public contributorId: string;\n\n  /**\n   * @Input : Angular\n   * @description The type of widget represented by the shortcut. can be 'powerbars' or 'histogram'.\n   */\n  @Input() public widgetType: string;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display the value of the first filter. It will allow the user to only see the values by clicking the +X chip.\n   */\n  @Input() public displayFilterFirstValue: boolean;\n\n  /**\n   * @Input : Angular\n   * @description The unit of the histogram values\n   */\n  @Input() public histogramUnit: string;\n\n  /**\n   * @Input : Angular\n   * @description The type of data of the histogram. It can have the same values as a non-shortcut histogram.\n   */\n  @Input() public histogramDatatype: string;\n\n  /**\n   * @Input : Angular\n   * @description The format to use for the date ticks of the shortcut's histogram\n   */\n  @Input() public ticksDateFormat: string;\n\n  public histogramParams: HistogramParams = new HistogramParams();\n\n  public showMore = false;\n  public moreClicked = false;\n\n  public labels: string[];\n  public rawLabels: string[];\n  public firstLabel: string | undefined;\n\n  private _onDestroy$ = new Subject<boolean>();\n\n  public constructor(private collaborativeSearchService: ArlasCollaborativesearchService,\n    private translate: TranslateService) { }\n\n  public ngOnInit(): void {\n    // Check if collaboration already occured (useful when moving the shortcut from a list to another)\n    const collaboration = this.collaborativeSearchService.getCollaboration(this.contributorId);\n    this.checkCollaboration(collaboration);\n\n    // Check if collaboration occurs during the lifetime of the shortcut\n    this.collaborativeSearchService.collaborationBus\n      .pipe(takeUntil(this._onDestroy$))\n      .subscribe(collaborationBus => {\n        const collaboration = this.collaborativeSearchService.getCollaboration(this.contributorId);\n        this.checkCollaboration(collaboration);\n      });\n\n    this.setHistogramParams();\n  }\n\n  public ngOnDestroy() {\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n\n  public showFilters(clickEvent: Event) {\n    clickEvent.stopPropagation();\n    this.moreClicked = !this.moreClicked;\n  }\n\n  public clearFilter(label: string, idx: number) {\n    this.labels = this.labels.map(l => l.replace('≠', '')).filter(l => l !== label);\n    this.rawLabels.splice(idx, 1);\n\n    if (this.labels.length > 0) {\n      this.firstLabel = this.labels[0];\n      if (this.widgetType === 'powerbars' || this.widgetType === 'metricstable') {\n        this.showMore = !this.displayFilterFirstValue || this.labels.length > 1;\n        /** hide list when there is one label left */\n        if (this.displayFilterFirstValue && this.labels.length <= 1) {\n          this.moreClicked = false;\n        }\n      } else {\n        this.showMore = !this.displayFilterFirstValue;\n      }\n\n      const collaboration = this.collaborativeSearchService.getCollaboration(this.contributorId);\n      if (collaboration) {\n        const filters: Filter[] = collaboration.filters.values().next().value;\n        if (filters && filters.length > 0) {\n          const filterF: Expression[] = filters[0].f[0];\n          if (filterF && filterF.length > 0) {\n            const expression = filterF[0];\n            expression.value = this.rawLabels.join(',');\n            this.collaborativeSearchService.setFilter(this.contributorId, collaboration);\n          }\n        }\n      }\n    } else {\n      this.firstLabel = undefined;\n      this.labels = [];\n      this.collaborativeSearchService.removeFilter(this.contributorId);\n    }\n  }\n\n  private checkCollaboration(collaboration: Collaboration): void {\n    this.firstLabel = undefined;\n    this.labels = [];\n\n    if (collaboration) {\n      const filters: Filter[] = collaboration.filters.values().next().value;\n      if (filters && filters.length > 0) {\n        const filterF: Expression[] = filters[0].f[0];\n        if (filterF && filterF.length > 0) {\n          const expression = filterF[0];\n          this.setLabels(this.widgetType, expression);\n        }\n      }\n    } else {\n      this.showMore = false;\n      this.moreClicked = false;\n    }\n  }\n\n  private setLabels(widgetType: string, expression: Expression) {\n    this.rawLabels = expression.value.split(',');\n\n    if (widgetType === 'powerbars' || this.widgetType === 'metricstable') {\n      this.labels = expression.value.split(',');\n      if (expression.op === Expression.OpEnum.Ne) {\n        this.labels = this.labels.map(l => '≠' + l);\n      }\n      if (this.labels && this.labels.length > 0) {\n        this.firstLabel = this.labels[0];\n        this.showMore = !this.displayFilterFirstValue || this.labels.length > 1;\n      }\n    } else {\n      expression.value.split(',')\n        .map(interval => interval.replace('[', '').replace(']', ''))\n        .forEach(interval => {\n          const startEnd = interval.split('<');\n          if (startEnd.length !== 2) {\n            // Should never happen since ARLAS builds the intervals properly\n            console.error('Interval is badly constructed: ' + startEnd);\n          } else {\n            this.labels.push(this.histogramSelectionToLabel(startEnd));\n          }\n        });\n\n      this.showMore = !this.displayFilterFirstValue;\n    }\n\n    if (this.labels && this.labels.length > 0) {\n      this.firstLabel = this.labels[0];\n    }\n  }\n\n  private setHistogramParams() {\n    const contributor = this.collaborativeSearchService.registry.get(this.contributorId) as HistogramContributor;\n\n    this.histogramParams.id = this.contributorId;\n    this.histogramParams.chartType = ChartType.bars;\n    this.histogramParams.useUtc = contributor.useUtc;\n    this.histogramParams.dataType = this.histogramDatatype === 'time' ? DataType.time : DataType.numeric;\n    this.histogramParams.valuesDateFormat = this.ticksDateFormat;\n  }\n\n  private histogramSelectionToLabel(startEnd: Array<string>) {\n    let label: string;\n    if (this.histogramDatatype === 'time') {\n      // Truncate the hours since this is a shortcut\n      const start = HistogramUtils.toString(new Date(+startEnd[0]), this.histogramParams).slice(0, -6);\n      const end = HistogramUtils.toString(new Date(+startEnd[1]), this.histogramParams).slice(0, -6);\n\n      label = `${start} - ${end}`;\n    } else {\n      // If the number is small, truncate it to only have the first two digits\n      const start = numberToShortValue(+startEnd[0], 2);\n      const end = numberToShortValue(+startEnd[1], 2);\n\n      label = `${start} ${this.translate.instant('to')} ${end}`;\n      if (this.histogramUnit) {\n        label += ' ' + this.histogramUnit;\n      }\n    }\n\n    return label;\n  }\n\n}\n","<div class=\"container\">\n    <arlas-filter-shortcut-chip *ngIf=\"!!firstLabel && displayFilterFirstValue\"\n        [@fadeInOut]\n        [hide]=\"moreClicked\"\n        [label]=\"firstLabel\"\n        [shortenValues]=\"!histogramDatatype\"\n        (clearEmitter)=\"clearFilter($event, 0)\"></arlas-filter-shortcut-chip>\n    <div class=\"more\" [@fadeInOut] [class.more--expanded]=\"moreClicked\" *ngIf=\"showMore\" (click)=\"showFilters($event)\">\n        <span [@fadeInOut] *ngIf=\"!moreClicked\">{{displayFilterFirstValue ? +(labels?.length - 1) : labels?.length}}</span>\n        <mat-icon [@fadeInOut] class=\"collapse\" *ngIf=\"moreClicked\">expand_less</mat-icon>\n    </div>\n    <div class=\"list\" [@fadeInOut] *ngIf=\"moreClicked\">\n        <div *ngFor=\"let label of labels; let idx = idx\" class=\"filter\">\n            <arlas-filter-shortcut-chip\n                [label]=\"label\"\n                [shortenValues]=\"!histogramDatatype\"\n                (clearEmitter)=\"clearFilter($event, idx)\"\n                ></arlas-filter-shortcut-chip>\n        </div>\n    </div>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit, Input } from '@angular/core';\nimport { SpinnerOptions } from '../../tools/utils';\n\nexport const DEFAULT_SPINNER_OPTIONS: SpinnerOptions = {\n  color: 'primary',\n  diameter: 100,\n  strokeWidth: 5\n};\n\n@Component({\n  selector: 'arlas-tool-progress-spinner',\n  templateUrl: './progress-spinner.component.html',\n  styleUrls: ['./progress-spinner.component.css']\n})\nexport class ProgressSpinnerComponent implements OnInit {\n\n  @Input() public color = DEFAULT_SPINNER_OPTIONS.color;\n  @Input() public diameter = DEFAULT_SPINNER_OPTIONS.diameter;\n  @Input() public strokeWidth = DEFAULT_SPINNER_OPTIONS.strokeWidth;\n\n  public constructor() { }\n\n  public ngOnInit(): void {\n  }\n\n}\n","<mat-progress-spinner class=\"spinner\" [color]=\"color\" [diameter]=\"diameter\"\n    mode=\"indeterminate\" [strokeWidth]=\"strokeWidth\">\n</mat-progress-spinner>\n<div class=\"overlay\"></div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ArlasError } from './error';\n\n\nexport class DashboardError extends ArlasError {\n\n  private hubUrl: string;\n\n  public constructor(status: number, hubUrl: string) {\n    super(status);\n    this.hubUrl = hubUrl;\n    this.title = marker('Could not access the dashboard');\n    this.actionType = 'link';\n    if (this.status === 403) {\n      this.showAction = !!this.hubUrl;\n      this.actionMessage = marker('go to arlas hub');\n      this.message = marker('dashboard access forbidden');\n    } else if (this.status === 401) {\n      this.showAction = !!this.hubUrl;\n      this.actionMessage = marker('go to arlas hub');\n      this.message = marker('dashboard access not authorized');\n    } else if (this.status === 404) {\n      this.showAction = !!this.hubUrl;\n      this.actionMessage = marker('go to arlas hub');\n      this.message = marker('dashboard does not exist');\n    } else {\n      this.message = marker('The connection to dashbords is lost');\n      this.showAction = false;\n    }\n  }\n\n  public executeAction() {\n    this.goToArlasHub();\n  }\n\n  private goToArlasHub() {\n    if (!!this.hubUrl) {\n      window.open(this.hubUrl, '_self');\n    }\n  }\n}\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Aggregation } from 'arlas-api';\nimport { FieldsConfiguration, LayerSourceConfig } from 'arlas-web-contributors';\nimport { VisualisationSetConfig } from 'arlas-map';\n\nexport class ArlasConfigurationUpdaterService {\n\n  public constructor() {\n  }\n\n  /**\n   * Parses the configuration and returns a list of contributors that should be removed from the config.\n   * @param data configuration object\n   * @param availableFieldsPerCollection list of fields available for exploration for each collection.\n   * @returns configuration object\n   */\n  public getContributorsToRemove(data, availableFieldsPerCollection: Map<string, Set<string>>): Set<string> {\n    const contributorsToRemove = new Set<string>();\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      /** the conf is validated before; therefore, `arlas.web.contributors` is defined */\n      data.arlas.web.contributors.forEach(contributor => {\n        /** Remove contributors which collection is not available. */\n        if (contributor.collection && !availableFieldsPerCollection.has(contributor.collection)) {\n          contributorsToRemove.add(contributor.identifier);\n        }\n        /** check if aggregation model has a non-available field (in bucket aggregation AND metrics) */\n        if (contributor.aggregationmodels) {\n          if (contributor.collection && availableFieldsPerCollection.has(contributor.collection)) {\n            const availableFields = availableFieldsPerCollection.get(contributor.collection);\n            contributor.aggregationmodels.forEach((am: Aggregation) => {\n              if (!availableFields.has(am.field)) {\n                contributorsToRemove.add(contributor.identifier);\n              }\n              if (am.metrics) {\n                am.metrics.forEach(m => {\n                  if (!availableFields.has(m.collect_field)) {\n                    contributorsToRemove.add(contributor.identifier);\n                  }\n                });\n              }\n            });\n          } else {\n            /** The contributor.collection is always defined. However this code is added to secure the case where it could happen.\n             * In that case, the contributor is removed.\n             */\n            contributorsToRemove.add(contributor.identifier);\n          }\n        }\n        /** Compute contributors have metrics */\n        if (contributor.type === 'compute' && contributor.metrics) {\n          if (contributor.collection && availableFieldsPerCollection.has(contributor.collection)) {\n            const availableFields = availableFieldsPerCollection.get(contributor.collection);\n            if (contributor.metrics.find(m => !availableFields.has(m.field) && m.metric !== 'count')) {\n              contributorsToRemove.add(contributor.identifier);\n            }\n          } else {\n            contributorsToRemove.add(contributor.identifier);\n          }\n        }\n        /** swimlanes contributors have a specific structure for `aggregationmodels`  */\n        if (contributor.type === 'swimlane' && contributor.swimlanes) {\n          if (contributor.collection && availableFieldsPerCollection.has(contributor.collection)) {\n            const availableFields = availableFieldsPerCollection.get(contributor.collection);\n            contributor.swimlanes.forEach(swimlane => {\n              swimlane.aggregationmodels.forEach((am: Aggregation) => {\n                if (!availableFields.has(am.field)) {\n                  contributorsToRemove.add(contributor.identifier);\n                }\n                if (am.metrics) {\n                  am.metrics.forEach(m => {\n                    if (!availableFields.has(m.collect_field)) {\n                      contributorsToRemove.add(contributor.identifier);\n                    }\n                  });\n                }\n              });\n              /** swimlanes don't have xAxisField AND termField anymore */\n            });\n          } else {\n            contributorsToRemove.add(contributor.identifier);\n          }\n        }\n\n        /** chipssearch contributor */\n        if ((contributor.type === 'chipssearch' || contributor.type === 'search') && contributor.search_field) {\n          if (contributor.collection && availableFieldsPerCollection.has(contributor.collection)) {\n            const availableFields = availableFieldsPerCollection.get(contributor.collection);\n            if (!availableFields.has(contributor.search_field)) {\n              contributorsToRemove.add(contributor.identifier);\n            }\n          } else {\n            contributorsToRemove.add(contributor.identifier);\n          }\n        }\n\n        /** resultlist contributor */\n        if (contributor.type === 'resultlist' && contributor.fieldsConfiguration) {\n          if (contributor.collection && availableFieldsPerCollection.has(contributor.collection)) {\n            const availableFields = availableFieldsPerCollection.get(contributor.collection);\n            if (contributor.fieldsConfiguration.idFieldName\n              && !availableFields.has(contributor.fieldsConfiguration.idFieldName)) {\n              contributorsToRemove.add(contributor.identifier);\n            }\n          } else {\n            contributorsToRemove.add(contributor.identifier);\n          }\n        }\n      });\n      /** remove detailed contributors */\n      data.arlas.web.contributors.filter(contributor => contributor.annexedContributorId).forEach(contributor => {\n        if (contributorsToRemove.has(contributor.annexedContributorId)) {\n          contributorsToRemove.add(contributor.identifier);\n        }\n      });\n      /** remove shortcuts contributors */\n      data.arlas.web.contributors.filter(contributor => contributor.linkedContributorId).forEach(contributor => {\n        if (contributorsToRemove.has(contributor.linkedContributorId)) {\n          contributorsToRemove.add(contributor.identifier);\n        }\n      });\n    }\n    return contributorsToRemove;\n  }\n\n  /**\n   * Removes contributors that have non-available fields\n   * @param data configuration objects\n   * @param contributorsToRemove list of contributors identifiers to remove from the configuration\n   * @returns configuration object\n   */\n  public removeContributors(data, contributorsToRemove: Set<string>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      data.arlas.web.contributors = data.arlas.web.contributors.filter(contributor =>\n        !contributorsToRemove.has(contributor.identifier));\n    }\n    return data;\n  }\n\n  /**\n   * Removes widgets that are associated with removed contributors\n   * @param data\n   * @param contributorsToRemove\n   * @returns configuration object\n   */\n  public removeWidgets(data, contributorsToRemove: Set<string>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.analytics) {\n      data.arlas.web.analytics.forEach(widget => {\n        widget.components = widget.components.filter(c => !contributorsToRemove.has(c.contributorId));\n      });\n      data.arlas.web.analytics = data.arlas.web.analytics.filter(widget => widget.components.length > 0);\n    }\n    return data;\n  }\n\n  /**\n   * Removes timelines that are associated with removed timeline contributors\n   * @param data\n   * @param contributorsToRemove\n   * @returns configuration object\n   */\n  public removeTimelines(data, contributorsToRemove: Set<string>): any {\n    if (data && data.arlas && data.arlas.web) {\n      const components = data.arlas.web.components;\n      if (components) {\n        if (components.timeline) {\n          if (contributorsToRemove.has(components.timeline.contributorId)) {\n            delete components.timeline;\n          }\n        }\n        if (components.detailedTimeline) {\n          if (contributorsToRemove.has(components.detailedTimeline.contributorId)) {\n            delete components.detailedTimeline;\n          }\n        }\n      }\n\n    }\n    return data;\n  }\n\n  /**\n   * Add the default collection as the contributor's collection if not present\n   * @param data configuration object\n   * @returns configuration object\n   */\n  public addCollectionIfMissing(data) {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      data.arlas.web.contributors.forEach(contributor => {\n        if (!contributor.collection) {\n          contributor.collection = data.arlas.server.collection.name;\n        }\n      });\n    }\n    return data;\n  }\n\n  /**\n   * Removes the properties -from all contributors- including fields that are not available for exploration\n   * @param data configuration object\n   * @param availableFieldsPerCollection List of available fields for exploration\n   * @returns configuration object\n   */\n  public updateContributors(data, availableFieldsPerCollection: Map<string, Set<string>>): any {\n    let updatedConfig = this.updateResultListContributors(data, availableFieldsPerCollection);\n    updatedConfig = this.updateMapContributors(updatedConfig, availableFieldsPerCollection);\n    updatedConfig = this.updateHistogramContributors(updatedConfig, availableFieldsPerCollection);\n    updatedConfig = this.updateChipSearchContributors(updatedConfig, availableFieldsPerCollection);\n    return updatedConfig;\n  }\n\n  /**\n   * Removes the properties -from map component - including fields that are not available for exploration\n   * @param data configuration object\n   * @param availableFieldsPerCollection List of available fields for exploration for each collection.\n   * @returns configuration object\n   */\n  public updateMapComponent(data, availableFieldsPerCollection: Map<string, Set<string>>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.components) {\n      const mapComponentConfig = data.arlas.web.components.mapgl;\n      if (mapComponentConfig && mapComponentConfig.input) {\n        /** idFieldName is no longer used !! */\n        let layerSources = [];\n        const layerSourcesList = data.arlas.web.contributors.filter(contributor => contributor.type === 'map')\n          .map(l => l.layers_sources);\n        if (layerSourcesList && layerSourcesList.length > 0) {\n          /** reduce cannot be applied on an empty list. */\n          layerSources = layerSourcesList.reduce((l1, l2) => new Array(...l1, ...l2));\n        }\n        /** remove layers from visualisation sets if their correponding source is removed from the contributor */\n        if (layerSources) {\n          const layers = new Set(layerSources.map(ls => ls.id));\n          const visualisationsSet: Array<VisualisationSetConfig> = mapComponentConfig.input.visualisations_sets;\n          if (visualisationsSet) {\n            const updatedVisualisationsSet: Array<VisualisationSetConfig> = [];\n            visualisationsSet.forEach(vs => {\n              vs.layers = vs.layers.filter(l => layers.has(l));\n              if (vs.layers.length > 0) {\n                updatedVisualisationsSet.push(vs);\n              }\n            });\n            mapComponentConfig.input.visualisations_sets = updatedVisualisationsSet;\n          }\n        }\n      }\n    }\n    return data;\n  }\n\n  /**\n   * Removes the properties -from ResultListContributor- that define fields not available for exploration\n   * @param data configuration object\n   * @param availableFieldsPerCollection List of available fields for exploration for each collection.\n   * @returns configuration object\n   */\n  public updateResultListContributors(data, availableFieldsPerCollection: Map<string, Set<string>>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      data.arlas.web.contributors.filter(contributor => contributor.type === 'resultlist').forEach(contributor => {\n        const availableFields = availableFieldsPerCollection.get(contributor.collection);\n        if (contributor.fieldsConfiguration) {\n          const fc = contributor.fieldsConfiguration as FieldsConfiguration;\n          /** imageFieldName && urlImageTemplate were removed in v20.x.x*/\n          /** remove urlImageTemplate */\n          if (fc.urlImageTemplate) {\n            const url = fc.urlImageTemplate;\n            const eventualField = url.substring(\n              url.lastIndexOf('{') + 1,\n              url.lastIndexOf('}')\n            );\n            if (eventualField && eventualField.length > 0 && !availableFields.has(eventualField)) {\n              delete fc.urlImageTemplate;\n            }\n          }\n          /** remove urlImageTemplates */\n          if (fc.urlImageTemplates) {\n            fc.urlImageTemplates = fc.urlImageTemplates.filter(urlImageTemplate => {\n              const url = urlImageTemplate.url;\n              const eventualField = url.substring(\n                url.lastIndexOf('{') + 1,\n                url.lastIndexOf('}')\n              );\n              const isEventualFieldToRemove = eventualField && eventualField.length > 0 && !availableFields.has(eventualField);\n              const hasFieldToRemove = urlImageTemplate.filter?.field && !availableFields.has(urlImageTemplate.filter?.field);\n              return !isEventualFieldToRemove && !hasFieldToRemove;\n            });\n          }\n          /** remove urlThumbnailTemplate */\n          if (fc.urlThumbnailTemplate) {\n            const url = fc.urlThumbnailTemplate;\n            const eventualField = url.substring(\n              url.lastIndexOf('{') + 1,\n              url.lastIndexOf('}')\n            );\n            if (eventualField && eventualField.length > 0 && !availableFields.has(eventualField)) {\n              delete fc.urlThumbnailTemplate;\n            }\n          }\n          /** remove titleFieldNames.fieldPath */\n          if (fc.titleFieldNames) {\n            fc.titleFieldNames = fc.titleFieldNames.filter(t => availableFields.has(t.fieldPath));\n          }\n          /** remove tooltipFieldNames.fieldPath */\n          if (fc.tooltipFieldNames) {\n            fc.tooltipFieldNames = fc.tooltipFieldNames.filter(t => availableFields.has(t.fieldPath));\n          }\n          /** remove iconCssClass */\n          if (fc.iconCssClass && !availableFields.has(fc.iconCssClass)) {\n            delete fc.iconCssClass;\n          }\n          /** remove iconColorFieldName */\n          if (fc.iconColorFieldName && !availableFields.has(fc.iconColorFieldName)) {\n            delete fc.iconColorFieldName;\n          }\n        }\n        /** remove columns */\n        if (contributor.columns) {\n          contributor.columns = contributor.columns.filter(c => availableFields.has(c.fieldName));\n        }\n        /** remove details */\n        if (contributor.details) {\n          contributor.details.forEach(detail => {\n            if (detail.fields) {\n              detail.fields = detail.fields.filter(field => availableFields.has(field.path));\n            }\n          });\n          contributor.details = contributor.details.filter(detail => (detail.fields && detail.fields.length > 0));\n        }\n        /** remove attachments */\n        if (contributor.attachments) {\n          contributor.attachments = contributor.attachments.filter(a => availableFields.has(a.attachmentsField) &&\n            availableFields.has(a.attachementUrlField));\n        }\n        /** remove metadata fields */\n        if (contributor.includeMetadata) {\n          contributor.includeMetadata = contributor.includeMetadata.filter(f => availableFields.has(f));\n        }\n      });\n    }\n    return data;\n  }\n\n  /**\n   * Removes the properties -from ResultListContributor- that define fields not available for exploration\n   * @param data configuration object\n   * @param availableFieldsPerCollection List of available fields for exploration for each collection.\n   * @returns configuration object\n   */\n  public updateHistogramContributors(data, availableFieldsPerCollection: Map<string, Set<string>>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      data.arlas.web.contributors.filter(contributor => contributor.type === 'histogram' ||\n        contributor.type === 'detailedhistogram'\n      ).forEach(contributor => {\n        if (contributor.additionalCollections) {\n          contributor.additionalCollections = contributor.additionalCollections.filter(ac => {\n            const availableFields = availableFieldsPerCollection.get(ac.collectionName);\n            const hasCollection = availableFieldsPerCollection.has(ac.collectionName);\n            const hasField = hasCollection && availableFields.has(ac.field);\n            return hasField;\n          });\n        }\n      });\n    }\n    return data;\n  }\n\n\n\n\n  /**\n   * Removes the properties -from MapConributor- that define fields not available for exploration\n   * @param data configuration object\n   * @param availableFieldsPerCollection List of available fields for exploration for each collection.\n   * @returns configuration object\n   */\n  public updateMapContributors(data, availableFieldsPerCollection: Map<string, Set<string>>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      data.arlas.web.contributors.filter(contributor => contributor.type === 'map').forEach(contributor => {\n        const availableFields = availableFieldsPerCollection.get(contributor.collection);\n        if (contributor.layers_sources) {\n          const updatedLayersSources: Array<LayerSourceConfig> = [];\n          contributor.layers_sources.forEach((ls: LayerSourceConfig) => {\n            let keepLs = true;\n            if (ls.include_fields) {\n              ls.include_fields = ls.include_fields.filter(f => availableFields.has(f));\n            }\n            if (ls.colors_from_fields) {\n              ls.colors_from_fields = ls.colors_from_fields.filter(f => availableFields.has(f));\n            }\n            if (ls.normalization_fields) {\n              ls.normalization_fields = ls.normalization_fields.filter(f =>\n                availableFields.has(f.on) && (!f.per || availableFields.has(f.per)));\n            }\n            if (ls.provided_fields) {\n              ls.provided_fields = ls.provided_fields.filter(f =>\n                availableFields.has(f.color) && (!f.label || availableFields.has(f.label)));\n            }\n            if (ls.metrics) {\n              ls.metrics = ls.metrics.filter(f => f.field === '' || availableFields.has(f.field));\n            }\n            keepLs = !ls.agg_geo_field || (ls.agg_geo_field && availableFields.has(ls.agg_geo_field));\n            if (keepLs) {\n              keepLs = !ls.raw_geometry || (ls.raw_geometry && availableFields.has(ls.raw_geometry.geometry));\n            }\n            if (keepLs && ls.raw_geometry && ls.raw_geometry.sort) {\n              ls.raw_geometry.sort = ls.raw_geometry.sort.split(',').filter(s => availableFields.has(s.replace('-', ''))).join(',');\n              if (ls.raw_geometry.sort === '') {\n                delete ls.raw_geometry.sort;\n              }\n            }\n            if (keepLs) {\n              keepLs = !ls.returned_geometry || (ls.returned_geometry && availableFields.has(ls.returned_geometry));\n            }\n            if (keepLs) {\n              keepLs = !ls.geometry_id || (ls.geometry_id && availableFields.has(ls.geometry_id));\n            }\n            if (keepLs) {\n              keepLs = !ls.geometry_support || (ls.geometry_support && availableFields.has(ls.geometry_support));\n            }\n            if (keepLs) {\n              updatedLayersSources.push(ls);\n            }\n          });\n          contributor.layers_sources = updatedLayersSources;\n        }\n        if (contributor.geo_query_field && !availableFields.has(contributor.geo_query_field)) {\n          delete contributor.geo_query_field;\n        }\n        if (contributor.search_sort) {\n          contributor.search_sort = contributor.search_sort.split(',').filter(s => availableFields.has(s.replace('-', ''))).join(',');\n          if (contributor.search_sort === '') {\n            delete contributor.search_sort;\n          }\n        }\n      });\n    }\n    return data;\n  }\n\n  /**\n   * Removes the properties -from SearchContributor- that define fields not available for exploration\n   * @param data configuration object\n   * @param availableFieldsPerCollection List of available fields for exploration for each collection.\n   * @returns configuration object\n   */\n  public updateChipSearchContributors(data, availableFieldsPerCollection: Map<string, Set<string>>): any {\n    if (data && data.arlas && data.arlas.web && data.arlas.web.contributors) {\n      data.arlas.web.contributors\n        .filter(contributor => contributor.type === 'chipssearch' || contributor.type === 'search').forEach(contributor => {\n          const availableFields = availableFieldsPerCollection.get(contributor.collection);\n          if (contributor.autocomplete_field && !availableFields.has(contributor.autocomplete_field)) {\n            delete contributor.autocomplete_field;\n          }\n        });\n    }\n    return data;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Inject, Injectable } from '@angular/core';\nimport { AuthorizeApi, Configuration, Resource } from 'arlas-permissions-api';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { from } from 'rxjs/internal/observable/from';\nimport { GET_OPTIONS } from '../../tools/utils';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PermissionService {\n\n  private authorizeApi: AuthorizeApi;\n  private options;\n\n  public constructor(\n    @Inject(GET_OPTIONS) private getOptions,\n    private settingsService: ArlasSettingsService\n  ) {\n    this.setOptions(this.getOptions());\n    this.createPermissionApiInstance();\n  }\n\n  public setOptions(options): void {\n    this.options = options;\n  }\n\n  public createPermissionApiInstance(): void {\n    const permissionSettings = this.settingsService.getPermissionSettings();\n    if (!this.authorizeApi && !!permissionSettings) {\n      const configuration = new Configuration();\n      this.authorizeApi = new AuthorizeApi(configuration, permissionSettings.url, window.fetch);\n    }\n\n  }\n\n  public get(filter: string): Observable<Resource[]> {\n    return from(this.authorizeApi.get(filter, false, this.options));\n  }\n}\n\nexport interface PermissionSetting {\n  url: string;\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Inject, Injectable } from '@angular/core';\nimport { Configuration, DataResource, DataWithLinks, Exists, PersistApi } from 'arlas-persistence-api';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { from } from 'rxjs/internal/observable/from';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { GET_OPTIONS } from '../../tools/utils';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PersistenceService {\n  private persistenceApi: PersistApi;\n  public options;\n  public isAvailable = false;\n\n  public constructor(\n    @Inject(GET_OPTIONS) private getOptions,\n    private settingsService: ArlasSettingsService\n  ) {\n    this.setOptions(this.getOptions());\n    this.createPersistenceApiInstance();\n  }\n\n  public createPersistenceApiInstance(): void {\n    const persistenceSettings = this.settingsService.getPersistenceSettings();\n    if (!this.persistenceApi && !!persistenceSettings) {\n      const configuration = new Configuration();\n      this.persistenceApi = new PersistApi(configuration, persistenceSettings.url, window.fetch);\n      this.isAvailable = true;\n    }\n  }\n\n  public delete(id: string, options = this.options): Observable<DataWithLinks> {\n    return from(this.persistenceApi.deleteById(id, false, options));\n  }\n\n  public create(zone: string, name: string, body: string,\n    readers?: string[], writers?: string[], options = this.options): Observable<DataWithLinks> {\n    return from(this.persistenceApi.create(body, zone, name, readers, writers, false, options));\n\n  }\n  public get(id: string, options = this.options): Observable<DataWithLinks> {\n    return from(this.persistenceApi.getById(id, false, options));\n  }\n\n  public exists(id: string, options = this.options): Observable<Exists> {\n    return from(this.persistenceApi.existsById(id, false, options));\n  }\n\n  public list(zone: string, size: number, page: number, order: string, key = undefined, options = this.options): Observable<DataResource> {\n    return from(this.persistenceApi.list(zone, size, page, order, false, key, options));\n\n  }\n  public update(id: string, body: string, lastUpdate: number, name?: string,\n    readers?: string[], writers?: string[], options = this.options): Observable<DataWithLinks> {\n    return from(this.persistenceApi.update(body, id, lastUpdate, name, readers, writers, false, options));\n  }\n\n  public duplicate(zone: string, id: string, newName?: string, options = this.options): Observable<DataWithLinks> {\n    return this.get(id, options).pipe(\n      map(data => this.create(zone, newName ? newName : 'Copy of ' + data.doc_key, data.doc_value, [], [],\n        options)),\n      mergeMap(a => a)\n    );\n  }\n\n  public rename(id: string, newName: string, options = this.options): Observable<DataWithLinks> {\n    return this.get(id, options).pipe(\n      map(data => this.update(id, data.doc_value, new Date(data.last_update_date).getTime(),\n        newName, data.doc_readers, data.doc_writers, options)),\n      mergeMap(a => a)\n    );\n  }\n\n  public getGroupsByZone(zone: string, options = this.options) {\n    return from(this.persistenceApi.getGroupsByZone(zone, false, options));\n  }\n\n  public setOptions(options): void {\n    this.options = options;\n  }\n\n  /** updates the resource's name, readers and writers */\n  public updateResource(id: string, readers: string[], writers: string[], newValue?: string, options = this.options) {\n    this.exists(id, options).subscribe(\n      exist => {\n        if (exist.exists) {\n          this.get(id, options).subscribe({\n            next: (data) => {\n              this.update(data.id, newValue ? newValue : data.doc_value, new Date(data.last_update_date).getTime(), data.doc_key,\n                readers, writers, options).subscribe();\n            }\n          });\n        }\n      });\n  }\n\n  public renameResource(id: string, newName: string, options = this.options) {\n    this.exists(id, options).subscribe(\n      exist => {\n        if (exist.exists) {\n          this.get(id, options).subscribe({\n            next: (data) => {\n              this.rename(data.id, newName, options).subscribe();\n            }\n          });\n        }\n      });\n  }\n\n  public dashboardToResourcesGroups(dashboardReaders: string[], dashboardWiters: string[]): {\n    readers: string[];\n    writers: string[];\n  } {\n    let resourceReaders = [];\n    let resourceWriters = [];\n    if (dashboardReaders) {\n      // Seen with AB who says normally we dont need to do the replace anymore\n      resourceReaders = dashboardReaders;\n    }\n    if (dashboardWiters) {\n      // Seen with AB who says normally we dont need to do the replace anymore\n      resourceWriters = dashboardWiters;\n    }\n    return {\n      readers: resourceReaders,\n      writers: resourceWriters\n    };\n  }\n\n  public getOptionsSetOrg(org: string) {\n    const newOptions = Object.assign({}, this.options);\n    if (newOptions.headers) {\n      newOptions.headers = Object.assign({}, newOptions.headers);\n    }\n    // No need to have arlas-org-filer headers to delete or get by id\n    if (!!newOptions && !!newOptions['headers']) {\n      newOptions.headers['arlas-org-filter'] = org;\n    }\n    return newOptions;\n  }\n\n  /** deletes the resource by its id */\n  public deleteResource(previewId: string, options = this.options) {\n    this.exists(previewId, options).subscribe(\n      exist => {\n        if (exist.exists) {\n          this.delete(previewId, options).subscribe();\n        }\n      });\n  }\n}\n\nexport interface PersistenceSetting {\n  use_local_config?: boolean;\n  url: string;\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Expression, Filter, Search } from 'arlas-api';\nimport { projType } from 'arlas-web-core';\nimport { map, Observable } from 'rxjs';\nimport { Process, ProcessInputs, ProcessOutput } from '../../tools/process.interface';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ProcessService {\n  private processInputs: ProcessInputs = {};\n  private options: any = {};\n\n  public constructor(\n    private http: HttpClient,\n    private arlasSettingsService: ArlasSettingsService,\n    private collaborativeSearchService: ArlasCollaborativesearchService\n  ) { }\n\n  public setOptions(options): void {\n    this.options = options;\n  }\n\n  /**\n   *\n   * @param ids List of products ids\n   * @param payload Values of the dynamic form\n   * @param collection Collection of selectied items\n   */\n  public process(processName: string, ids: string[], payload: any, collection: string): Observable<ProcessOutput> {\n    const requests: any[] = [];\n    ids.forEach(id => {\n      requests.push({ collection, item_id: id });\n    });\n    const data = {\n      inputs: {\n        requests\n      }\n    };\n    data.inputs = Object.assign(data.inputs, payload);\n\n    return this.http.post(\n      this.arlasSettingsService.getProcessSettings(processName)?.url, data,\n      Object.assign(this.options, { responseType: 'text' })\n    )\n      .pipe(map(\n        p => {\n          const processOutput: ProcessOutput = JSON.parse(p as any);\n          return processOutput;\n        }\n      ));\n  }\n\n  public check(processName: string): Observable<any> {\n    return this.http.get(this.arlasSettingsService.getProcessSettings(processName)?.check_url, this.options);\n  }\n\n  public getProcessInputs(): ProcessInputs {\n    return this.processInputs;\n  }\n\n  public setProcessInputs(process: ProcessInputs): void {\n    this.processInputs = process;\n  }\n\n  public load(processName: string): Observable<Process> {\n    return this.http.get(\n      this.arlasSettingsService.getProcessSettings(processName)?.settings.url,\n      Object.assign(this.options, { responseType: 'text' })\n    )\n      .pipe(\n        map(c => {\n          const process: Process = JSON.parse(c as any);\n          this.setProcessInputs(process.inputs);\n          return process;\n        })\n      );\n  }\n\n  public getJobStatus(processName: string, jobId: string): Observable<ProcessOutput> {\n    return this.http.get(\n      this.arlasSettingsService.getProcessSettings(processName).status.url + '/' + jobId,\n      Object.assign(this.options, { responseType: 'text' })\n    )\n      .pipe(map(\n        p => {\n          const processOutput: ProcessOutput = JSON.parse(p as any);\n          return processOutput;\n        }\n      ));\n  }\n\n  public getItemsDetail(idFieldName: string, itemsId: string[], collection: string): Observable<Map<string, any>> {\n    // properties.main_asset_format is the field to pass to get the object value\n    const fields = ['properties.proj__epsg', 'properties.main_asset_format', 'geometry', 'properties.item_format'];\n    const search: Search = {\n      page: { size: itemsId.length },\n      form: { pretty: false, flat: false },\n      projection: {\n        includes: fields.map(field => field).join(',')\n      }\n    };\n\n    const expression: Expression = {\n      field: idFieldName,\n      // TODO: Manage other Operators ?\n      op: Expression.OpEnum.Eq,\n      value: itemsId.join(',')\n    };\n    const filterExpression: Filter = {\n      f: [[expression]]\n    };\n    const searchResult = this.collaborativeSearchService\n      .resolveHits(\n        [projType.search, search],\n        this.collaborativeSearchService.collaborations,\n        collection,\n        undefined,\n        filterExpression,\n        false\n      );\n    return searchResult.pipe(map((data: any) => {\n      const matchingAdditionalParams = new Map<string, any>();\n      if (!!data && !!data?.hits && data.hits.length > 0) {\n        data.hits.forEach(i => {\n          const itemMetadata = i.data;\n          fields.forEach(f => {\n            matchingAdditionalParams.set(f, this.resolve(f, itemMetadata));\n          });\n        });\n      }\n      return matchingAdditionalParams;\n    }));\n  }\n\n  private resolve(path, obj = self, separator = '.') {\n    const properties = Array.isArray(path) ? path : path.split(separator);\n    return properties.reduce((prev, curr) => prev?.[curr], obj);\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { ArlasColorService } from 'arlas-web-components';\nimport {\n  AnalyticsContributor,\n  ComputeContributor,\n  DetailedHistogramContributor,\n  HistogramContributor,\n  MapContributor,\n  MetricsTableContributor,\n  ResultListContributor,\n  SearchContributor,\n  SwimLaneContributor,\n  TreeContributor\n} from 'arlas-web-contributors';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\nimport { ArlasConfigService } from './startup.service';\n\nexport class ContributorBuilder {\n\n  public static buildContributor(contributorType: string,\n    identifier: string,\n    configService: ArlasConfigService,\n    collaborativesearchService: ArlasCollaborativesearchService,\n    settingsService: ArlasSettingsService,\n    colorService?: ArlasColorService): any {\n\n    const config = configService.getValue('arlas.web.contributors').find(contrib =>\n      contrib.type === contributorType && contrib.identifier === identifier\n    );\n    let collection = !!config['collection'] ? config['collection'] : collaborativesearchService.defaultCollection;\n    let contributor;\n    let isOneDimension: boolean;\n    let additionalCollections: Array<any>;\n    switch (contributorType) {\n      case 'metric':\n        contributor = new ComputeContributor(identifier, collaborativesearchService, configService, collection);\n        break;\n      case 'histogram':\n        isOneDimension = config['isOneDimension'];\n        additionalCollections = config['additionalCollections'];\n        contributor = new HistogramContributor(identifier, collaborativesearchService, configService, collection,\n          isOneDimension, additionalCollections);\n        (contributor as HistogramContributor).maxBuckets = settingsService.getHistogramMaxBucket();\n        break;\n      case 'detailedhistogram':\n        isOneDimension = config['isOneDimension'];\n        additionalCollections = config['additionalCollections'];\n        contributor = new DetailedHistogramContributor(identifier, collaborativesearchService, configService, collection,\n          isOneDimension, additionalCollections);\n        (contributor as DetailedHistogramContributor).maxBuckets = settingsService.getHistogramMaxBucket();\n        break;\n      case 'resultlist':\n        contributor = new ResultListContributor(identifier, collaborativesearchService, configService, collection);\n        break;\n      case 'map':\n        contributor = new MapContributor(identifier, collaborativesearchService, configService, collection, colorService?.colorGenerator);\n        break;\n      case 'swimlane':\n        isOneDimension = config['isOneDimension'];\n        contributor = new SwimLaneContributor(identifier, collaborativesearchService, configService, collection);\n        break;\n      case 'tree':\n        const titletree: string = config['title'];\n        contributor = new TreeContributor(identifier,\n          collaborativesearchService,\n          configService,\n          titletree, collection\n        );\n        break;\n      case 'search':\n      case 'chipssearch':\n        contributor = new SearchContributor(identifier,\n          collaborativesearchService,\n          configService, collection\n        );\n        break;\n      case 'analytics':\n        const groupIdToValues = new Map<string, Array<string>>();\n        const analytics = configService.getValue('arlas.web.analytics');\n        if (analytics) {\n          analytics.forEach(analytic => {\n            if (analytic.filterValues) {\n              groupIdToValues.set(analytic.groupId, analytic.filterValues);\n            } else {\n              groupIdToValues.set(analytic.groupId, ['*']);\n            }\n          });\n        }\n        contributor = new AnalyticsContributor(identifier,\n          collaborativesearchService,\n          configService,\n          collection,\n          groupIdToValues\n        );\n        break;\n      case 'metricstable':\n        // For the MetricsTable, choose the collection of the first MetricsVector as the main collection\n        if (config['configuration']?.[0]?.collection) {\n          collection = config['configuration'][0].collection;\n        }\n        contributor = new MetricsTableContributor(identifier, collaborativesearchService, configService, collection);\n        break;\n    }\n    contributor.updateData = false;\n    return contributor;\n  }\n\n  /** Returns all the collections that are configured in each type of contributor. */\n  public static getCollections(contributorsConfig: any[]): Set<string> {\n    const collections = new Set<string>();\n    contributorsConfig.forEach(contributor => {\n      if (contributor.collection) {\n        collections.add(contributor.collection);\n      }\n      /** For histograms, multi-collection is possible. We need to check the 'additionalCollections' attribute.*/\n      if (contributor.type === 'histogram') {\n        if (contributor.additionalCollections && Array.isArray(contributor.additionalCollections)) {\n          contributor.additionalCollections.forEach(ac => {\n            collections.add(ac.collectionName);\n          });\n        }\n      }\n    });\n    return collections;\n  }\n}\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { LOCATION_INITIALIZED } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable, InjectionToken, Injector } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport Ajv from 'ajv';\nimport ajvKeywords from 'ajv-keywords';\nimport * as draftSchema from 'ajv/lib/refs/json-schema-draft-06.json';\nimport { CollectionReferenceDescription, CollectionReferenceParameters, CollectionsApi, Configuration, ExploreApi } from 'arlas-api';\nimport { DefaultApi, Configuration as IamConfiguration } from 'arlas-iam-api';\nimport { DataWithLinks } from 'arlas-persistence-api';\nimport {\n  DonutComponent, HistogramComponent, MetricComponent,\n  MetricsTableComponent, PowerbarsComponent\n} from 'arlas-web-components';\nimport {\n  ChipsSearchContributor, ComputeContributor, DetailedHistogramContributor, HistogramContributor,\n  MapContributor,\n  MetricsTableContributor,\n  ResultListContributor,\n  SearchContributor,\n  SwimLaneContributor, TreeContributor\n} from 'arlas-web-contributors';\nimport { AnalyticsContributor } from 'arlas-web-contributors/contributors/AnalyticsContributor';\nimport * as rootContributorConfSchema from 'arlas-web-contributors/jsonSchemas/rootContributorConf.schema.json';\nimport { ConfigService, Contributor } from 'arlas-web-core';\nimport { projType } from 'arlas-web-core/models/projections';\nimport YAML from 'js-yaml';\nimport { Subject, defer, throwError } from 'rxjs';\nimport { catchError, mergeMap, retry } from 'rxjs/operators';\nimport { AnalyticGroupConfiguration } from '../../components/analytics/analytics.utils';\nimport { FilterShortcutConfiguration } from '../../components/filter-shortcut/filter-shortcut.utils';\nimport { DashboardError } from '../../tools/errors/dashboard-error';\nimport {\n  AuthentSetting,\n  CONFIG_ID_QUERY_PARAM, GET_OPTIONS,\n  GeocodingSetting,\n  NOT_CONFIGURED,\n  WidgetConfiguration, getFieldProperties,\n  getParamValue\n} from '../../tools/utils';\nimport { ArlasIamService, IamHeader } from '../arlas-iam/arlas-iam.service';\nimport { AuthentificationService, } from '../authentification/authentification.service';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigurationUpdaterService } from '../configuration-updater/configurationUpdater.service';\nimport { ErrorService } from '../error/error.service';\nimport { FetchInterceptorService } from '../interceptor/fetch-interceptor.service';\nimport { PermissionService, PermissionSetting } from '../permission/permission.service';\nimport { PersistenceService, PersistenceSetting } from '../persistence/persistence.service';\nimport { ProcessService } from '../process/process.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\nimport * as arlasConfSchema from './arlasconfig.schema.json';\nimport { ContributorBuilder } from './contributorBuilder';\nimport * as arlasSettingsSchema from './settings.schema.json';\nimport { ArlasMapComponent } from 'arlas-map';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasConfigService extends ConfigService {\n  public errorsQueue = new Array<Error>();\n  public appName = '';\n\n  public constructor() {\n    super();\n  }\n\n  /** Returns the preview identifier stored in the config.json */\n  public getPreviewId(): string | undefined {\n    return this.getValue('resources.previewId');\n  }\n\n  public parse(stringifiedConfig: string) {\n    return JSON.parse(stringifiedConfig);\n  }\n\n  public getPreview(config: any) {\n    return config?.resources?.previewId;\n  }\n\n  public hasPreview(config: any) {\n    return !!this.getPreview(config);\n  }\n\n  public getI18n(config: any) {\n    return config?.resources?.i18nIds;\n  }\n\n  public getTours(config: any) {\n    return config?.resources?.toursIds;\n  }\n\n  public hasI18n(config: any) {\n    const i18nIds = this.getI18n(config);\n    return !!i18nIds && Object.entries(i18nIds).length > 0;\n  }\n\n  public hasTours(config: any) {\n    const toursIds = this.getTours(config);\n    return !!toursIds && Object.entries(toursIds).length > 0;\n  }\n\n  public hasResources(config: any) {\n    return this.hasI18n(config) || this.hasPreview(config);\n  }\n\n  public updateI18n(config: any, lang: string, i18nId: string) {\n    if (!config.resources) {\n      config.resources = {};\n    }\n    if (!config.resources.i18nIds) {\n      config.resources.i18nIds = {};\n    }\n    config.resources.i18nIds[lang] = i18nId;\n  }\n\n  public updateTour(config: any, lang: string, tourId: string) {\n    if (!config.resources) {\n      config.resources = {};\n    }\n    if (!config.resources.toursIds) {\n      config.resources.toursIds = {};\n    }\n    config.resources.toursIds[lang] = tourId;\n  }\n\n  public updatePreview(config: any, previewId: string) {\n    if (!config.resources) {\n      config.resources = {};\n    }\n    config.resources.previewId = previewId;\n    return config;\n  }\n}\n\n@Injectable()\nexport class ArlasExploreApi extends ExploreApi {\n  public constructor(@Inject('CONF') conf: Configuration, @Inject('base_path') basePath: string,\n    @Inject('fetch') fetch) {\n    super(conf, basePath, fetch);\n  }\n}\n\n@Injectable()\nexport class ArlasCollectionApi extends CollectionsApi {\n  public constructor(@Inject('CONF') conf: Configuration, @Inject('base_path') basePath: string,\n    @Inject('fetch') fetch) {\n    super(conf, basePath, fetch);\n  }\n}\n\n@Injectable()\nexport class ArlasIamApi extends DefaultApi {\n  public constructor(@Inject('CONF') conf: IamConfiguration, @Inject('base_path') basePath: string,\n    @Inject('fetch') fetch) {\n    super(conf, basePath, fetch);\n  }\n}\n\nexport const CONFIG_UPDATER = new InjectionToken<Function>('config_updater');\nexport const FETCH_OPTIONS = new InjectionToken<any>('fetch_options');\n\nexport interface Error {\n  origin: string;\n  message: string;\n  reason: string;\n}\nexport const SETTINGS_FILE_NAME = 'settings.yaml?' + Date.now();\n\n@Injectable()\nexport class ArlasStartupService {\n  public contributorRegistry: Map<string, Contributor> = new Map<string, any>();\n  public shouldRunApp = true;\n  public emptyMode = false;\n  public analytics: Array<AnalyticGroupConfiguration>;\n  public filtersShortcuts: Array<FilterShortcutConfiguration>;\n  public collectionsMap: Map<string, CollectionReferenceParameters> = new Map();\n  public collectionId: string;\n  public selectorById: string;\n  public temporalContributor: Array<string> = new Array<string>();\n  private errorMessagesList = new Array<string>();\n  public errorStartUpServiceBus: Subject<any> = new Subject<any>();\n  public arlasIsUp: Subject<boolean> = new Subject<boolean>();\n  public arlasExploreApi: ArlasExploreApi;\n  public configurationUpdaterService: ArlasConfigurationUpdaterService;\n  public arlasIamApi: ArlasIamApi;\n\n  public constructor(\n    private settingsService: ArlasSettingsService,\n    private configService: ArlasConfigService,\n    private collaborativesearchService: ArlasCollaborativesearchService,\n    private injector: Injector,\n    @Inject(FETCH_OPTIONS) private fetchOptions,\n    @Inject(GET_OPTIONS) private getOptions,\n    private http: HttpClient, private translateService: TranslateService,\n    @Inject(CONFIG_UPDATER) private configUpdater,\n    private persistenceService: PersistenceService,\n    private permissionService: PermissionService,\n    private errorService: ErrorService,\n    private fetchInterceptorService: FetchInterceptorService,\n    private arlasIamService: ArlasIamService,\n    private processService: ProcessService\n  ) {\n    this.configurationUpdaterService = new ArlasConfigurationUpdaterService;\n  }\n\n  public getFGAService(): ArlasConfigurationUpdaterService {\n    return this.configurationUpdaterService;\n  }\n\n  public errorStartUp() {\n    this.errorStartUpServiceBus.subscribe(e => console.error(e));\n  }\n\n  public validateSettings(settings) {\n    return new Promise<any>((resolve, reject) => {\n      const ajvObj = new Ajv({ allowUnionTypes: true });\n      ajvKeywords(ajvObj, 'uniqueItemProperties');\n      const validateConfig = ajvObj\n        .addMetaSchema(draftSchema.default)\n        .compile((<any>arlasSettingsSchema).default);\n      if (settings && validateConfig(settings) === false) {\n        const errorMessagesList = new Array<string>();\n        errorMessagesList.push(\n          validateConfig.errors[0].schemaPath + ' ' +\n          validateConfig.errors[0].message\n        );\n        reject(new Error(errorMessagesList.join(' ')));\n      } else {\n        resolve(settings);\n      }\n    });\n  }\n\n  public validateConfiguration(data) {\n    return new Promise<any>((resolve, reject) => {\n      const ajvObj = new Ajv({ allowUnionTypes: true });\n      ajvKeywords(ajvObj, 'uniqueItemProperties');\n      const validateConfig = ajvObj\n        .addMetaSchema(draftSchema.default)\n        .addSchema((<any>rootContributorConfSchema).default)\n        .addSchema(HistogramContributor.getJsonSchema())\n        .addSchema(DetailedHistogramContributor.getJsonSchema())\n        .addSchema(SwimLaneContributor.getJsonSchema())\n        .addSchema(ResultListContributor.getJsonSchema())\n        .addSchema(MapContributor.getJsonSchema())\n        .addSchema(TreeContributor.getJsonSchema())\n        .addSchema(ChipsSearchContributor.getJsonSchema())\n        .addSchema(SearchContributor.getJsonSchema())\n        .addSchema(AnalyticsContributor.getJsonSchema())\n        .addSchema(ComputeContributor.getJsonSchema())\n        .addSchema(MetricsTableContributor.getJsonSchema())\n        .addSchema((<any>HistogramComponent.getHistogramJsonSchema()).default)\n        .addSchema((<any>HistogramComponent.getSwimlaneJsonSchema()).default)\n        .addSchema((<any>PowerbarsComponent.getPowerbarsJsonSchema()).default)\n        .addSchema((<any>ArlasMapComponent.getMapJsonSchema()).default)\n        .addSchema((<any>DonutComponent.getDonutJsonSchema()).default)\n        .addSchema((<any>MetricComponent.getMetricJsonSchema()).default)\n        .addSchema((<any>MetricsTableComponent.getJsonSchema()).default)\n        .compile((<any>arlasConfSchema).default);\n      if (validateConfig(data) === false) {\n        const errorMessagesList = new Array<string>();\n        errorMessagesList.push(\n          validateConfig.errors[0].schemaPath + ' ' +\n          validateConfig.errors[0].message\n        );\n        reject(new Error(errorMessagesList.join(' ')));\n      } else {\n        resolve(data);\n      }\n    });\n  }\n  public translationLoaded(data) {\n    return new Promise<any>((resolve: any) => {\n      // Set default language to current browser language\n      let langToSet = navigator.language.slice(0, 2);\n      const urlLanguage = getParamValue('lg');\n      if (urlLanguage) {\n        langToSet = decodeURIComponent(urlLanguage.replace(/\\+/g, ' '));\n      }\n      const locationInitialized = this.injector.get(LOCATION_INITIALIZED, Promise.resolve(null));\n      locationInitialized.then(() => {\n        this.translateService.setDefaultLang('en');\n        this.translateService.use(langToSet).subscribe(() => {\n          console.log(`Successfully initialized '${langToSet}' language.`);\n        }, err => {\n          console.error(`Problem with '${langToSet}' language initialization.'`);\n        }, () => {\n          resolve([data, langToSet]);\n        });\n      });\n    });\n  }\n\n  /**\n   * - Sets the configuration object in ArlasConfigService.\n   * - Sets the ArlasConfigService instance in ArlasCollaborativeSearchService\n   * @param data configation object\n   * @returns the same configuration object\n   */\n  public setConfigService(data) {\n    /** First set the raw config data in order to create an ArlasExploreApi instance */\n    const configAfterUpdater = this.configUpdater(data);\n    const newConfig = this.fixLayerStyleInfinity(configAfterUpdater);\n    if (!this.emptyMode) {\n      this.configService.setConfig(newConfig);\n      this.collaborativesearchService.setFetchOptions(this.fetchOptions);\n      const arlasUrl = this.configService.getValue('arlas.server.url');\n      const configuration: Configuration = new Configuration();\n      this.arlasExploreApi = new ArlasExploreApi(\n        configuration,\n        arlasUrl,\n        window.fetch\n      );\n      this.collaborativesearchService.setConfigService(this.configService);\n      this.collaborativesearchService.setExploreApi(this.arlasExploreApi);\n    }\n    return data;\n  }\n\n  /**\n   * Updates configuration by keeping only components/widgets that are availbale for exploration\n   * @param data configuration object\n   * @param availableFields list of fields that are available for exploration\n   * @returns the updated configuration object\n   */\n  public updateConfiguration(data, availableFields: Map<string, Set<string>>): any {\n    if (!this.emptyMode) {\n      let updatedConfig = this.configurationUpdaterService.addCollectionIfMissing(data);\n      const contributorsToRemove: Set<string> = this.configurationUpdaterService.getContributorsToRemove(data, availableFields);\n      updatedConfig = this.configurationUpdaterService.removeContributors(data, contributorsToRemove);\n      updatedConfig = this.configurationUpdaterService.updateContributors(updatedConfig, availableFields);\n      updatedConfig = this.configurationUpdaterService.updateMapComponent(updatedConfig, availableFields);\n      updatedConfig = this.configurationUpdaterService.removeWidgets(updatedConfig, contributorsToRemove);\n      updatedConfig = this.configurationUpdaterService.removeTimelines(updatedConfig, contributorsToRemove);\n      return updatedConfig;\n    } else {\n      return data;\n    }\n  }\n\n  /**\n   * Retrieves fields that are available for exploration and updates the configuration to keep only corresponding widgets and components\n   * @param data configuration object\n   */\n  public applyFGA(data) {\n    if (!this.emptyMode) {\n      const defaultCollection = this.configService.getValue('arlas.server.collection.name');\n      const collectionNames: Set<string> = ContributorBuilder.getCollections(this.configService.getValue('arlas.web.contributors'));\n      collectionNames.add(defaultCollection);\n      return this.listAvailableFields(collectionNames)\n        .then((availableFieldsPerCollection: Map<string, Set<string>>) => this.updateConfiguration(data[0], availableFieldsPerCollection))\n        .then((d) => {\n          this.configService.setConfig(d);\n          return d;\n        })\n        .catch(err => {\n          this.shouldRunApp = false;\n          if (err instanceof Response) {\n            err.json().then(r => {\n              console.error(r);\n              this.errorService.emitBackendError(r.status, r.message, 'ARLAS-server');\n            });\n          } else {\n            console.error(err);\n            this.errorService.emitUnavailableService('ARLAS-server');\n          }\n          return Promise.resolve(null);\n        });\n    } else {\n      return Promise.resolve({});\n    }\n  }\n\n  /**\n   * - Fetches and parses the `settings.yaml`.\n   * - Validates it against the correponding schema\n   * @returns ARLAS settings object Promise\n   */\n  public applyAppSettings(): Promise<ArlasSettings> {\n    return this.http.get(SETTINGS_FILE_NAME, { responseType: 'text', headers: { 'X-Skip-Interceptor': '' } }).toPromise()\n      .catch((err) => {\n        // application should not run if the settings.yaml file is absent\n        this.shouldRunApp = false;\n        console.error(err);\n        this.errorService.emitSettingsError();\n        return {};\n      })\n      .then(s => {\n        // parses the yaml file and validates it against the correponding schema\n        const settings: ArlasSettings = YAML.safeLoad(s);\n        return this.validateSettings(settings);\n      })\n      .catch((err: any) => {\n        // application should not run if the settings.yaml file is not valid\n        this.shouldRunApp = false;\n        console.error(err);\n        this.errorService.emitSettingsError();\n        return Promise.reject(err);\n      })\n      .then(s => {\n        this.settingsService.setSettings(s);\n        this.persistenceService.createPersistenceApiInstance();\n        this.permissionService.createPermissionApiInstance();\n        return s;\n      });\n  }\n  /**\n   * if authentication is configured, trigger authentication service that redirects to login page if it's the first time and fetches\n   * the appropriate token\n   * @param settings ArlasSettings object\n   */\n  public authenticate(settings: ArlasSettings): Promise<ArlasSettings> {\n    return (new Promise<ArlasSettings>((resolve, reject) => {\n      // if authentication is configured, trigger authentication service that\n      // redirects to login page if it's the first time and fetches the appropriate token\n      if (settings) {\n        const authent: AuthentSetting = settings.authentication;\n        if (authent && authent.use_authent && authent.auth_mode === 'iam') { // Authentication activated with IAM mode\n          if (!this.arlasIamService.areSettingsValid(authent)[0]) {\n            const err = 'Authentication is set while ' + this.arlasIamService.areSettingsValid(authent)[1] + ' are not configured';\n            return reject(err);\n          }\n          this.arlasIamApi = new ArlasIamApi(new IamConfiguration(), authent.url, window.fetch);\n          this.arlasIamService.setArlasIamApi(this.arlasIamApi);\n\n          return resolve(this.arlasIamService.initAuthService().then(() => settings));\n        } else if (authent && authent.use_authent) { // Authentication activated with OPENID mode\n          const authService: AuthentificationService = this.injector.get('AuthentificationService')[0];\n          authService.authConfigValue = authent;\n          if (!authService.areSettingsValid(authent)[0]) {\n            const err = 'Authentication is set while ' + authService.areSettingsValid(authent)[1] + ' are not configured';\n            return reject(err);\n          }\n          return resolve(authService.initAuthService().then(() => settings));\n        }\n      }\n      return resolve(settings);\n    })).catch((err: any) => {\n      // application should not run if the settings.yaml file is not valid\n      this.shouldRunApp = false;\n      console.error(err);\n      this.errorService.emitSettingsError();\n      throw new Error(err);\n    });\n  }\n\n  /**\n   * Enriches headers of calls sent to ARLAS-server & ARLAS-persistence\n   * @param settings\n   */\n  public enrichHeaders(settings: ArlasSettings): Promise<ArlasSettings> {\n    return new Promise<ArlasSettings>((resolve, reject) => {\n      const useAuthent = !!settings && !!settings.authentication\n        && !!settings.authentication.use_authent;\n      // The default behavior is openid, so if there is no auth_mode specified, it is openid\n      const useAuthentOpenID = useAuthent && settings.authentication.auth_mode !== 'iam';\n      const useAuthentIam = useAuthent && settings.authentication.auth_mode === 'iam';\n      if (useAuthent) {\n        const usePersistence = (!!settings && !!settings.persistence && !!settings.persistence.url\n          && settings.persistence.url !== '' && settings.persistence.url !== NOT_CONFIGURED);\n\n        this.fetchInterceptorService.applyInterceptor();\n        if (useAuthentOpenID) {\n          const authService: AuthentificationService = this.injector.get('AuthentificationService')[0];\n          if (usePersistence) {\n            // To open reconnect dialog on silent refresh failed\n            authService.silentRefreshErrorSubject.subscribe(error =>\n              // eslint-disable-next-line arrow-body-style\n              this.persistenceService.list('config.json', 10, 1, 'asc').subscribe(data => {\n                return;\n              }));\n          }\n          authService.canActivateProtectedRoutes.subscribe(isActivable => {\n            if (isActivable) {\n              // ARLAS-persistence\n              this.persistenceService.setOptions({\n                headers: {\n                  Authorization: 'bearer ' + authService.accessToken\n                }\n              });\n              // ARLAS-server\n              this.fetchOptions.headers = {\n                Authorization: 'bearer ' + authService.accessToken\n              };\n              // ARLAS-Permission\n              this.permissionService.setOptions({\n                headers: {\n                  Authorization: 'bearer ' + authService.accessToken\n                }\n              });\n              // Process\n              this.processService.setOptions({\n                headers: {\n                  Authorization: 'bearer ' + authService.accessToken\n                }\n              });\n            } else {\n              this.persistenceService.setOptions(this.getOptions());\n              this.permissionService.setOptions(this.getOptions());\n              this.processService.setOptions(this.getOptions());\n            }\n            this.collaborativesearchService.setFetchOptions(this.fetchOptions);\n            resolve(settings);\n          });\n\n        } else if (useAuthentIam) {\n          const url = new URL(window.location.href);\n          const paramOrg = url.searchParams.get('org');\n          if (!!paramOrg) {\n            this.arlasIamService.storeOrganisation(paramOrg);\n          }\n          this.arlasIamService.tokenRefreshed$.subscribe({\n            next: (loginData) => {\n              if (!!loginData) {\n                const org = this.arlasIamService.getOrganisation();\n                const iamHeader = {\n                  Authorization: 'Bearer ' + loginData.access_token,\n                };\n                // Set the org filter only if the organisation is defined\n                if (!!org) {\n                  iamHeader['arlas-org-filter'] = org;\n                }\n                this.persistenceService.setOptions({ headers: iamHeader });\n                this.permissionService.setOptions({ headers: iamHeader });\n                this.processService.setOptions({ headers: iamHeader });\n                this.fetchOptions.headers = iamHeader;\n              } else {\n                this.persistenceService.setOptions({});\n                this.permissionService.setOptions({});\n                this.processService.setOptions({});\n                this.fetchOptions.headers = null;\n              }\n              this.collaborativesearchService.setFetchOptions(this.fetchOptions);\n              resolve(settings);\n            }\n          });\n        }\n      } else {\n        this.persistenceService.setOptions(this.getOptions());\n        this.permissionService.setOptions(this.getOptions());\n        this.collaborativesearchService.setFetchOptions(this.fetchOptions);\n        resolve(settings);\n      }\n    });\n  }\n  /**\n   * - Fetches the configuration file from ARLAS-persistence if it's configurated, otherwise fetches the config.json in \"src\" folder.\n   * - Validates the configuration against the corresponding schema\n   * @param settings Arlas Settings object\n   * @returns ARLAS Configuration object Promise\n   */\n  public getAppConfigurationObject(settings: ArlasSettings): Promise<any> {\n    const url = new URL(window.location.href);\n    const usePersistence = (!!settings && !!settings.persistence && !!settings.persistence.url\n      && settings.persistence.url !== '' && settings.persistence.url !== NOT_CONFIGURED && !settings.persistence.use_local_config);\n    const configurationId = url.searchParams.get(CONFIG_ID_QUERY_PARAM);\n    return new Promise<any>((resolve, reject) => {\n      let configDataPromise = Promise.resolve(null);\n      let configData;\n      if (usePersistence) {\n        if (!!configurationId) {\n          configDataPromise = defer(() => this.persistenceService.get(configurationId)).pipe(\n            catchError(err => {\n              this.errorService.closeAll();\n              return throwError(() => err);\n            }),\n            retry({ count: 1, delay: 2000 })\n          ).toPromise()\n            .then((s: DataWithLinks) => {\n              if (s) {\n                const config = JSON.parse(s.doc_value);\n                this.configService.appName = s.doc_key;\n                configData = config;\n                return Promise.resolve(config);\n              }\n              return Promise.resolve(null);\n\n            }).catch((err) => {\n              if (!(err instanceof Response)) {\n                this.shouldRunApp = false;\n                console.error(err);\n                this.errorService.emitUnavailableService('ARLAS-persistence');\n              } else {\n                this.emptyMode = true;\n                err.json().then(r => {\n                  console.error(r);\n                  this.fetchInterceptorService.interceptInvalidConfig({\n                    error: new DashboardError(err.status, this.settingsService.getArlasHubUrl()),\n                    forceAction: false,\n                  });\n                });\n                return Promise.resolve(null);\n              }\n            });\n        } else {\n          this.emptyMode = true;\n        }\n      } else {\n        // persistence is not used, we use the config.json file mounted\n        configDataPromise = this.http\n          .get('config.json')\n          .pipe(mergeMap((response) => {\n            configData = response;\n            if (configData.extraConfigs !== undefined) {\n              const promises = new Array<Promise<any>>();\n              configData.extraConfigs.forEach(extraConfig => promises.push(this.loadExtraConfig(extraConfig, configData)));\n              return Promise.all(promises).then(() => configData);\n            } else {\n              return Promise.resolve(configData);\n            }\n          })).toPromise();\n      }\n      resolve(configDataPromise.then(configObject => {\n        if (!this.emptyMode) {\n          return this.validateConfiguration(configObject);\n        } else {\n          return Promise.resolve({});\n        }\n      }));\n    });\n  }\n\n  public setCollaborativeService(data) {\n    if (!this.emptyMode) {\n      return new Promise<any>((resolve, reject) => {\n        this.collaborativesearchService.setConfigService(this.configService);\n        this.collaborativesearchService.setExploreApi(this.arlasExploreApi);\n        this.collaborativesearchService.defaultCollection = this.configService.getValue('arlas.server.collection.name');\n        const maxAge = this.configService.getValue('arlas.server.max_age_cache');\n        this.collaborativesearchService.max_age = maxAge !== undefined ? maxAge : 120;\n        resolve(data);\n      });\n    }\n  }\n\n  public testArlasUp(configData) {\n    if (!this.emptyMode) {\n      return new Promise<any>((resolve, reject) => {\n        this.collaborativesearchService.resolveHits([projType.count, {}], this.collaborativesearchService.collaborations,\n          this.collaborativesearchService.defaultCollection)\n          .subscribe(\n            result => {\n              resolve(result);\n            },\n            error => {\n              reject(error);\n            });\n      });\n    } else {\n      return Promise.resolve(configData);\n    }\n  }\n\n  public getCollections(data) {\n    if (!this.emptyMode) {\n      return new Promise<any>((resolve, reject) => {\n        const collectionName = data.collection;\n        this.collaborativesearchService.list()\n          .subscribe(\n            allCollections => {\n              // mainCollection is included in allCollections\n              allCollections.forEach(c => this.collectionsMap.set(c.collection_name, c.params));\n\n              this.collectionId = allCollections.find(c => c.collection_name === collectionName).params.id_path;\n              resolve(allCollections);\n            },\n            error => {\n              reject(error);\n            });\n      });\n    } else {\n      return Promise.resolve(data);\n    }\n  }\n  /**\n  * Lists the fields for each collection in `collectionNames` list; that are available for exploration with `arlasExploreApi`\n  * @param collectionNames collection names\n  * @returns available fields per collection\n  */\n  public listAvailableFields(collectionNames: Set<string>): Promise<Map<string, Set<string>>> {\n    const availableFieldsPerCollection = new Map<string, Set<string>>();\n    const hiddenAvailableFields = [];\n    return this.collaborativesearchService.list().toPromise().then(\n      (collectionDescriptions: Array<CollectionReferenceDescription>) => {\n        collectionDescriptions.filter((cd: CollectionReferenceDescription) => collectionNames.has(cd.collection_name))\n          .forEach((cd: CollectionReferenceDescription) => {\n            const availableFields = new Set<string>();\n            getFieldProperties(cd.properties).map(p => {\n              if (p.type === 'GEO_POINT') {\n                hiddenAvailableFields.push(p.label + '.lon');\n                hiddenAvailableFields.push(p.label + '.lat');\n              }\n              return p.label;\n            }).forEach(label => availableFields.add(label));\n            availableFields.add(cd.params.id_path);\n            availableFields.add(cd.params.timestamp_path);\n            availableFields.add(cd.params.geometry_path);\n            availableFields.add(cd.params.centroid_path);\n            hiddenAvailableFields.forEach(f => availableFields.add(f));\n            availableFieldsPerCollection.set(cd.collection_name, availableFields);\n          });\n        return availableFieldsPerCollection;\n      });\n  }\n\n  public buildContributor(data) {\n    if (!this.emptyMode) {\n      return new Promise<any>((resolve, reject) => {\n        this.configService.getValue('arlas.web.contributors').forEach(contrib => {\n          const contributorType = contrib.type;\n          const contributorIdentifier = contrib.identifier;\n          if (contributorType === 'resultlist') {\n            this.selectorById = contributorIdentifier;\n          } else if (contributorType === 'histogram') {\n            const aggregationmodels = contrib.aggregationmodels;\n            aggregationmodels.forEach(\n              agg => {\n                if (agg.type === 'datehistogram') {\n                  if (this.temporalContributor.indexOf(contributorIdentifier)) {\n                    this.temporalContributor.push(contributorIdentifier);\n                  }\n                }\n              }\n            );\n          } else if (contributorType === 'swimlane') {\n            const swimlanes = contrib.swimlanes;\n            swimlanes.forEach(swimlane => {\n              swimlane.aggregationmodels.forEach(\n                agg => {\n                  if (agg.type === 'datehistogram') {\n                    if (this.temporalContributor.indexOf(contributorIdentifier)) {\n                      this.temporalContributor.push(contributorIdentifier);\n                    }\n                  }\n                }\n              );\n            });\n          }\n          const contributor = ContributorBuilder.buildContributor(contributorType,\n            contributorIdentifier,\n            this.configService,\n            this.collaborativesearchService,\n            this.settingsService);\n          this.contributorRegistry.set(contributorIdentifier, contributor);\n        });\n        this.analytics = this.configService.getValue('arlas.web.analytics');\n        this.filtersShortcuts = this.configService.getValue('arlas.web.filters_shortcuts');\n        if (this.filtersShortcuts) {\n          this.filtersShortcuts.forEach(fs => {\n            fs.component = this.getShortcutComponent(fs.uuid);\n          });\n        }\n        this.arlasIsUp.next(true);\n        resolve(data);\n      });\n    } else {\n      return Promise.resolve(data);\n    }\n  }\n\n\n  /**\n   * Loads extra configuration declared in the main configuration file.\n   * @param extraConfig This object specifies\n   * the path to the extra configuration file,\n   * the attribute to change in the main configuration file,\n   * and the attribute to take from the extra configuration file.\n   * @param data Content of the extra configuration file\n   */\n  public loadExtraConfig(extraConfig: ExtraConfig, data: Object): Promise<any> {\n    return this.http.get(extraConfig.configPath + '?' + Date.now())\n      .toPromise()\n      .then((extraConfigData) => {\n        if (extraConfigData[extraConfig.replacer] !== undefined) {\n          this.setAttribute(extraConfig.replacedAttribute, extraConfigData[extraConfig.replacer], data);\n        } else {\n          this.shouldRunApp = false;\n          this.errorMessagesList.push('The replacer : ' + extraConfig.replacer + ' does not exist in your '\n            + extraConfig.configPath + ' file.');\n        }\n      })\n      .catch((err: any) => {\n        console.error(err);\n        return Promise.resolve(null);\n      });\n  }\n\n  public changeOrgHeader(org: string, accessToken: string) {\n    this.arlasIamService.setHeaders(org, accessToken);\n    const headers: IamHeader = {\n      Authorization: 'Bearer ' + accessToken,\n      'arlas-org-filter': org,\n    };\n    this.persistenceService.setOptions({ headers });\n    this.permissionService.setOptions({ headers });\n    this.fetchOptions.headers = headers;\n    this.collaborativesearchService.setFetchOptions(this.fetchOptions);\n  }\n\n\n  public load(): Promise<any> {\n    return this.applyAppSettings()\n      .then((s: ArlasSettings) => this.authenticate(s))\n      .then((s: ArlasSettings) => this.enrichHeaders(s))\n      .then((s: ArlasSettings) => this.getAppConfigurationObject(s))\n      .then((data) => this.translationLoaded(data))\n      .then((data) => this.setConfigService(data))\n      .then((data) => this.applyFGA(data))\n      .then((data) => this.setCollaborativeService(data))\n      .then((data) => this.testArlasUp(data))\n      .then((data) => this.getCollections(data))\n      .then((data) => this.buildContributor(data))\n      .catch((err: any) => {\n        this.shouldRunApp = false;\n        if (err instanceof Response) {\n          err.json().then(r => {\n            console.error(r);\n            this.errorService.emitBackendError(r.status, r.message, '');\n          });\n        } else {\n          console.error(err);\n          this.errorService.emitUnavailableService('');\n        }\n        return Promise.resolve(null);\n      }).then((x) => { });\n  }\n\n  private setAttribute(path, value, object) {\n    const pathToList = path.split('.');\n    const pathLength = pathToList.length;\n    for (let i = 0; i < pathLength - 1; i++) {\n      const element = pathToList[i];\n      if (!object[element]) {\n        this.shouldRunApp = false;\n        this.errorMessagesList.push('The attribute : ' + path + ' does not exist in your main configuration.');\n      }\n      object = object[element];\n    }\n    object[pathToList[pathLength - 1]] = value;\n  }\n\n  private getShortcutComponent(uuid: string) {\n    let component: WidgetConfiguration;\n    for (const g of this.analytics) {\n      let clonedComponent: WidgetConfiguration;\n      component = g.components.find(c => c.uuid === uuid);\n      if (!!component) {\n        if (component.componentType === 'histogram') {\n          clonedComponent = Object.assign({}, component);\n          clonedComponent.contributorId = uuid;\n          return clonedComponent;\n        }\n        break;\n      }\n    }\n    return component;\n  }\n\n  private fixLayerStyleInfinity(config) {\n    /** FIX wrong v15 map filters about Infinity values */\n    if (!!config && !!config.arlas && !!config.arlas.web && !!config.arlas.web.components.mapgl) {\n      const layers = config.arlas.web.components.mapgl.input.mapLayers.layers;\n      layers.forEach(layer => {\n        if (!!layer.filter && Array.isArray(layer.filter)) {\n          const filters = [];\n          layer.filter.forEach(expression => {\n            if (Array.isArray(expression) && expression.length === 3) {\n              if (expression[0] === '!=' && expression[2] === 'Infinity') {\n                expression = ['<=', (expression[1] as any).replace(/\\./g, '_'), Number.MAX_VALUE];\n              } else if (expression[0] === '!=' && expression[2] === '-Infinity') {\n                expression = ['>=', (expression[1] as any).replace(/\\./g, '_'), -Number.MAX_VALUE];\n              }\n            }\n            filters.push(expression);\n          });\n          layer.filter = filters;\n        }\n      });\n    }\n    return config;\n  }\n}\n\nexport interface ExtraConfig {\n  configPath: string;\n  replacedAttribute: string;\n  replacer: string;\n}\n\nexport interface ArlasSettings {\n  authentication?: AuthentSetting;\n  persistence?: PersistenceSetting;\n  permission?: PermissionSetting;\n  arlas_wui_url?: string;\n  arlas_builder_url?: string;\n  arlas_hub_url?: string;\n  arlas_iam_wui_url?: string;\n  links?: Array<LinkSettings>;\n  ticketing_key?: string;\n  tab_name?: string;\n  dashboards_shortcut?: boolean;\n  histogram?: HistogramSettings;\n  resultlist?: ResultlistSettings;\n  processes?: Array<ProcessSettings>;\n  geocoding?: GeocodingSetting;\n}\n\nexport interface LinkSettings {\n  name: string;\n  url: string;\n  icon: string;\n  tooltip?: string;\n  check_url: string;\n  check_url_response_type?: string;\n}\n\nexport interface HistogramSettings {\n  max_buckets: number;\n  export_nb_buckets: number;\n}\n\nexport interface ResultlistSettings {\n  enable_export: boolean;\n  export_size: number;\n}\n\nexport interface ProcessSettings {\n  name: string;\n  url?: string;\n  check_url?: string;\n  max_items?: number;\n  settings: {\n    url: string;\n  };\n  status: {\n    url: string;\n  };\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BaseCollectionService } from 'arlas-web-components';\nimport { CollectionUnit, flattenData } from '../../tools/utils';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService, ArlasStartupService } from '../startup/startup.service';\n\n@Injectable()\nexport class ArlasCollectionService extends BaseCollectionService {\n  private appUnits: Map<string, CollectionUnit> = new Map();\n  private displayName: Map<string, string> = new Map();\n  public displayFieldName: Map<string, string> = new Map();\n  public FLAT_CHAR = '_';\n  public constructor(private collaborativeService: ArlasCollaborativesearchService,\n    private configService: ArlasConfigService,\n    private arlasStartupeService: ArlasStartupService\n  ) {\n    super();\n    this._initUnits();\n    this._initDisplayNames();\n  }\n\n  protected _initUnits() {\n    const appUnits = this.configService.getValue('arlas-wui.web.app.units') ?\n      this.configService.getValue('arlas-wui.web.app.units') : [];\n    appUnits.forEach((collectionUnit: CollectionUnit) => this.appUnits.set(collectionUnit.collection, collectionUnit));\n    /** retrocompatibility code for unit*/\n    const appUnit = this.configService.getValue('arlas-wui.web.app.unit');\n    if (appUnit || appUnits.length === 0) {\n      const collectionUnit = {\n        collection: this.collaborativeService.defaultCollection,\n        unit: !!appUnit ? appUnit : this.collaborativeService.defaultCollection,\n        ignored: false\n      };\n      this.appUnits.set(collectionUnit.collection, collectionUnit);\n    }\n    /** end of retrocompatibility code */\n  }\n\n  protected _initDisplayNames() {\n    if (this.arlasStartupeService.shouldRunApp) {\n      for (const key of this.arlasStartupeService.collectionsMap.keys()) {\n        const c = this.arlasStartupeService.collectionsMap.get(key);\n        this.displayName.set(key, c?.display_names?.collection ?? key);\n        const fields = c?.display_names?.fields;\n        if (fields) {\n          for (const f of Object.keys(fields)) {\n            this.displayFieldName.set(this.flatten(f), c?.display_names?.fields[f]);\n          }\n        }\n      }\n    }\n  }\n\n  public getUnit(collectionName: string): string {\n    if (this.appUnits.has(collectionName)) {\n      return this.appUnits.get(collectionName).unit;\n    }\n    return collectionName;\n  };\n\n  public getAllUnits(): CollectionUnit[] {\n    return [...this.appUnits.values()];\n  };\n\n  public getDisplayName(collectionName: string): string {\n    return this.displayName.get(collectionName) || collectionName;\n  }\n\n  public getDisplayFieldName(fieldName: string): string {\n    return this.displayFieldName.get(this.flatten(fieldName)) || this.flatten(fieldName);\n  }\n\n  public isUnitIgnored(collectionName: string): boolean {\n    if (this.appUnits.has(collectionName)) {\n      return this.appUnits.get(collectionName).ignored;\n    }\n    return false;\n  }\n  // Retrieve all collections used in a dashboards\n  public getCollectionFromDashboard(config: any): Set<string> {\n    const flattenedConfig = flattenData(config);\n    const collections = new Set<string>();\n    Object.keys(flattenedConfig)\n      .filter(k =>\n        (k.indexOf('collection') >= 0 || (k.indexOf('additionalCollections') >= 0 && k.indexOf('collectionName') >= 0))\n        &&\n        !k.includes('collection-display-name')\n        &&\n        !k.includes('collectionDisplayName')\n\n      )\n      .forEach(k => collections.add(flattenedConfig[k]));\n    return collections;\n  }\n\n  public flatten(f: string): string {\n    return f?.replace(/\\./g, this.FLAT_CHAR);\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Aggregation, AggregationResponse, ComputationRequest, ComputationResponse, Filter, Hits } from 'arlas-api';\nimport { HistogramContributor, ResultListContributor, TreeContributor } from 'arlas-web-contributors';\nimport { getAggregationPrecision } from 'arlas-web-contributors/utils/histoswimUtils';\nimport { getFieldValue } from 'arlas-web-contributors/utils/utils';\nimport { Collaboration, Contributor, projType } from 'arlas-web-core';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasCollectionService } from '../collection/arlas-collection.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\nimport { ArlasConfigService } from '../startup/startup.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasExportCsvService {\n\n  public constructor(private collaborativesearchService: ArlasCollaborativesearchService, private configService: ArlasConfigService,\n    private settingsService: ArlasSettingsService, private translate: TranslateService,\n    private arlasCollectionService: ArlasCollectionService) { }\n\n  public export(contributor: Contributor, stayAtFirstLevel: boolean, contributorType?: string): Observable<Blob> {\n    return this.compute(contributor, contributorType).pipe(map(data => {\n      const csvData = new Array<Array<string>>();\n      const header = new Array<string>();\n      (<TreeContributor>contributor).getAggregations().forEach(agg => {\n        header.push(this.translate.instant(this.arlasCollectionService.getDisplayFieldName(agg.field)));\n      });\n      header.push(this.translate.instant('count'));\n      if ((<TreeContributor>contributor).getAggregations()[0].metrics) {\n        (<TreeContributor>contributor).getAggregations()[0].metrics.forEach(m => {\n          header.push(this.translate.instant('HEADER_EXPORT',\n            {field: this.translate.instant(this.arlasCollectionService.getDisplayFieldName(m.collect_field)),\n              metric: this.translate.instant(m.collect_fct.toString())\n            }));\n        });\n      }\n      csvData.push(header);\n      this.populateCSV(csvData, null, data, 0, (<TreeContributor>contributor).getAggregations(), stayAtFirstLevel);\n      const CSV = csvData.map(l => l.join(';')).join('\\n');\n      const contentType = 'text/csv';\n      const csvFile = new Blob([CSV], { type: contentType });\n      return csvFile;\n    }));\n  }\n\n  public compute(contributor: Contributor, contributorType?: string): Observable<AggregationResponse> {\n    let aggResponse: Observable<AggregationResponse>;\n    if (!contributorType) {\n      contributorType = this.configService.getValue('arlas.web.contributors')\n        .find(cont => cont.identifier === contributor.identifier).type;\n    }\n    switch (contributorType) {\n      case 'tree': {\n        const aggsOriginal: Aggregation[] = (<TreeContributor>contributor).getAggregations();\n        const aggsForExport = [];\n        aggsOriginal.forEach(agg => {\n          aggsForExport.push(Object.assign({}, agg));\n        });\n        aggsForExport.filter(agg => agg.type === Aggregation.TypeEnum.Term).map(a => a.size = '10000');\n        aggResponse = this.collaborativesearchService.resolveButNotAggregation(\n          [projType.aggregate, aggsForExport], this.collaborativesearchService.collaborations, contributor.collection);\n        break;\n      }\n      case 'histogram': {\n        aggResponse = this.fetchHistogramData$(contributor);\n        break;\n      }\n    }\n    return aggResponse;\n  }\n\n  public fetchHistogramData$(contributor): Observable<AggregationResponse> {\n    const collaborations = new Map<string, Collaboration>();\n    this.collaborativesearchService.collaborations.forEach((k, v) => {\n      collaborations.set(v, k);\n    });\n    const histogramExportMaxBuckets = this.settingsService.getHistogramNbBucketAtExport();\n    const field = (<HistogramContributor>contributor).getField();\n    const aggregations = (<HistogramContributor>contributor).getAggregations();\n    const agg = this.collaborativesearchService\n      .resolveButNotComputation(\n        [\n          projType.compute,\n          <ComputationRequest>{ filter: null, field: field, metric: ComputationRequest.MetricEnum.SPANNING }\n        ],\n        collaborations,\n        contributor.collection\n      )\n      .pipe(\n        map((computationResponse: ComputationResponse) => {\n          const dataRange = computationResponse.value || 0;\n          const aggregationPrecision = getAggregationPrecision(histogramExportMaxBuckets, dataRange, aggregations[0].type);\n          const result = {\n            aggregationPrecision\n          };\n          return result;\n        }),\n        map((r => {\n          aggregations[0].interval = r.aggregationPrecision;\n          return this.collaborativesearchService.resolveButNotAggregation(\n            [projType.aggregate, aggregations], collaborations, contributor.collection);\n        }\n        )),\n        mergeMap(a => a)\n      );\n    return agg;\n  }\n  /**\n   * Fetches the resulist data by taking into account the current sort/geosort, columns and details of the resultlist.\n   * The number of elements fetched is configured at the applicative level with `resultlist.export_size` in settings.yaml .\n   * @param contributor Resultlist contributor\n   * @param filter an optional filter to add to the collaboration filters if needed\n   * @returns an Observable (rxjs) of arlas Hits.\n   */\n  public fetchResultlistData$(contributor: ResultListContributor, filter?: Filter): Observable<Hits> {\n    const size = this.settingsService.getResultlistSettings()?.export_size;\n    return contributor.fetch$(size, contributor.getAllFields().map(af => af.field), filter);\n  }\n\n  /**\n   * Exports hits as CSV file.\n   * The columns of the CSV are retrieved from `contributor.getAllFields()` method.\n   * @param contributor Resultlist contributor\n   * @param hits arlas Hits to be exported as CSV\n   */\n  public exportResultlist(contributor: ResultListContributor, hits: Hits): void {\n    const hitsList = hits.hits;\n    const csvData = new Array<Array<string>>();\n    const fields = contributor.getAllFields();\n    csvData.push(fields.map(h => h.displayName));\n    if (hitsList !== undefined && hitsList.length > 0) {\n      for (let i = 0; i < hitsList.length; i++) {\n        const currentLine = new Array<string>();\n        const data = hitsList[i].data;\n        fields.forEach(f => {\n          const value = getFieldValue(f.field, data);\n          currentLine.push(value !== undefined ? value : '-');\n        });\n        csvData.push(currentLine);\n      }\n    }\n    const CSV = csvData.map(l => l.join(';')).join('\\n');\n    const contentType = 'text/csv';\n    const csvFile = new Blob([CSV], { type: contentType });\n    const a = document.createElement('a');\n    a.download = contributor.getName()\n      .concat('_')\n      .concat(contributor.collection)\n      .concat('_')\n      .concat(new Date().getTime().toString())\n      .concat('.csv');\n    a.href = window.URL.createObjectURL(csvFile);\n    a.dataset.downloadurl = [contentType, a.download, a.href].join(':');\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n  }\n\n  private populateCSV(csvData: Array<Array<string>>, currentLine: Array<string>,\n    aggregationResponse: AggregationResponse,\n    aggregationLevel: number, aggregations: Aggregation[], stayAtFirstLevel: boolean): void {\n    const aggregationBuckets = aggregationResponse.elements;\n    if (aggregationBuckets !== undefined && aggregationBuckets.length > 0 && aggregationResponse.name !== undefined) {\n      const sumOtherDocCounts = aggregationResponse.sumotherdoccounts;\n      for (let i = 0; i < aggregationBuckets.length; i++) {\n        if (aggregationLevel === 0) {\n          currentLine = new Array<string>();\n        }\n        const bucket = aggregationBuckets[i];\n        const fieldValue = bucket.key;\n        currentLine[aggregationLevel] = fieldValue;\n        if (!stayAtFirstLevel && bucket.elements !== undefined && bucket.elements.length > 0 &&\n          bucket.elements[0].elements !== undefined && bucket.elements[0].elements.length > 0) {\n          this.populateCSV(csvData, currentLine, bucket.elements[0], aggregationLevel + 1, aggregations, stayAtFirstLevel);\n          const l = new Array();\n          for (let k = 0; k < aggregations.length; k++) {\n            if (k <= aggregationLevel) {\n              l.push(currentLine[k]);\n            } else {\n              l.push('ALL');\n            }\n          }\n          l.push(bucket.count.toString());\n          if (bucket.metrics) {\n            bucket.metrics.forEach(function (m) {\n              l.push(m.value);\n            });\n          }\n          csvData.push(l);\n        } else {\n          const line = new Array<string>();\n          currentLine.forEach(d => line.push(d));\n          const diff = Math.abs((line.length - aggregations.length));\n          for (let j = 1; j <= diff; j++) {\n            line[aggregationLevel + j] = '';\n          }\n          line.push(bucket.count.toString());\n          if (bucket.metrics) {\n            bucket.metrics.forEach(m => {\n              line.push(m.value);\n            });\n          }\n          csvData.push(line);\n        }\n        if (sumOtherDocCounts > 0 && i === aggregations.length - 1) {\n          const other = new Array();\n          for (let k = 0; k < aggregations.length; k++) {\n            if (k < aggregationLevel) {\n              other.push(currentLine[k]);\n            } else {\n              if (k === aggregationLevel) {\n                other.push('OTHER');\n\n              } else {\n                other.push('');\n              }\n            }\n          }\n          other.push(sumOtherDocCounts.toString());\n          if (bucket.metrics) {\n            bucket.metrics.forEach(m => other.push(''));\n          }\n          csvData.push(other);\n        }\n      }\n    }\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject } from '@angular/core';\nimport { ArlasOverlayRef, HISTOGRAM_TOOLTIP_DATA } from '../../tools/utils';\nimport { HistogramTooltip } from 'arlas-web-components';\n\n@Component({\n  selector: 'arlas-histogram-tooltip-overlay',\n  templateUrl: './histogram-tooltip-overlay.component.html',\n  styleUrls: ['./histogram-tooltip-overlay.component.scss']\n})\nexport class HistogramTooltipOverlayComponent {\n  public interval: {\n    start: Date | number | string;\n    end?: Date | number;\n  };\n\n  public displayText = true;\n\n  public constructor(\n    public overlayRef: ArlasOverlayRef,\n    @Inject(HISTOGRAM_TOOLTIP_DATA) public tooltip: HistogramTooltip\n  ) {\n    this.calculateDate();\n  }\n\n  public calculateDate() {\n    const start = this.tooltip.xStartValue;\n    let end;\n    if (this.tooltip.xEndValue !== null && this.tooltip.xEndValue !== undefined) {\n      end = this.tooltip.xEndValue;\n    }\n    this.interval = {\n      start,\n      end\n    };\n\n    this.displayText = this.interval.end !== null && this.interval.end !== undefined &&\n      this.interval.start !== null && this.interval.start !== undefined;\n  }\n}\n","<div class=\"tooltip\">\n  <div class=\"tooltip__header header\">\n    <div class=\"header-title\">{{ tooltip.title | translate }}</div>\n  </div>\n  <div class=\"tooltip__xLabel label\">\n    {{ tooltip.xLabel | translate }} <span class=\"axis-label\">({{ 'x-axis' | translate }})</span>\n  </div>\n  <div class=\"tooltip__xValue value-label\">\n    <ng-container *ngTemplateOutlet=\"intervalTemplate; context: {value: interval.start}\"></ng-container>\n    <!-- keep this because we ll need this later -->\n    <span class=\"interval-text\" *ngIf=\"displayText\">{{ 'to' | translate }}</span>\n    <ng-container *ngTemplateOutlet=\"intervalTemplate; context: {value: interval.end}\"></ng-container>\n    <ng-container *ngTemplateOutlet=\"intervalTextTemplate;\n      context: {unit:tooltip.xUnit,\n      interval:tooltip.xRange.unit,\n      intervalValue:tooltip.xRange.value,\n      isTime: tooltip.dataType === 'time'}\">\n    </ng-container>\n  </div>\n  <div class=\"tooltip__yLabel label\">\n    {{ tooltip.yLabel | translate }} <span class=\"axis-label\">({{ 'y-axis' | translate }})</span>\n  </div>\n  <div class=\"tooltip__yValue value-label\">\n    <table class=\"values\">\n      <tr *ngFor=\"let y of tooltip.y\">\n        <td>\n          <div class=\"chip\" [style.backgroundColor]=\"y.color\"></div>\n        </td>\n        <td class=\"count\">\n          <div>{{ y.value }}</div>\n        </td>\n        <td *ngIf=\"tooltip?.dataType === 'time'\">\n          <div class=\"value-unit\">\n            {{ ((tooltip.yUnit && tooltip.yUnit.length > 0) ? tooltip.yUnit : y.chartId | getCollectionUnit) | translate }}\n          </div>\n        </td>\n        <td *ngIf=\"tooltip?.dataType !== 'time' && tooltip.yUnit !== undefined && tooltip.yUnit !== ''\">\n          <div class=\"value-unit\">{{ tooltip.yUnit | translate }}</div>\n        </td>\n      </tr>\n    </table>\n  </div>\n</div>\n\n<!-- template for x and y values -->\n<ng-template #intervalTemplate let-value=\"value\" let-isTime=\"isTime\">\n  <ng-container *ngIf=\"value !== undefined && value !== null\">\n      <span class=\"interval-value\">\n        {{ value }}\n     </span>\n  </ng-container>\n</ng-template>\n\n<!-- display the text after the interval -->\n<ng-template #intervalTextTemplate let-interval=\"interval\" let-intervalValue=\"intervalValue\" let-unit=\"unit\"\n             let-isTypeTime=\"isTime\">\n  <span class=\"interval-text\" *ngIf=\"isTypeTime\">{{ intervalValue }}</span>\n  <span class=\"interval-text\" *ngIf=\"!isTypeTime && unit\">{{ unit | translate }}</span>\n  <span class=\"interval-text\" *ngIf=\"interval && isTypeTime\">\n    {{ interval| translate }}\n  </span>\n  <span class=\"interval-text\" *ngIf=\"intervalValue && !isTypeTime\">\n     ({{ 'interval' | translate }} : {{ intervalValue }})\n  </span>\n</ng-template>\n","\n/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject } from '@angular/core';\nimport { ArlasOverlayRef, DONUT_TOOLTIP_DATA } from '../../tools/utils';\nimport { ARLASDonutTooltip } from 'arlas-d3';\n\n@Component({\n  selector: 'arlas-donut-tooltip-overlay',\n  templateUrl: './donut-tooltip-overlay.component.html',\n  styleUrls: ['./donut-tooltip-overlay.component.css']\n})\nexport class DonutTooltipOverlayComponent {\n\n  public constructor(public overlayRef: ArlasOverlayRef, @Inject(DONUT_TOOLTIP_DATA) public tooltip: ARLASDonutTooltip) {}\n\n}\n","<div class=\"wrapper\">\n  <div class=\"node_content\" *ngFor=\"let c of tooltip.content\">\n    <div class=\"category\" [style.borderLeftColor]=\"c.color\">\n      <div class=\"chip\" [style.backgroundColor]=\"c.color\"></div>\n      <div class=\"type\">{{c.value}}</div>\n    </div>\n    <div class=\"value_container\">\n      <div class=\"value\">{{c.metric | formatNumber}}</div>\n      <div class=\"percentage\">{{\"(\" +c.percentage +\" %)\"}}</div>\n    </div>\n  </div>\n</div>\n","\n/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject } from '@angular/core';\nimport { TimelineTooltip } from 'arlas-d3';\nimport { ArlasOverlayRef, CALENDAR_TIMELINE_TOOLTIP_DATA } from '../../tools/utils';\n\n@Component({\n  selector: 'arlas-calendar-timeline-tooltip-overlay',\n  templateUrl: './calendar-timeline-tooltip-overlay.component.html',\n  styleUrls: ['./calendar-timeline-tooltip-overlay.component.css']\n})\nexport class CalendarTimelineTooltipOverlayComponent {\n\n  public constructor(public overlayRef: ArlasOverlayRef, @Inject(CALENDAR_TIMELINE_TOOLTIP_DATA) public tooltip: TimelineTooltip) {}\n\n}\n","<div class=\"wrapper\">\n    <div class=\"xline\" style=\"margin-bottom: 5px;\">\n        <div class=\"title\">\n            <div >{{tooltip?.stringDate}}</div>\n            <div class=\"category\" *ngIf=\"tooltip.data && tooltip.data.metadata && tooltip.data.metadata.name\" >{{tooltip?.metadata?.name}}</div>\n\n        </div>\n        <div class=\"image\" *ngIf=\"tooltip.data && tooltip.data.metadata && tooltip.data.metadata.thumbnail\">\n            <img src=\"{{tooltip.data.metadata.thumbnail}}\" width=\"250\">\n        </div>\n    </div>\n  </div>\n  ","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable, ElementRef, Injector, ComponentRef } from '@angular/core';\nimport { Overlay, OverlayConfig, OriginConnectionPosition, OverlayConnectionPosition, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\nimport { HistogramTooltipOverlayComponent } from '../../components/histogram-tooltip-overlay/histogram-tooltip-overlay.component';\nimport { ArlasOverlayRef, HISTOGRAM_TOOLTIP_DATA, DONUT_TOOLTIP_DATA, CALENDAR_TIMELINE_TOOLTIP_DATA } from '../../tools/utils';\nimport { HistogramTooltip } from 'arlas-web-components';\nimport { ARLASDonutTooltip, TimelineTooltip } from 'arlas-d3';\nimport { DonutTooltipOverlayComponent } from '../../components/donut-tooltip-overlay/donut-tooltip-overlay.component';\nimport { CalendarTimelineTooltipOverlayComponent } from\n  '../../components/calendar-timeline-tooltip-overlay/calendar-timeline-tooltip-overlay.component';\n\n\nexport interface HistogramTooltipConfig {\n  panelClass?: string;\n  hasBackdrop?: boolean;\n  backdropClass?: string;\n  data?: HistogramTooltip;\n}\n\nexport interface CalendarTimelineTooltipConfig {\n  panelClass?: string;\n  hasBackdrop?: boolean;\n  backdropClass?: string;\n  data?: TimelineTooltip;\n}\n\nexport interface DonutTooltipConfig {\n  panelClass?: string;\n  hasBackdrop?: boolean;\n  backdropClass?: string;\n  data?: ARLASDonutTooltip;\n}\n\nconst DEFAULT_TOOLTIP_CONFIG: HistogramTooltipConfig = {\n  hasBackdrop: false,\n  panelClass: 'tm-file-preview-dialog-panel'\n};\n\nconst DEFAULT_TIMELINE_TOOLTIP_CONFIG: CalendarTimelineTooltipConfig = {\n  hasBackdrop: false,\n  panelClass: 'tm-file-preview-dialog-panel'\n};\n\n\n@Injectable()\nexport class ArlasOverlayService {\n\n  public constructor(private overlay: Overlay, private parentOverlay: Overlay, private injector: Injector) { }\n\n  public openHistogramTooltip(config: HistogramTooltipConfig, elementRef: ElementRef, xOffset: number, yOffset: number, right: boolean) {\n    const dialogConfig = { ...DEFAULT_TOOLTIP_CONFIG, ...config };\n\n    const overlayRef = this.createHistogramTooltipOverlay(dialogConfig, elementRef, xOffset, yOffset, right);\n    // Returns an OverlayRef which is a PortalHost\n    const histogramActionsRef = new ArlasOverlayRef(overlayRef);\n    this.attachHistogramTooltipContainer(overlayRef, dialogConfig, histogramActionsRef);\n\n    return histogramActionsRef;\n  }\n\n  public openCalendarTimelineTooltip(config: CalendarTimelineTooltipConfig, elementRef:\n    ElementRef, xOffset: number, yOffset: number, right: boolean) {\n    const dialogConfig = { ...DEFAULT_TIMELINE_TOOLTIP_CONFIG, ...config };\n\n    const overlayRef = this.createCalendarTimelineTooltipOverlay(dialogConfig, elementRef, xOffset, yOffset, right);\n    // Returns an OverlayRef which is a PortalHost\n    const histogramActionsRef = new ArlasOverlayRef(overlayRef);\n    this.attachCalendarTimelineTooltipContainer(overlayRef, dialogConfig, histogramActionsRef);\n\n    return histogramActionsRef;\n  }\n\n  public openDonutTooltip(config: DonutTooltipConfig, elementRef: ElementRef, xOffset: number, yOffset: number, right: boolean) {\n    const dialogConfig = { ...DEFAULT_TOOLTIP_CONFIG, ...config };\n\n    const overlayRef = this.createDonutTooltipOverlay(dialogConfig, elementRef, xOffset, yOffset, right);\n    // Returns an OverlayRef which is a PortalHost\n    const histogramActionsRef = new ArlasOverlayRef(overlayRef);\n    this.attachDonutTooltipContainer(overlayRef, dialogConfig, histogramActionsRef);\n\n    return histogramActionsRef;\n  }\n\n  private getOverlayConfig(config: any, elementRef: ElementRef, xOffset: number, yOffset: number,\n    right: boolean, bottom: boolean): OverlayConfig {\n    const origins = {\n      topLeft: { originX: 'start', originY: 'top' } as OriginConnectionPosition,\n      topRight: { originX: 'end', originY: 'top' } as OriginConnectionPosition,\n      bottomLeft: {\n        originX: 'start',\n        originY: 'bottom'\n      } as OriginConnectionPosition,\n      bottomRight: {\n        originX: 'end',\n        originY: 'bottom'\n      } as OriginConnectionPosition,\n      topCenter: {\n        originX: 'center',\n        originY: 'top'\n      } as OriginConnectionPosition,\n      bottomCenter: {\n        originX: 'center',\n        originY: 'bottom'\n      } as OriginConnectionPosition\n    };\n    const overlays = {\n      topLeft: {\n        overlayX: 'start',\n        overlayY: 'top'\n      } as OverlayConnectionPosition,\n      topRight: {\n        overlayX: 'end',\n        overlayY: 'top'\n      } as OverlayConnectionPosition,\n      bottomLeft: {\n        overlayX: 'start',\n        overlayY: 'bottom'\n      } as OverlayConnectionPosition,\n      bottomRight: {\n        overlayX: 'end',\n        overlayY: 'bottom'\n      } as OverlayConnectionPosition,\n      topCenter: {\n        overlayX: 'center',\n        overlayY: 'top'\n      } as OverlayConnectionPosition,\n      bottomCenter: {\n        overlayX: 'center',\n        overlayY: 'bottom'\n      } as OverlayConnectionPosition\n    };\n    const origin = right ? (bottom ? origins.bottomRight : origins.topRight) : (bottom ? origins.bottomLeft : origins.topLeft);\n    const overlay = right ? (bottom ? overlays.bottomRight : overlays.topRight) : (bottom ? overlays.bottomLeft : overlays.topLeft);\n    const positionStrategy = this.overlay.position().flexibleConnectedTo(elementRef)\n      .withDefaultOffsetX(xOffset)\n      .withDefaultOffsetY(yOffset).withPositions([{\n        originX: origin.originX,\n        originY: origin.originY,\n        overlayX: overlay.overlayX,\n        overlayY: overlay.overlayY\n      }]);\n\n\n    const overlayConfig = new OverlayConfig({\n      hasBackdrop: config.hasBackdrop,\n      backdropClass: config.backdropClass,\n      panelClass: config.panelClass,\n      scrollStrategy: this.overlay.scrollStrategies.close(),\n      positionStrategy\n    });\n\n    return overlayConfig;\n  }\n\n  private createHistogramTooltipOverlay(config: HistogramTooltipConfig, elementRef: ElementRef, xOffset: number, yOffset: number,\n    right: boolean) {\n    // Returns an OverlayConfig\n    const overlayConfig = this.getOverlayConfig(config, elementRef, xOffset, yOffset, right, /** bottom */ false);\n\n    // Returns an OverlayRef\n    return this.overlay.create(overlayConfig);\n  }\n\n  private createCalendarTimelineTooltipOverlay(config: CalendarTimelineTooltipConfig, elementRef: ElementRef, xOffset: number, yOffset: number,\n    right: boolean) {\n    // Returns an OverlayConfig\n    const overlayConfig = this.getOverlayConfig(config, elementRef, xOffset, yOffset, right, /** bottom */ true);\n\n    // Returns an OverlayRef\n    return this.overlay.create(overlayConfig);\n  }\n\n\n  private createDonutTooltipOverlay(config: DonutTooltipConfig, elementRef: ElementRef, xOffset: number, yOffset: number,\n    right: boolean) {\n    // Returns an OverlayConfig\n    const overlayConfig = this.getOverlayConfig(config, elementRef, xOffset, yOffset, right, /** bottom */ true);\n\n    // Returns an OverlayRef\n    return this.overlay.create(overlayConfig);\n  }\n\n  private createHistogramTooltipInjector(config: HistogramTooltipConfig, ref: ArlasOverlayRef): Injector {\n    /** PortalInjector is deprecated */\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: ArlasOverlayRef, useValue: ref },\n        { provide: HISTOGRAM_TOOLTIP_DATA, useValue: config.data }\n      ]\n    });\n  }\n\n  private createCalendarTimelineTooltipInjector(config: CalendarTimelineTooltipConfig, ref: ArlasOverlayRef): Injector {\n    /** PortalInjector is deprecated */\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: ArlasOverlayRef, useValue: ref },\n        { provide: CALENDAR_TIMELINE_TOOLTIP_DATA, useValue: config.data }\n      ]\n    });\n  }\n\n  private createDonutTooltipInjector(config: DonutTooltipConfig, ref: ArlasOverlayRef): Injector {\n    /** PortalInjector is deprecated */\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: ArlasOverlayRef, useValue: ref },\n        { provide: DONUT_TOOLTIP_DATA, useValue: config.data }\n      ]\n    });\n  }\n\n  private attachHistogramTooltipContainer(overlayRef: OverlayRef, config: HistogramTooltipConfig, arlasOverlayRef: ArlasOverlayRef) {\n    const injector = this.createHistogramTooltipInjector(config, arlasOverlayRef);\n    const containerPortal = new ComponentPortal(HistogramTooltipOverlayComponent, null, injector);\n    const containerRef: ComponentRef<HistogramTooltipOverlayComponent> = overlayRef.attach(containerPortal);\n    return containerRef.instance;\n  }\n\n  private attachCalendarTimelineTooltipContainer(overlayRef: OverlayRef, config: CalendarTimelineTooltipConfig,\n    arlasOverlayRef: ArlasOverlayRef) {\n    const injector = this.createCalendarTimelineTooltipInjector(config, arlasOverlayRef);\n    const containerPortal = new ComponentPortal(CalendarTimelineTooltipOverlayComponent, null, injector);\n    const containerRef: ComponentRef<CalendarTimelineTooltipOverlayComponent> = overlayRef.attach(containerPortal);\n    return containerRef.instance;\n  }\n\n  private attachDonutTooltipContainer(overlayRef: OverlayRef, config: DonutTooltipConfig, arlasOverlayRef: ArlasOverlayRef) {\n    const injector = this.createDonutTooltipInjector(config, arlasOverlayRef);\n    const containerPortal = new ComponentPortal(DonutTooltipOverlayComponent, null, injector);\n    const containerRef: ComponentRef<DonutTooltipOverlayComponent> = overlayRef.attach(containerPortal);\n    return containerRef.instance;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { WidgetConfiguration } from '../../tools/utils';\n\nexport interface FilterShortcutConfiguration {\n  uuid: string;\n  title: string;\n  order: 1;\n  component?: WidgetConfiguration;\n}\n\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport function isShortcutID(id: string): boolean {\n  if (!!id.match(UUID_REGEX)) {\n    return id.match(UUID_REGEX).length !== 0;\n  } else {\n    return false;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { ArlasCollaborativesearchService } from '../services/collaborative-search/arlas.collaborative-search.service';\n\n/**\n * Checks whether the given contributor is currently updating its data.\n * To check whenever a collaboration happens whether the contributor is updating,\n * use the CollaborativeSearchService's totalSubscribe.\n */\n@Pipe({\n  name: 'contributorUpdating'\n})\nexport class ContributorUpdatingPipe implements PipeTransform {\n\n  public constructor(private collaborativeService: ArlasCollaborativesearchService) {}\n\n  public transform(contributorId: string, onGoingSubs: number): boolean {\n    return this.collaborativeService.registry.get(contributorId)?.isDataUpdating === true;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {\n  AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter,\n  Input, OnDestroy, OnInit, Output, ViewChild\n} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DataType, HistogramComponent, HistogramTooltip } from 'arlas-web-components';\nimport { DetailedHistogramContributor, HistogramContributor } from 'arlas-web-contributors';\nimport { SelectedOutputValues } from 'arlas-web-contributors/models/models';\nimport { OperationEnum } from 'arlas-web-core';\nimport { Subject, filter, takeUntil } from 'rxjs';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasExportCsvService } from '../../services/export-csv/export-csv.service';\nimport { ArlasOverlayService } from '../../services/overlays/overlay.service';\nimport { ArlasConfigService } from '../../services/startup/startup.service';\nimport { ArlasOverlayRef, SpinnerOptions } from '../../tools/utils';\nimport { isShortcutID } from '../filter-shortcut/filter-shortcut.utils';\nimport { DEFAULT_SPINNER_OPTIONS } from '../progress-spinner/progress-spinner.component';\n\n\n/**\n * A Widget wraps a component from ARLAS-web-components and bind it to its contributor. The component has thus input data to plot.\n * Note: This component is binded to ARLAS-wui configuration\n */\n@Component({\n  selector: 'arlas-tool-histogram-widget',\n  templateUrl: './histogram-widget.component.html',\n  styleUrls: ['./histogram-widget.component.css']\n})\nexport class HistogramWidgetComponent implements OnInit, OnDestroy, AfterViewInit {\n\n  public showDetailedHistogram = false;\n  public detailedContributor: DetailedHistogramContributor;\n  public detailedTimelineIntervalSelection: SelectedOutputValues;\n  public showSpinner = false;\n  private histogramIsFiltered = false;\n  private applicationFirstLoad = false;\n  private isDetailedIntervalBrushed = false;\n\n  public tooltipEvent: Subject<HistogramTooltip> = new Subject<HistogramTooltip>();\n\n  public histogramOverlayRef: ArlasOverlayRef;\n\n  @Input() public contributor: HistogramContributor;\n  @Input() public componentInputs;\n  /**\n   * @Input : Angular\n   * @description Whether we dispylay the export csv button\n   */\n  @Input() public showExportCsv = false;\n  /**\n   * @Input : Angular\n   * @description Position of the widget in the group\n   */\n  @Input() public position: number;\n\n  /**\n   * @Input : Angular\n   * @description Number of widgets in the group to whom this widget belongs\n   */\n  @Input() public groupLength: number;\n\n  /**\n   * @Input : Angular\n   * @description Spinner options\n   */\n  @Input() public spinnerOptions: SpinnerOptions = DEFAULT_SPINNER_OPTIONS;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display a detailed histogram\n   */\n  @Input() public noDetail: boolean;\n\n  @Output() public exportCsvEvent: Subject<{ contributor: HistogramContributor; type: string; firstLevel: boolean; }> = new Subject();\n\n\n\n  /**\n   * @Output : Angular\n   * @description Emits an output that comes from the component (ARLAS-web-components). The emitted output has information about\n   * the `origin` which is the contributor id of the component; `event` the name of the event; and eventually `data` which contains\n   * the emitted data from the component.\n   */\n  @Output() public outEvents: Subject<{ origin: string; event: string; data?: any; }>\n    = new Subject<{ origin: string; event: string; data?: any; }>();\n\n  @Output() public currentInterval: EventEmitter<string> = new EventEmitter();\n\n  @ViewChild('histogram', { static: false }) public histogramComponent: HistogramComponent;\n  @ViewChild('detailedhistogram', { static: false }) public detailedHistogramComponent: HistogramComponent;\n\n  private _onDestroy$ = new Subject<boolean>();\n\n  public constructor(\n    protected arlasCollaborativesearchService: ArlasCollaborativesearchService,\n    private arlasConfigurationService: ArlasConfigService,\n    private cdr: ChangeDetectorRef,\n    public translate: TranslateService,\n    public arlasExportCsvService: ArlasExportCsvService,\n    private arlasOverlayService: ArlasOverlayService\n  ) { }\n\n  public initDetailedContributor() {\n    if (!!this.contributor) {\n      this.detailedContributor = new DetailedHistogramContributor(\n        this.contributor.collection + '-'\n        + this.contributor.identifier + '-arlas__detailed',\n        this.arlasCollaborativesearchService, this.arlasConfigurationService, this.contributor.collection, false);\n      this.contributor.detailedHistrogramContributor = this.detailedContributor;\n      this.detailedContributor.updateData = false;\n      this.detailedContributor.range = undefined;\n      this.detailedContributor.annexedContributorId = this.contributor.identifier;\n      this.detailedContributor.useUtc = this.contributor.useUtc;\n      this.detailedContributor.selectionExtentPercentage = 0.02;\n      const detailedNbBuckets = !!this.contributor.getNbBuckets() ? this.contributor.getNbBuckets() : 50;\n      this.detailedContributor.setNbBuckets(detailedNbBuckets);\n      this.detailedContributor.setName(this.contributor.getName() + '__detailed');\n      this.detailedContributor.init(this.contributor.getAggregations(), this.contributor.getField(),\n        this.contributor.getJsonPath(), this.contributor.additionalCollections);\n    }\n  }\n\n  public ngOnInit() {\n    if (!this.noDetail) {\n      this.initDetailedContributor();\n      this.showDetailedHistogramOnCollaborationEnd();\n    }\n  }\n\n  public ngAfterViewInit() {\n    this.checkDisplayDetailedHistogram();\n  }\n\n  public ngOnDestroy() {\n    this.tooltipEvent.complete();\n    this.tooltipEvent.unsubscribe();\n\n    this.exportCsvEvent.complete();\n    this.exportCsvEvent.unsubscribe();\n\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n\n  public exportCsv(contributor: HistogramContributor) {\n    this.exportCsvEvent.next({\n      contributor,\n      type: 'histogram',\n      firstLevel: false\n    });\n  }\n\n  /**\n   * Recalculates the new data of detailed histogram and resets its own current selection.\n   * @param selections List containing only the current selection of detailed histogram\n   */\n  public onDetailedIntervalBrushed(selections: SelectedOutputValues[]): void {\n    this.showSpinner = true;\n    this.isDetailedIntervalBrushed = true;\n    this.detailedTimelineIntervalSelection = { startvalue: selections[0].startvalue, endvalue: selections[0].endvalue };\n    this.contributor.valueChanged(this.contributor.intervalListSelection.concat(selections));\n  }\n\n\n  /** When the main histogram selection is brushed\n   * Hide the detailed histogram if the selection range is greater than 20% of the histogram range\n   */\n  public onMainIntervalBrushed(event) {\n    const histogramRange = this.contributor.range;\n    const selection = event[event.length - 1];\n    if (histogramRange && !!selection) {\n      const detailedHistogramRange = (+selection.endvalue - +selection.startvalue);\n      this.showDetailedHistogram = !this.noDetail && (detailedHistogramRange <= 0.2 * histogramRange);\n      this.resizeMainHistogram();\n      if (!!this.detailedContributor) {\n        this.detailedContributor.updateData = this.showDetailedHistogram;\n      }\n    }\n    this.contributor.valueChanged(event);\n    this.showSpinner = this.showDetailedHistogram;\n  }\n\n  /** reposition interval of the main histogram after the detail histogram finishes plotting */\n  public afterDetailedDataPlotted(e: string) {\n    if (this.detailedContributor) {\n      if (this.isDetailedIntervalBrushed) {  // If detailed histogram is replotted after moving its own brush.\n        // Reset current selection of detailed histogram after it is plotted\n        this.detailedTimelineIntervalSelection = {\n          startvalue: this.detailedContributor.currentSelectedInterval.startvalue,\n          endvalue: this.detailedContributor.currentSelectedInterval.endvalue\n        };\n        // Apply the current selection of detailed histogram on the main histogram\n        this.contributor.intervalSelection = {\n          startvalue: this.detailedContributor.currentSelectedInterval.startvalue,\n          endvalue: this.detailedContributor.currentSelectedInterval.endvalue\n        };\n      } else { // If detailed histogram is replotted after moving the brush of the main histogram or when the app is loaded.\n        const selection = this.detailedContributor.currentSelectedInterval;\n        if (selection) {\n          this.detailedTimelineIntervalSelection = { startvalue: selection.startvalue, endvalue: selection.endvalue };\n        } else {\n          this.applicationFirstLoad = true;\n        }\n      }\n      this.isDetailedIntervalBrushed = false;\n      this.cdr.detectChanges();\n    }\n  }\n\n  public showHistogramTooltip(tooltip: HistogramTooltip, e: ElementRef, xOffset: number, yOffset: number) {\n    if (!!this.histogramOverlayRef) {\n      this.histogramOverlayRef.close();\n    }\n    if (!!tooltip && tooltip.shown) {\n      this.histogramOverlayRef = this.arlasOverlayService.openHistogramTooltip({ data: tooltip }, e, xOffset, yOffset, false);\n    }\n  }\n\n  public hideHistogramTooltip() {\n    if (!!this.histogramOverlayRef) {\n      this.histogramOverlayRef.close();\n    }\n  }\n\n  public emitTooltip(tooltip, e: ElementRef, detailed: boolean) {\n    let yOffset = 20;\n    if (detailed) {\n      yOffset = 20;\n    }\n    const analyticsBoardWidth = 445;\n    let itemPerLine = 1;\n    let xOffset = 470;\n    if (this.componentInputs.chartWidth === Math.ceil(analyticsBoardWidth / 2) - 6 ||\n      this.componentInputs.chartWidth === Math.ceil(analyticsBoardWidth / 2) - 12) {\n      itemPerLine = 2;\n      if (this.position % itemPerLine === 1) {\n        xOffset = 240;\n      }\n    } else if (this.componentInputs.chartWidth === Math.ceil(analyticsBoardWidth / 3) - 6 ||\n      this.componentInputs.chartWidth === Math.ceil(analyticsBoardWidth / 3) - 12) {\n      itemPerLine = 3;\n      if (this.position % itemPerLine === 1) {\n        xOffset = 320;\n        if (this.position === this.groupLength - 1) {\n          xOffset = 245;\n        }\n      } else if (this.position % itemPerLine === 2) {\n        xOffset = 170;\n      }\n    } else if (isShortcutID(this.contributor.identifier)) {\n      xOffset = 20;\n      yOffset = 120;\n    }\n    this.showHistogramTooltip(tooltip, e, xOffset, yOffset);\n  }\n\n  private resizeMainHistogram() {\n    this.histogramComponent.histogram.histogramParams.chartHeight = this.showDetailedHistogram ?\n      this.componentInputs.chartHeight * 0.5 : this.componentInputs.chartHeight;\n    this.histogramComponent.histogram.histogramParams.yLabels = this.showDetailedHistogram ? 2 : this.componentInputs.yLabels;\n    this.histogramComponent.resizeHistogram();\n  }\n\n  /** show detailed histogram if selection range is less than 20% of the main histogram range */\n  private showDetailedHistogramOnCollaborationEnd(): void {\n    this.arlasCollaborativesearchService.collaborationBus.pipe(filter(c => ((!!this.contributor && this.histogramComponent\n      && c.id === this.contributor.identifier) || c.all)), takeUntil(this._onDestroy$))\n      .subscribe(c => {\n        if (c.operation === OperationEnum.remove) {\n          this.histogramIsFiltered = false;\n          this.hideDetailedHistogram();\n          this.histogramComponent.histogram.histogramParams.chartHeight = this.componentInputs.chartHeight;\n          this.histogramComponent.resizeHistogram();\n        } else if (c.operation === OperationEnum.add) {\n          this.histogramIsFiltered = true;\n          let left = this.histogramComponent.histogram.histogramParams.startValue;\n          let right = this.histogramComponent.histogram.histogramParams.endValue;\n          if (this.histogramComponent.dataType === DataType.time) {\n            this.currentInterval.emit(`${left} - ${right}`);\n          } else {\n            if (this.histogramComponent.xUnit) {\n              left = left + ' ' + this.histogramComponent.xUnit;\n              right = right + ' ' + this.histogramComponent.xUnit;\n            }\n            this.currentInterval.emit(`${left} - ${right}`);\n          }\n          this.checkDisplayDetailedHistogram();\n        }\n      });\n\n    this.arlasCollaborativesearchService.ongoingSubscribe.pipe(takeUntil(this._onDestroy$)).subscribe(nb => {\n      if (this.arlasCollaborativesearchService.totalSubscribe === 0 && this.histogramIsFiltered) {\n        this.checkDisplayDetailedHistogram();\n      }\n    });\n  }\n\n  /**\n   * Based on the extent of the selection of the histogram, checks whether the detailed histogram should be displayed.\n   * If so, resizes the histograms and fetches data if no data is present for the detailed histogram.\n   * Otherwise, hides the detailed histogram, and resizes the main one.\n   */\n  private checkDisplayDetailedHistogram() {\n    const histogramRange = this.contributor?.range;\n    this.showSpinner = false;\n    const selection = this.contributor?.intervalSelection;\n    if (histogramRange && !!selection) {\n      const detailedHistogramRange = (+selection.endvalue - +selection.startvalue);\n      this.showDetailedHistogram = (detailedHistogramRange <= 0.2 * histogramRange);\n      this.resizeMainHistogram();\n      if (this.showDetailedHistogram) {\n        this.histogramComponent.histogram.histogramParams.topOffsetRemoveInterval = 0;\n        if (!this.detailedContributor) {\n          this.initDetailedContributor();\n        }\n        this.detailedContributor.updateData = true;\n        /** If no data has been fetched previously in the detailed contributor, then the range is necessarily undefined\n         * Which means we should trigger the collaboration of th\n         */\n        if (this.detailedContributor.range === undefined || this.detailedContributor.range === null) {\n          // Simulate a collaboration event that will result in a fetchData\n          this.detailedContributor.updateFromCollaboration({\n            id: 'url',\n            operation: OperationEnum.add,\n            all: false\n          });\n        }\n\n        if (this.detailedHistogramComponent) {\n          this.detailedHistogramComponent.histogram.histogramParams.chartHeight = this.componentInputs.chartHeight;\n          this.detailedHistogramComponent.resizeHistogram();\n        }\n      } else {\n        this.hideDetailedHistogram();\n      }\n      if (this.applicationFirstLoad && !!this.detailedContributor && this.detailedContributor.currentSelectedInterval) {\n        // Sets current selection of detailed histogram\n        const select = this.detailedContributor.currentSelectedInterval;\n        this.detailedTimelineIntervalSelection = { startvalue: select.startvalue, endvalue: select.endvalue };\n        this.applicationFirstLoad = false;\n      }\n    } else {\n      this.hideDetailedHistogram();\n      this.histogramComponent.histogram.histogramParams.chartHeight = this.componentInputs.chartHeight;\n      this.histogramComponent.resizeHistogram();\n    }\n  }\n\n  private hideDetailedHistogram() {\n    this.showDetailedHistogram = false;\n    this.histogramComponent.histogram.histogramParams.topOffsetRemoveInterval = this.componentInputs.topOffsetRemoveInterval;\n    if (!!this.detailedContributor) {\n      this.detailedContributor.updateData = false;\n      this.detailedContributor.range = undefined;\n    }\n  }\n}\n","<div [class.detail-status]=\"showDetailedHistogram\">\n  <arlas-tool-progress-spinner [strokeWidth]=\"spinnerOptions?.strokeWidth\" [color]=\"spinnerOptions?.color\"\n    [diameter]=\"spinnerOptions?.diameter\"\n    [hidden]=\"!(showSpinner || (!!detailedContributor && (detailedContributor.identifier | contributorUpdating:arlasCollaborativesearchService.totalSubscribe))\n      || (!!contributor && (contributor.identifier | contributorUpdating:arlasCollaborativesearchService.totalSubscribe)))\"></arlas-tool-progress-spinner>\n  <div (mouseleave)=\"hideHistogramTooltip()\" #detailed class=\"detailed-histogram\" [class.displayed-detail]=\"showDetailedHistogram\" *ngIf=\"showDetailedHistogram\">\n    <button *ngIf=\"showExportCsv\" id=\"export-csv\" matTooltip=\"{{'Export' | translate }}\" class=\"export-csv-button\"\n      (click)=\"exportCsv(detailedContributor)\">\n      <mat-icon class=\"analytics-board-panel-icon export-csv\">get_app</mat-icon>\n    </button>\n    <arlas-histogram class=\"histogram-container\" #detailedhistogram [intervalListSelection]=\"detailedContributor?.intervalListSelection\"\n      [intervalSelection]=\"detailedTimelineIntervalSelection\" (dataPlottedEvent)=\"afterDetailedDataPlotted($event)\"\n      [data]=\"detailedContributor?.chartData\" (valuesListChangedEvent)=\"onDetailedIntervalBrushed($event)\"\n      [id]=\"componentInputs?.id\" [dataType]=\"componentInputs?.dataType\" [dataUnit]=\"componentInputs?.dataUnit\"\n      [valuesDateFormat]=\"componentInputs?.valuesDateFormat\"\n      [isHistogramSelectable]=\"componentInputs?.isHistogramSelectable\"\n      [multiselectable]=\"componentInputs?.multiselectable\"\n      [topOffsetRemoveInterval]=\"componentInputs?.topOffsetRemoveInterval\"\n      [leftOffsetRemoveInterval]=\"componentInputs?.leftOffsetRemoveInterval\"\n      [brushHandlesHeightWeight]=\"componentInputs?.brushHandlesHeightWeight\" [chartType]=\"componentInputs?.chartType\"\n      [chartTitle]=\"componentInputs?.chartTitle\" [chartWidth]=\"componentInputs?.chartWidth\"\n      [chartHeight]=\"componentInputs?.chartHeight\" [customizedCssClass]=\"componentInputs?.customizedCssClass\"\n      [xAxisPosition]=\"0\" [descriptionPosition]=\"componentInputs?.descriptionPosition\"\n      [xTicks]=\"componentInputs?.xTicks\" [yTicks]=\"componentInputs?.yTicks\" [xLabels]=\"componentInputs?.xLabels\"\n      [yLabels]=\"componentInputs?.yLabels\" [showXTicks]=\"componentInputs?.showXTicks\"\n      [showYTicks]=\"componentInputs?.showYTicks\" [showXLabels]=\"componentInputs?.showXLabels\"\n      [showYLabels]=\"componentInputs?.showYLabels\" [ticksDateFormat]=\"componentInputs?.ticksDateFormat\"\n      [isSmoothedCurve]=\"componentInputs?.isSmoothedCurve\" [barWeight]=\"componentInputs?.barWeight\"\n      [paletteColors]=\"componentInputs?.paletteColors\"\n      [applyOffsetOnAreaChart]=\"componentInputs?.applyOffsetOnAreaChart\"\n      [displayOnlyIntervalsWithData]=\"componentInputs?.displayOnlyIntervalsWithData\"\n      [yAxisStartsFromZero]=\"componentInputs?.yAxisStartsFromZero\" [showStripes]=\"componentInputs?.showStripes\"\n      [chartXLabel]=\"componentInputs?.chartXLabel\" [shortYLabels]=\"componentInputs?.shortYLabels\"\n      [useUtc]=\"detailedContributor?.useUtc\"\n      (tooltipEvent)=\"emitTooltip($event,detailed, true)\"\n      [xUnit]=\"componentInputs?.xUnit\" [yUnit]=\"componentInputs?.yUnit\"></arlas-histogram>\n  </div>\n\n  <div style=\"position: relative;\" (mouseleave)=\"hideHistogramTooltip()\" #main>\n    <button *ngIf=\"showExportCsv\" id=\"export-csv\" matTooltip=\"{{'Export' | translate }}\" class=\"export-csv-button\"\n      (click)=\"exportCsv(contributor)\">\n      <mat-icon class=\"analytics-board-panel-icon export-csv\">get_app</mat-icon>\n    </button>\n    <arlas-histogram class=\"histogram-container\" #histogram [intervalListSelection]=\"contributor?.intervalListSelection\"\n      [intervalSelection]=\"contributor?.intervalSelection\" [data]=\"contributor?.chartData\"\n      (valuesListChangedEvent)=\"onMainIntervalBrushed($event)\"\n      [id]=\"componentInputs?.id\" [dataType]=\"componentInputs?.dataType\" [dataUnit]=\"componentInputs?.dataUnit\"\n      [valuesDateFormat]=\"componentInputs?.valuesDateFormat\"\n      [isHistogramSelectable]=\"componentInputs?.isHistogramSelectable\"\n      [multiselectable]=\"componentInputs?.multiselectable\"\n      [topOffsetRemoveInterval]=\"componentInputs?.topOffsetRemoveInterval\"\n      [leftOffsetRemoveInterval]=\"componentInputs?.leftOffsetRemoveInterval\"\n      [brushHandlesHeightWeight]=\"componentInputs?.brushHandlesHeightWeight\" [chartType]=\"componentInputs?.chartType\"\n      [chartTitle]=\"componentInputs?.chartTitle\" [chartWidth]=\"componentInputs?.chartWidth\"\n      [chartHeight]=\"componentInputs?.chartHeight\" [customizedCssClass]=\"componentInputs?.customizedCssClass\"\n      [xAxisPosition]=\"componentInputs?.xAxisPosition\" [descriptionPosition]=\"componentInputs?.descriptionPosition\"\n      [xTicks]=\"componentInputs?.xTicks\" [yTicks]=\"componentInputs?.yTicks\" [xLabels]=\"componentInputs?.xLabels\"\n      [yLabels]=\"componentInputs?.yLabels\" [showXTicks]=\"componentInputs?.showXTicks\"\n      [showYTicks]=\"componentInputs?.showYTicks\" [showXLabels]=\"componentInputs?.showXLabels\"\n      [showYLabels]=\"componentInputs?.showYLabels\" [ticksDateFormat]=\"componentInputs?.ticksDateFormat\"\n      [isSmoothedCurve]=\"componentInputs?.isSmoothedCurve\" [barWeight]=\"componentInputs?.barWeight\"\n      [paletteColors]=\"componentInputs?.paletteColors\" [applyOffsetOnAreaChart]=\"componentInputs?.applyOffsetOnAreaChart\"\n      [displayOnlyIntervalsWithData]=\"componentInputs?.displayOnlyIntervalsWithData\"\n      [yAxisStartsFromZero]=\"componentInputs?.yAxisStartsFromZero\" [showStripes]=\"componentInputs?.showStripes\"\n      [chartXLabel]=\"componentInputs?.chartXLabel\"\n      [chartYLabel]=\"componentInputs?.chartYLabel\" [shortYLabels]=\"componentInputs?.shortYLabels\"\n      [useUtc]=\"contributor?.useUtc\"\n      (tooltipEvent)=\"emitTooltip($event, main, false)\"\n      [xUnit]=\"componentInputs?.xUnit\" [yUnit]=\"componentInputs?.yUnit\"></arlas-histogram>\n  </div>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, ElementRef, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Expression } from 'arlas-api';\nimport { ARLASDonutTooltip, Position, SwimlaneMode, SwimlaneRepresentation } from 'arlas-d3';\nimport { CellBackgroundStyleEnum, ChartType, DataType, HistogramComponent } from 'arlas-web-components';\nimport { ComputeConfig, MetricsTableContributor, TreeContributor } from 'arlas-web-contributors';\nimport { CollaborationEvent, Contributor, OperationEnum } from 'arlas-web-core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasExportCsvService } from '../../services/export-csv/export-csv.service';\nimport { ArlasOverlayService } from '../../services/overlays/overlay.service';\nimport { ArlasStartupService } from '../../services/startup/startup.service';\nimport { ArlasOverlayRef, SpinnerOptions } from '../../tools/utils';\nimport { DEFAULT_SPINNER_OPTIONS } from '../progress-spinner/progress-spinner.component';\n\n/**\n * A Widget wraps a component from ARLAS-web-components and bind it to its contributor. The component has thus input data to plot.\n * Note: This component is binded to ARLAS-wui configuration\n */\n@Component({\n  selector: 'arlas-tool-widget',\n  templateUrl: './widget.component.html',\n  styleUrls: ['./widget.component.scss']\n})\nexport class WidgetComponent implements OnInit {\n\n  public chartType = ChartType;\n  public contributorType: string;\n  public contributor;\n  public swimSelected;\n  public swimlanes = [];\n  public indeterminatedItems: Set<string> = new Set<string>();\n  public highlightItems: Set<string> = new Set<string>();\n  public showSwimlaneDropDown: boolean;\n  public graphParam: any = {};\n  public metricApproximate = false;\n  public donutOverlayRef: ArlasOverlayRef;\n\n\n  @Input() public componentType: string;\n\n  /**\n   * @Input : Angular\n   * @description Identifier of the contributor that serves data to the component\n   */\n  @Input() public contributorId: string;\n  /**\n   * @Input : Angular\n   * @description Inputs of one of the ARLAS-web-components\n   */\n  @Input() public componentParams: any;\n\n  /**\n   * @Input : Angular\n   * @description Whether we dispylay the export csv button\n   */\n  @Input() public showExportCsv = false;\n\n\n  /**\n   * @Input : Angular\n   * @description Spinner options\n   */\n  @Input() public spinnerOptions: SpinnerOptions = DEFAULT_SPINNER_OPTIONS;\n\n  /**\n   * @Input : Angular\n   * @description Position of the widget in the group\n   */\n  @Input() public position: number;\n\n  /**\n   * @Input : Angular\n   * @description Number of widgets in the group to whom this widget belongs\n   */\n  @Input() public groupLength: number;\n\n  /**\n   * @Input : Angular\n   * @description Whether the widget has to display a detailed version of itself. Currently only used for histograms\n   */\n  @Input() public noDetail: boolean;\n\n  /**\n   * @Output : Angular\n   * @description Emits an output that comes from the component (ARLAS-web-components). The emitted output has information about\n   * the `origin` which is the contributor id of the component; `event` the name of the event; and eventually `data` which contains\n   * the emitted data from the component.\n   */\n  @Output() public outEvents: Subject<{ origin: string; event: string; data?: any; }>\n    = new Subject<{ origin: string; event: string; data?: any; }>();\n\n  @ViewChild('histogram', { static: false }) public histogramComponent: HistogramComponent;\n\n  private _onDestroy$ = new Subject<boolean>();\n\n  public constructor(private arlasStartupService: ArlasStartupService,\n    private arlasCollaborativesearchService: ArlasCollaborativesearchService,\n    private arlasOverlayService: ArlasOverlayService,\n    public translate: TranslateService, public arlasExportCsvService: ArlasExportCsvService\n  ) { }\n\n  public showDonutTooltip(tooltip: ARLASDonutTooltip, e: ElementRef) {\n    if (!!this.donutOverlayRef) {\n      this.donutOverlayRef.close();\n    }\n    /** get offset */\n    let itemPerLine = 1;\n    let xOffset = 470;\n    if (this.graphParam.diameter === 170) {\n      itemPerLine = 2;\n      if (this.position % itemPerLine === 1) {\n        xOffset = 240;\n      }\n    } else if (this.graphParam.diameter === 125) {\n      itemPerLine = 3;\n      if (this.position % itemPerLine === 1) {\n        xOffset = 320;\n        if (this.position === this.groupLength - 1) {\n          xOffset = 245;\n        }\n      } else if (this.position % itemPerLine === 2) {\n        xOffset = 170;\n      }\n    }\n    if (!!tooltip && tooltip.isShown) {\n      this.donutOverlayRef = this.arlasOverlayService.openDonutTooltip({ data: tooltip }, e, xOffset, 0, false);\n    }\n  }\n\n  public ngOnInit() {\n    this.contributorType = this.getContirbutorType();\n    this.contributor = this.arlasStartupService.contributorRegistry.get(this.contributorId);\n    if (this.componentType === 'swimlane') {\n      this.swimlanes = this.contributor.getConfigValue('swimlanes');\n      if (this.swimlanes) {\n        this.showSwimlaneDropDown = this.swimlanes.length > 1;\n        this.swimSelected = this.swimlanes[0];\n      }\n    } else if (this.contributorType === 'compute') {\n      this.metricApproximate = (this.contributor.metrics as Array<ComputeConfig>).filter(c => c.metric === 'cardinality').length > 0;\n    }\n\n    this.setComponentInput(this.graphParam);\n    /** Init filter operator (include/exclude) of powerbars */\n    if (this.contributor instanceof TreeContributor) {\n      this.setFilterOperator((this.contributor as TreeContributor).getFilterOperator());\n      this.contributor.operatorChangedEvent\n        .pipe(takeUntil(this._onDestroy$))\n        .subscribe(op => {\n          this.setFilterOperator(op);\n        });\n    }\n    if (this.contributor instanceof MetricsTableContributor) {\n      this.setFilterOperator((this.contributor as MetricsTableContributor).getFilterOperator());\n      this.contributor.operatorChanged$\n        .pipe(takeUntil(this._onDestroy$))\n        .subscribe(op => {\n          this.setFilterOperator(op);\n        });\n    }\n  }\n\n  /**\n   * @description Changes swimlane from the pool of swimlanes defined in SwimlaneContributor configuration.\n   * @param swimlaneName The name of swimlane.\n   */\n  public changeSwimlane(swimlaneName) {\n    const swimConf = this.swimlanes.filter(f => f.name === swimlaneName.value)[0];\n    this.contributor.aggregations = swimConf.aggregationmodels;\n    this.contributor.xAxisField = swimConf.xAxisField;\n    this.contributor.termField = swimConf.termField;\n    if (swimConf.jsonpath) {\n      this.contributor.json_path = swimConf.jsonpath;\n    }\n    const collaborationEvent: CollaborationEvent = {\n      id: 'changeSwimlane',\n      operation: OperationEnum.add,\n      all: true\n    };\n    this.arlasCollaborativesearchService.collaborationBus.next(collaborationEvent);\n  }\n\n  /**\n   * Emits the components output events.\n   * @param source Contributor identifier\n   * @param event Name of the event\n   * @param data Emitted data\n   */\n  public emitEvent(source: string, event: string, data: any) {\n    this.outEvents.next({ origin: source, event: event, data: data });\n  }\n\n  public exportCsv(contributor: Contributor, stayAtFirstLevel: boolean, componentType: string, contributorType?: string) {\n    this.arlasExportCsvService.export(contributor, stayAtFirstLevel, contributorType).subscribe(blob => {\n      const contentType = 'text/csv';\n      const a = document.createElement('a');\n      a.download = contributor.getName().concat('_')\n        .concat(componentType)\n        .concat('_')\n        .concat(new Date().getTime().toString())\n        .concat('.csv');\n      a.href = window.URL.createObjectURL(blob);\n      a.dataset.downloadurl = [contentType, a.download, a.href].join(':');\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n    });\n  }\n\n\n  public changePowerbarsOperator(op: 'Neq' | 'Eq'): void {\n    if (op === 'Neq') {\n      (this.contributor as TreeContributor).setFilterOperator(Expression.OpEnum.Ne, /** emit */ true);\n    } else {\n      (this.contributor as TreeContributor).setFilterOperator(Expression.OpEnum.Eq, /** emit */ true);\n    }\n    (this.contributor as TreeContributor).selectedNodesListChanged((this.contributor as TreeContributor).selectedNodesPathsList);\n  }\n\n  public changeMetricsTableOperator(op: 'Neq' | 'Eq'): void {\n    if (op === 'Neq') {\n      (this.contributor as MetricsTableContributor).setFilterOperator(Expression.OpEnum.Ne, /** emit */ true);\n    } else {\n      (this.contributor as MetricsTableContributor).setFilterOperator(Expression.OpEnum.Eq, /** emit */ true);\n    }\n    (this.contributor as MetricsTableContributor)\n      .onRowSelect(new Set((this.contributor as MetricsTableContributor).selectedTerms));\n  }\n\n\n  private getContirbutorType() {\n    const contributor = this.arlasStartupService.contributorRegistry.get(this.contributorId);\n    if (contributor) {\n      const contributorPkgName: string = contributor.getPackageName();\n      const componenType: string = contributorPkgName.split('.')[contributorPkgName.split('.').length - 1];\n      return componenType;\n    }\n  }\n\n  private setComponentInput(component: any) {\n    if (this.componentParams) {\n      Object.keys(this.componentParams).forEach(key => {\n        if (key === 'cellBackgroundStyle') {\n          component[key] = CellBackgroundStyleEnum[this.componentParams[key]];\n        } else if (key === 'chartType') {\n          component[key] = ChartType[this.componentParams[key]];\n        } else if (key === 'dataType') {\n          component[key] = DataType[this.componentParams[key]];\n        } else if (key === 'xAxisPosition') {\n          component[key] = Position[this.componentParams[key]];\n        } else if (key === 'descriptionPosition') {\n          component[key] = Position[this.componentParams[key]];\n        } else if (key === 'swimlaneMode') {\n          component[key] = SwimlaneMode[this.componentParams[key]];\n        } else if (key === 'swimlane_representation') {\n          component[key] = SwimlaneRepresentation[this.componentParams[key]];\n        } else if (key === 'chartTitle' || key === 'valuesDateFormat') {\n          if (this.componentParams[key] !== '') {\n            component[key] = this.translate.instant(this.componentParams[key]);\n          } else {\n            component[key] = this.componentParams[key];\n          }\n        } else {\n          component[key] = this.componentParams[key];\n        }\n      });\n    }\n  }\n\n  private setFilterOperator(filterOperatorEnum: Expression.OpEnum) {\n    if (filterOperatorEnum === Expression.OpEnum.Ne) {\n      if (!!this.graphParam.filterOperator) {\n        this.graphParam.filterOperator.value = 'Neq';\n      } else {\n        this.graphParam.filterOperator = {\n          value: 'Neq',\n          display: true\n        };\n      }\n    } else {\n      if (!!this.graphParam.filterOperator) {\n        this.graphParam.filterOperator.value = 'Eq';\n      } else {\n        this.graphParam.filterOperator = {\n          value: 'Eq',\n          display: true\n        };\n      }\n    }\n  }\n}\n","<div #arlas_tooltip_anchor></div>\n<div *ngIf=\"componentType === 'histogram'\" class=\"histogram-container\">\n  <arlas-tool-histogram-widget [contributor]=\"contributor\" [componentInputs]=\"graphParam\" [showExportCsv]=\"showExportCsv\"\n    [spinnerOptions]=\"spinnerOptions\" [position]=\"position\" [groupLength]=\"groupLength\" [noDetail]=\"noDetail\"\n    (exportCsvEvent)=\"exportCsv($event.contributor, $event.firstLevel, $event.type, 'histogram')\"></arlas-tool-histogram-widget>\n</div>\n<div *ngIf=\"componentType === 'swimlane'\">\n  <div *ngIf=\"showSwimlaneDropDown\" class=\"dropdownSwimlane\">\n    <mat-form-field>\n      <mat-select panelClass=\"panelSwimlane\" [value]=\"swimSelected.name\" (change)=\"changeSwimlane($event)\">\n        <mat-option *ngFor=\"let s of swimlanes\" value=\"{{s?.name}}\">{{s.name | translate}}</mat-option>\n      </mat-select>\n    </mat-form-field>\n  </div>\n  <arlas-histogram [chartType]=\"chartType.swimlane\" [selectedSwimlanes]=\"contributor?.selectedSwimlanes\" [data]=\"contributor?.swimData\"\n    (selectedSwimlanesEvent)=\"contributor?.valueChanged($event)\" [id]=\"graphParam?.id\" [dataType]=\"graphParam?.dataType\" [dataUnit]=\"graphParam?.dataUnit\"\n    [valuesDateFormat]=\"graphParam?.valuesDateFormat\" [isHistogramSelectable]=\"graphParam?.isHistogramSelectable\" [multiselectable]=\"graphParam?.multiselectable\"\n    [topOffsetRemoveInterval]=\"graphParam?.topOffsetRemoveInterval\" [leftOffsetRemoveInterval]=\"graphParam?.leftOffsetRemoveInterval\"\n    [brushHandlesHeightWeight]=\"graphParam?.brushHandlesHeightWeight\" [chartTitle]=\"graphParam?.chartTitle\" [chartWidth]=\"graphParam?.chartWidth\"\n    [chartHeight]=\"graphParam?.chartHeight\" [customizedCssClass]=\"graphParam?.customizedCssClass\" [xAxisPosition]=\"graphParam?.xAxisPosition\"\n    [descriptionPosition]=\"graphParam?.descriptionPosition\" [xTicks]=\"graphParam?.xTicks\" [yTicks]=\"graphParam?.yTicks\" [xLabels]=\"graphParam?.xLabels\"\n    [yLabels]=\"graphParam?.yLabels\" [showXTicks]=\"graphParam?.showXTicks\" [showYTicks]=\"graphParam?.showYTicks\" [showXLabels]=\"graphParam?.showXLabels\"\n    [showYLabels]=\"graphParam?.showYLabels\" [ticksDateFormat]=\"graphParam?.ticksDateFormat\" [isSmoothedCurve]=\"graphParam?.isSmoothedCurve\"\n    [barWeight]=\"graphParam?.barWeight\" [paletteColors]=\"graphParam?.paletteColors\" [swimlaneMode]=\"graphParam?.swimlaneMode\"\n    [swimLaneLabelsWidth]=\"graphParam?.swimLaneLabelsWidth\" [swimlaneBorderRadius]=\"graphParam?.swimlaneBorderRadius\" [swimlaneHeight]=\"graphParam?.swimlaneHeight\"\n    [displayOnlyIntervalsWithData]=\"graphParam?.displayOnlyIntervalsWithData\"\n    [swimlaneRepresentation]=\"graphParam?.swimlane_representation\" [swimlaneOptions]=\"graphParam?.swimlane_options\" [useUtc]=\"contributor?.useUtc\"></arlas-histogram>\n</div>\n\n<!-- TODO: Passer l'export dans web components ? -->\n<div class=\"powerbars-widget\" *ngIf=\"componentType === 'powerbars'\">\n  <button *ngIf=\"showExportCsv\" id=\"export-csv\" matTooltip=\"{{'Export' | translate }}\" class=\"export-csv-button\" [class.export-csv-button-powerbars]=\"graphParam?.displayFilter\" (click)=\"exportCsv(contributor,true,componentType)\">\n    <mat-icon class=\"analytics-board-panel-icon export-csv\">get_app</mat-icon>\n  </button>\n  <arlas-powerbars [customizedCssClass]=\"graphParam?.customizedCssClass\" [powerbarTitle]=\"graphParam?.powerbarTitle\" [displayFilterField]=\"graphParam?.displayFilter\"\n    [inputData]=\"contributor?.treeData\" [unit]=\"graphParam?.unit\" [missingLeafEvent]=\"contributor?.emitMissingLeaf\"\n    [filterOperator]=\"graphParam?.filterOperator\" [useColorService]=\"graphParam?.useColorService\" [useColorFromData]=\"graphParam?.useColorFromData\" [keysToColors]=\"graphParam?.keysToColors\"\n    [colorsSaturationWeight]=\"graphParam?.colorsSaturationWeight\" (selectedPowerBarEvent)=\"contributor?.selectedNodesListChanged($event)\" [scrollable]=\"graphParam?.scrollable\"\n    [selectedPaths]=\"contributor?.selectedNodesPathsList\" (searchedTerm)=\"contributor?.updateTreeDataSearch($event)\"\n    [groupSelections]=\"graphParam?.groupSelections\"  [selectWithCheckbox]=\"graphParam?.selectWithCheckbox\"\n    (filterOperatorEvent)=\"changePowerbarsOperator($event)\"\n    [chartWidth]=\"graphParam?.chartWidth\">\n  </arlas-powerbars>\n</div>\n\n<div *ngIf=\"componentType==='donut'\" class=\"donut-container\" >\n  <div class=\"donut\">{{contributor?.getFilterDisplayName() | translate}}</div>\n  <button *ngIf=\"showExportCsv\" id=\"export-csv\" matTooltip=\"{{'Export' | translate }}\" class=\"export-csv-button\" (click)=\"exportCsv(contributor,false,componentType)\">\n    <mat-icon class=\"analytics-board-panel-icon export-csv\">get_app</mat-icon>\n  </button>\n  <arlas-donut [id]=\"graphParam?.id\" [donutData]=\"contributor?.treeData\" [opacity]=\"graphParam.opacity\" [multiselectable]=\"graphParam?.multiselectable\"\n    [selectedArcsList]=\"contributor?.selectedNodesPathsList\" [unit]=\"graphParam?.unit\" [diameter]=\"graphParam?.diameter\" (hoveredNodeTooltipEvent)=\"showDonutTooltip($event, arlas_tooltip_anchor)\" [containerWidth]=\"graphParam?.containerWidth\" [keysToColors]=\"graphParam?.keysToColors\" [colorsSaturationWeight]=\"graphParam?.colorsSaturationWeight\"\n    (selectedNodesEvent)=\"contributor?.selectedNodesListChanged($event)\" [customizedCssClass]=\"graphParam?.customizedCssClass\">\n  </arlas-donut>\n</div>\n\n<div *ngIf=\"componentType === 'resultlist'\">\n  <arlas-result-list style=\"height:100%\" [rowItemList]=\"contributor?.data\" [detailedDataRetriever]=\"contributor?.detailedDataRetriever\"\n    [fieldsConfiguration]=\"contributor?.fieldsConfiguration\" [fieldsList]=\"contributor?.fieldsList\" [filtersMap]=\"contributor?.filtersMap\"\n    [dropDownMapValues]=\"contributor?.dropDownMapValues\" (sortColumnEvent)=\"emitEvent(contributorId, 'sortColumnEvent', $event)\" [fetchState]=\"contributor?.fetchState\"\n    (paginationEvent)=\"emitEvent(contributorId, 'paginationEvent', $event)\" (setFiltersEvent)=\"contributor?.setFilters($event)\"\n    [tableWidth]=\"graphParam.tableWidth\" [globalActionsList]=\"graphParam.globalActionsList\" [nLastLines]=\"graphParam.nLastLines\"\n    [detailedGridHeight]=\"graphParam.detailedGridHeight\" [nbGridColumns]=\"graphParam.nbGridColumns\" [indeterminatedItems]=\"this.indeterminatedItems\"\n    [highlightItems]=\"contributor?.highlightItems\" [defautMode]=\"graphParam.defautMode\" [displayFilters]=\"graphParam.displayFilters\"\n    [isBodyHidden]=\"graphParam.isBodyHidden\" [isGeoSortEnabled]=\"graphParam?.isGeoSortActived\"\n    [useColorService]=\"graphParam?.useColorService\" [cellBackgroundStyle]=\"graphParam?.cellBackgroundStyle\" [keysToColors]=\"graphParam?.keysToColors\"\n    [colorsSaturationWeight]=\"graphParam?.colorsSaturationWeight\" (geoSortEvent)=\"emitEvent(contributorId, 'geoSortEvent', $event)\"\n    (geoAutoSortEvent)=\"emitEvent(contributorId, 'geoAutoSortEvent', $event)\" (selectedItemsEvent)=\"emitEvent(contributorId, 'selectedItemsEvent', $event)\"\n    (consultedItemEvent)=\"emitEvent(contributorId, 'consultedItemEvent', $event)\" (actionOnItemEvent)=\"emitEvent(contributorId, 'actionOnItemEvent', $event)\"\n    (globalActionEvent)=\"emitEvent(contributorId, 'globalActionEvent', $event)\" [options]=\"graphParam?.options\">\n  </arlas-result-list>\n</div>\n\n<div *ngIf=\"componentType === 'metric'\">\n  <arlas-metric [beforeValue]=\"graphParam?.beforeValue\" [shortValue]=\"graphParam?.shortValue\"\n                [value]=\"contributor?.metricValue\" [afterValue]=\"graphParam?.afterValue\" [approximateValue]=\"metricApproximate\"\n                [customizedCssClass]=\"graphParam?.customizedCssClass\" [valuePrecision]=\"graphParam?.valuePrecision\"\n                [chartWidth]=\"graphParam?.chartWidth\" >\n\n  </arlas-metric>\n</div>\n\n<div *ngIf=\"componentType === 'metricstable'\">\n  <arlas-metrics-table\n    [metricsTable]=\"contributor?.data\"\n    [selectedTerms]=\"contributor?.selectedTerms\"\n    [filterOperator]=\"graphParam?.filterOperator\"\n    [useColorService]=\"graphParam?.useColorService\"\n    [applyColorTo]=\"graphParam?.applyColorTo\"\n    [showRowField]=\"graphParam?.showRowField\"\n    [selectWithCheckbox]=\"graphParam?.selectWithCheckbox\"\n    [headerDisplayMode]=\"graphParam?.headerDisplayMode\"\n    [normaliseBy]=\"graphParam?.normaliseBy\"\n    (onSelect)=\"contributor?.onRowSelect($event)\"\n    (filterOperatorEvent)=\"changeMetricsTableOperator($event)\"\n    ></arlas-metrics-table>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { Contributor, OperationEnum } from 'arlas-web-core';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { SpinnerOptions } from '../../tools/utils';\nimport { DEFAULT_SPINNER_OPTIONS } from '../progress-spinner/progress-spinner.component';\nimport { FilterShortcutConfiguration } from './filter-shortcut.utils';\n\n\n@Component({\n  selector: 'arlas-filter-shortcut',\n  templateUrl: './filter-shortcut.component.html',\n  styleUrls: ['./filter-shortcut.component.scss']\n})\nexport class FilterShortcutComponent implements OnInit {\n\n  /**\n   * @Input : Angular\n   * @description Configuration of the shortcut to display\n  */\n  @Input() public shortcut: FilterShortcutConfiguration;\n\n  /**\n   * @Input : Angular\n   * @description Width of the shortcut when opened\n   */\n  @Input() public shortcutWidth = 250;\n\n  /**\n   * @Input : Angular\n   * @description Height of the chart contained in the shortcut\n   */\n  @Input() public chartHeight = 90;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display the value of the first filter.\n   * If false, it will allow the user to only see the values by clicking the chip.\n   */\n  @Input() public displayFilterFirstValue = true;\n\n  /**\n   * @Input : Angular\n   * @description Whether the shortcut is opened and displays its widget\n   */\n  @Input() public isOpen = false;\n\n  /**\n   * @Input : Angular\n   * @description Spinner options when data is loading\n   */\n  @Input() public spinnerOptions: SpinnerOptions = {\n    color: DEFAULT_SPINNER_OPTIONS.color,\n    diameter: DEFAULT_SPINNER_OPTIONS.diameter / 2,\n    strokeWidth: DEFAULT_SPINNER_OPTIONS.strokeWidth\n  };\n\n  /**\n   * @Output : Angular\n   * @description Event emitted when the shortcut is opened or closed\n   */\n  @Output() public isOpenChange = new EventEmitter<boolean>();\n\n  public inputs;\n  public histogramUnit: string;\n  public histogramDatatype: string;\n\n  @ViewChild('title') public titleElement: ElementRef;\n\n  public constructor(\n    private collaborativeSearchService: ArlasCollaborativesearchService,\n    public cdr: ChangeDetectorRef,\n  ) { }\n\n  public ngOnInit(): void {\n    if (this.isOpen) {\n      this.activateContributor();\n    }\n    this.inputs = Object.assign({}, this.shortcut?.component?.input);\n    this.setHistogramInput();\n    this.setPowerbarsInput();\n  }\n\n  public toggle() {\n    this.isOpen = !this.isOpen;\n    this.isOpenChange.next(this.isOpen);\n    if (this.isOpen) {\n      this.triggerContributorCollaboration();\n    }\n  }\n\n  private activateContributor(): Contributor {\n    const contributor: Contributor = this.collaborativeSearchService.registry.get(this.shortcut?.component?.contributorId);\n    if (contributor) {\n      contributor.updateData = true;\n    }\n    return contributor;\n  }\n\n  private triggerContributorCollaboration() {\n    const c = this.activateContributor();\n    c.updateFromCollaboration({\n      id: c.linkedContributorId,\n      operation: OperationEnum.add,\n      all: false\n    });\n  }\n\n  private setHistogramInput() {\n    if (this.shortcut.component) {\n      this.histogramUnit = this.inputs['xUnit'];\n      this.histogramDatatype = this.inputs['dataType'];\n      this.inputs['showXTicks'] = false;\n      this.inputs['showYTicks'] = false;\n      this.inputs['showXLabels'] = false;\n      this.inputs['showYLabels'] = false;\n      this.inputs['chartWidth'] = this.shortcutWidth;\n      this.inputs['chartHeight'] = this.chartHeight;\n    }\n  }\n\n  private setPowerbarsInput() {\n    if (this.shortcut.component) {\n      this.inputs['groupSelections'] = false;\n      this.inputs['selectWithCheckbox'] = true;\n\n    }\n  }\n}\n","<ng-container *ngIf=\"shortcut && shortcut.component\">\n    <div class=\"container\" id=\"{{'shortcut-' +  shortcut.uuid}}\">\n        <section #title class=\"title\" [class.open_title]=\"isOpen\" (click)=\"toggle()\"\n            [style.min-width.px]=\"shortcutWidth / 2\">\n            <div class=\"text\">{{shortcut.title | translate}}</div>\n            <div class=\"actions\">\n                <arlas-shortcut-filters-handler\n                    [histogramInterval]=\"histogramInterval\"\n                    [contributorId]=\"shortcut.component?.contributorId\"\n                    [widgetType]=\"shortcut.component.componentType\"\n                    [histogramDatatype]=\"histogramDatatype\"\n                    [histogramUnit]=\"histogramUnit\"\n                    [displayFilterFirstValue]=\"displayFilterFirstValue\"\n                    ></arlas-shortcut-filters-handler>\n                <mat-icon class=\"chevron\">{{isOpen ? 'expand_less' : 'expand_more'}}</mat-icon>\n            </div>\n        </section>\n        <div *ngIf=\"isOpen\" class=\"separator\"></div>\n        <section *ngIf=\"isOpen\" class=\"content\" [style.width.px]=\"titleWidth > shortcutWidth + 10 ? titleWidth - 10 : shortcutWidth\">\n            <arlas-tool-widget style=\"width:100%\"\n                id=\"{{'shortcut-widget-' +  shortcut.uuid}}\"\n                [componentType]=\"shortcut.component.componentType\"\n                [contributorId]=\"shortcut.component?.contributorId\"\n                [componentParams]=\"inputs\" [groupLength]=\"1\"\n                [noDetail]=\"true\" [spinnerOptions]=\"spinnerOptions\"\n            ></arlas-tool-widget>\n        </section>\n    </div>\n\n</ng-container>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { HistogramContributor } from 'arlas-web-contributors';\nimport { Contributor, OperationEnum } from 'arlas-web-core';\nimport { AnalyticGroupConfiguration, AnalyticsTabs } from '../../components/analytics/analytics.utils';\nimport { hasContributorData } from '../../tools/utils';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService } from '../startup/startup.service';\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AnalyticsService {\n\n  /**\n   * @description Emits the name of the tab when the selected tab in the menu has changed\n   */\n  public tabChange: EventEmitter<string> = new EventEmitter();\n\n  /**\n   * @description Whether drag and drop is active for the groups inside of the analytics board\n   */\n  public isActiveDragDrop: boolean;\n\n  /**\n   * @description List of groups. Each group contains one or more widgets.\n   */\n  private _groups: Array<AnalyticGroupConfiguration>;\n\n  /**\n   * @description List of tabs. Each tab contains one or more groups.\n   */\n  private _tabs: Array<AnalyticsTabs>;\n\n  /**\n   * @description Map of which group(s) each contributor belong to\n   */\n  private _contributorGroup: Map<string, Array<string>> = new Map();\n\n  /**\n   * @description Map of which tab each group belong to\n   */\n  private _groupTab: Map<string, string> = new Map();\n\n  /**\n   * @description List of groups with their tab's name\n   */\n  private _groupsByTab: Array<{ name: string; groups: Array<AnalyticGroupConfiguration>; }> = new Array();\n\n  /**\n   * @description Map of the open/close state of groups\n   */\n  private _wasClosedMap: Map<string, boolean> = new Map();\n\n  /**\n   * @description Map of whether to display each group\n   */\n  private _groupsDisplayStatusMap: Map<string, boolean>;\n\n  /**\n   * @description Index of the currently selected tab. Can be undefined when no tab is selected.\n   */\n  private _activeTab: number | undefined;\n\n  /**\n   * @description Map of which groups are currently filtered on\n   */\n  private _activeFilterGroup: Map<string, boolean> = new Map();\n\n  /**\n   * @description Map of which tabs are currently filtered on\n   */\n  private _activeFilterTab: Map<string, boolean> = new Map();\n\n  /**\n   * @description Name of the tab in which groups are put by default if they don't belong in one.\n   */\n  private defaultGroupTabName = 'analytics';\n\n  public constructor(\n    private configService: ArlasConfigService,\n    private collaborativeService: ArlasCollaborativesearchService,\n    private activatedRoute: ActivatedRoute,\n    private router: Router,\n  ) {\n  }\n\n  public setGroupsDisplayStatusMap(statusMap: Map<string, boolean>) {\n    this._groupsDisplayStatusMap = statusMap;\n  }\n\n  public getActiveGroups() {\n    return this._activeTab !== undefined ? this._groupsByTab[this._activeTab].groups : [];\n  }\n\n  /**\n   * Triggered when a tab is selected by the menu.\n   * Updates the URL to store which tab the user is currently on.\n   * Deactivates data updating of the widgets of the hidden tabs.\n   * Emits a tab change event.\n   * @param tabIndex Index of the tab selected. Can be undefined if none is selected.\n   */\n  public selectTab(tabIndex: number | undefined) {\n    if (tabIndex >= this._tabs.length) {\n      throw new Error(`The index of the analytics tab selected does not exist. There are onlys ${this._tabs.length} tabs.`);\n    }\n\n    this._activeTab = tabIndex;\n    const tabName = tabIndex !== undefined ? this._tabs[tabIndex].name : undefined;\n    // Indicate to analytics board that the tab was changed\n    this.tabChange.next(tabName);\n\n    // Navigate to new url\n    const queryParams = Object.assign({}, this.activatedRoute.snapshot.queryParams);\n    if (tabName === undefined) {\n      delete queryParams['at'];\n    } else {\n      queryParams['at'] = tabName;\n    }\n    this.router.navigate([], { replaceUrl: true, queryParams: queryParams });\n\n    // Remove collaborations of other tabs\n    // Remove all contributions but the one of the active tab\n    if (this._activeTab !== undefined) {\n      this.cancelAllOtherTabsContribution(this._activeTab);\n      this.getActiveGroups().forEach(g => {\n        if (g.collapsed !== true) {\n          this.activateGroupContribution(g);\n        }\n      });\n    } else {\n      // If no active tab, then remove every tab contributions\n      this.cancelAllTabsContribution();\n    }\n  }\n\n  /**\n   * Activates the data upating of the contributors of every widget of the group.\n   * @param group Configuration of the group to display\n   */\n  public openPanel(group: AnalyticGroupConfiguration) {\n    this._groupsByTab.forEach(groupTab => {\n      groupTab.groups.map(grp => {\n        if (grp.groupId === group.groupId) {\n          grp.collapsed = false;\n        }\n      });\n    });\n    if (group.tab === this._tabs[this._activeTab].name) {\n      this.activateGroupContribution(group);\n    }\n  }\n\n  /**\n   * Deactivates the data upating of the contributors of every widget of the group.\n   * @param group Configuration of the group to hide\n   */\n  public closePanel(group: AnalyticGroupConfiguration) {\n    this._groupsByTab.forEach(groupTab => {\n      groupTab.groups.map(grp => {\n        if (grp.groupId === group.groupId) {\n          grp.collapsed = true;\n        }\n      });\n    });\n    this.cancelGroupContribution(group);\n  }\n\n  public cancelAllOtherTabsContribution(tabIndex: number) {\n    this._groupsByTab.filter(groupTab => groupTab.name !== this._tabs[tabIndex].name)\n      .map(groupTab => groupTab.groups)\n      .forEach(groups => {\n        groups.forEach(group => {\n          this.cancelGroupContribution(group);\n        });\n      });\n  }\n\n  public cancelAllTabsContribution() {\n    this._groupsByTab\n      .map(groupTab => groupTab.groups)\n      .forEach(groups => {\n        groups.forEach(group => {\n          this.cancelGroupContribution(group);\n        });\n      });\n  }\n\n  /**\n   * Deactivates all the contributors of the group that are not present in the active tab.\n   * @param group Configuration of the group to deactivate\n   */\n  public cancelGroupContribution(group: AnalyticGroupConfiguration) {\n    this._wasClosedMap.set(group.groupId, true);\n    // Get all contributors ID from the current active tab that are not collapsed\n    const currentIndex = !!this._activeTab ? this._activeTab : 0;\n    const currentTabContributorsId = [];\n    this._groupsByTab[currentIndex].groups.forEach(group => {\n      if (group.collapsed !== true) {\n        group.components.forEach(c => currentTabContributorsId.push(c.contributorId));\n      }\n    });\n\n    group.components\n      // Disable only contributors not present in the current tab not collapsed\n      .filter(c => !currentTabContributorsId.includes(c.contributorId))\n      .map(componentConfig => componentConfig.contributorId)\n      .map(contribId => this.collaborativeService.registry.get(contribId))\n      .forEach(contributor => {\n        contributor.updateData = false;\n      });\n  }\n\n  /**\n   * Activates all the contributors of the group.\n   * @param group Configuration of the group to activate\n   */\n  public activateGroupContribution(group: AnalyticGroupConfiguration) {\n    group.components\n      .map(componentConfig => componentConfig.contributorId)\n      .map(contribId => this.collaborativeService.registry.get(contribId))\n      .forEach(contributor => {\n        contributor.updateData = true;\n        // if (!this.collaborativeService.endOfUrlCollaboration) {\n        //   // At first loading of the application, the current tab groups are already open.\n        //   // No need to reload the data, it is already done by the global setCollaboration ('url')\n        //   this._wasClosedMap.set(group.groupId, false);\n        // }\n        // Or if there is no data\n        if (this._wasClosedMap.get(group.groupId) || !hasContributorData(contributor)) {\n          this.updateFromCollaboration(contributor);\n        }\n      });\n    this._wasClosedMap.set(group.groupId, false);\n  }\n\n  /**\n   *\n   * @param group Group declared in configuration file\n   * @param display Whether to display the widget\n   */\n  public addWidget(group: AnalyticGroupConfiguration, display: boolean): void {\n    if (group && group.groupId) {\n      this._groupsDisplayStatusMap.set(group.groupId, display);\n      this._groups.push(group);\n    }\n  }\n\n  /**\n   * Removes all the filters of the given group\n   * @param groupId Group id\n   */\n  public removeFilter(groupId: string) {\n    Array.from(this._contributorGroup.entries()).filter(group => group[1].includes(groupId)).forEach(mapGroup => {\n      Array.from(this.collaborativeService.collaborations.keys()).filter(cont => cont === mapGroup[0]).forEach(contributor => {\n        this.collaborativeService.removeFilter(contributor);\n      });\n    });\n  }\n\n  /**\n   * Removes all the filters of the given tab\n   * @param tabId Tab id\n   */\n  public removeTabFilter(tabId: string) {\n    Array.from(this._groupTab.entries()).filter(tab => tab[1] === tabId).forEach(mapTab => {\n      this.removeFilter(mapTab[0]);\n    });\n  }\n\n  /**\n   * Updates the map of which groups are currently filtered on\n   */\n  public setActiveFilterGroup() {\n    this._activeFilterGroup.clear();\n    this.collaborativeService.getEnableContributors().forEach(contrib => {\n      // It is possible that a contributor is not linked to a group (timeline)\n      const groups = this._contributorGroup.get(contrib);\n      if (!!groups) {\n        groups.forEach(groupId => {\n          this._activeFilterGroup.set(groupId, true);\n        });\n      }\n    });\n  }\n\n  /**\n   * Updates the map of which tabs are currently filtered on\n   */\n  public setActiveFilterTab() {\n    this._activeFilterTab.clear();\n    this.collaborativeService.getEnableContributors().forEach(contrib => {\n      // It is possible that a contributor is not linked to a group (timeline)\n      const groups = this._contributorGroup.get(contrib);\n      if (!!groups) {\n        groups.forEach(groupId => {\n          this._activeFilterTab.set(this._groupTab.get(groupId), true);\n        });\n      }\n    });\n  }\n\n  /**\n   * Updates the order of the groups of the current tab.\n   * Stores in the local storage this new order.\n   * @param event Drop event of a group being moved\n   */\n  public dropGroup(event: CdkDragDrop<string[]>) {\n    const currentTabGroups = this.getActiveGroups();\n    moveItemInArray(currentTabGroups, event.previousIndex, event.currentIndex);\n    const groupIdsByTab = new Map<string, Array<String>>();\n    this._groupsByTab.forEach((tab) => {\n      groupIdsByTab.set(tab.name, tab.groups.map(group => group.groupId));\n    });\n    localStorage.setItem('arlas_tabs_groups_order', JSON.stringify([...groupIdsByTab]));\n  }\n\n  /**\n   * Initialize the mapping of the designated tab with its groups if not already done\n   * @param tabName The considered tab's name\n   */\n  private initTabMapping(tabName: string) {\n    if (this._groupsByTab.filter(item => item.name === tabName).length === 0) {\n      this._groupsByTab.push({ name: tabName, groups: new Array<AnalyticGroupConfiguration>() });\n    }\n  }\n\n  /**\n   * Stores group in the correct tab, and indicates the correct tab for the group\n   * @param group The considered group\n   * @param tabName The considered tab name\n   */\n  private fillTabMapping(group: AnalyticGroupConfiguration, tabName: string) {\n    this._groupsByTab.filter(tabGroup => tabGroup.name === tabName).forEach(tabGroup => tabGroup.groups.push(group));\n    this._groupTab.set(group.groupId, tabName);\n  }\n\n  private updateFromCollaboration(contributor: Contributor) {\n    contributor.updateFromCollaboration({\n      id: contributor.linkedContributorId,\n      operation: OperationEnum.add,\n      all: false\n    });\n    if (contributor instanceof HistogramContributor) {\n      const histContributor = contributor as HistogramContributor;\n      if (histContributor.detailedHistrogramContributor && histContributor.detailedHistrogramContributor.updateData) {\n        histContributor.detailedHistrogramContributor.updateFromCollaboration({\n          id: contributor.linkedContributorId,\n          operation: OperationEnum.add,\n          all: false\n        });\n      }\n    }\n  }\n\n  /**\n   * @description List of groups. Each group contains one or more widgets.\n   */\n  public get groups() {\n    return this._groups;\n  }\n\n  public initializeGroups(groups: Array<AnalyticGroupConfiguration>) {\n    this.reset();\n    this._groups = groups;\n    this._groups?.forEach(group => {\n      this.initTabMapping(group.tab ? group.tab : this.defaultGroupTabName);\n      this.fillTabMapping(group, group.tab ? group.tab : this.defaultGroupTabName);\n\n      // Issue with same contributor in different tabs ?\n      group.components.forEach(comp => {\n        if (!this._contributorGroup.get(comp.contributorId)) {\n          this._contributorGroup.set(comp.contributorId, [group.groupId]);\n        } else {\n          this._contributorGroup.get(comp.contributorId).push(group.groupId);\n        }\n      });\n      if (group.collapsed) {\n        this._wasClosedMap.set(group.groupId, group.collapsed);\n      }\n    });\n\n    // Get tabs from config\n    const webConfig = this.configService.getValue('arlas.web');\n    if (webConfig !== undefined && webConfig.options !== undefined) {\n      if (webConfig.options.drag_items) {\n        this.isActiveDragDrop = webConfig.options.drag_items;\n      }\n\n      if (webConfig.options.tabs) {\n        this._tabs = webConfig.options.tabs;\n        const tabsWithGroups = this._groupsByTab.map(v => v.name);\n        this._tabs = this._tabs.filter(tab => tabsWithGroups.includes(tab.name));\n      }\n    }\n\n    // If there are no tabs in the config, there are either really no tabs,\n    // or the config has no tabs declared, but groups that should be in their designated tabs\n    /** Retro-compatibility code */\n    if (this._tabs.length === 0 && !!this._groups) {\n      const tabsSet = new Set<string>();\n      this._groups.forEach(group => {\n        if (!tabsSet.has(group.tab)) {\n          tabsSet.add(group.tab);\n          this._tabs.push({\n            icon: 'short_text',\n            name: group.tab,\n            showIcon: false,\n            showName: false\n          });\n        }\n      });\n    }\n    /** End of retro-compatibility code */\n\n    if (!this._groupsDisplayStatusMap) {\n      this._groupsDisplayStatusMap = new Map<string, boolean>();\n    }\n\n    this._groups?.forEach(group => this._groupsDisplayStatusMap.set(group.groupId, true));\n\n    // sort groups given saved order\n    const arlasTabsGroupsOrder = localStorage.getItem('arlas_tabs_groups_order');\n    if (this.isActiveDragDrop && arlasTabsGroupsOrder) {\n      const orderedGroupIdsByTab = new Map(JSON.parse(arlasTabsGroupsOrder));\n      orderedGroupIdsByTab.forEach((ids: Array<string>, tabName: string) => {\n        const currentTab = this._groupsByTab.filter(groupTab => groupTab.name === tabName);\n        if (currentTab.length > 0) {\n          currentTab[0].groups.sort((a, b) => ids.indexOf(a.groupId) - ids.indexOf(b.groupId));\n        }\n      });\n    }\n\n    // Set groups and tabs badge\n    this.setActiveFilterGroup();\n    this.setActiveFilterTab();\n    this.collaborativeService.collaborationBus.subscribe(() => {\n      this.setActiveFilterTab();\n      this.setActiveFilterGroup();\n    });\n  }\n\n  /**\n   * In case of using the service with several instances of AnalyticsBoardComponent, the global variables should\n   * be reset if we re-initialize groups.\n   */\n  private reset() {\n    this._tabs = [];\n    this._groupsByTab = [];\n    this._groupsDisplayStatusMap = new Map<string, boolean>();\n  }\n\n  /**\n   * @description List of tabs. Each tab contains one or more groups.\n   */\n  public get tabs() {\n    return this._tabs;\n  }\n\n  /**\n   * @description Map of whether to display each group\n   */\n  public get groupsDisplayStatusMap() {\n    return this._groupsDisplayStatusMap;\n  }\n\n  /**\n   * @description Map of which tabs are currently filtered on\n   */\n  public get activeFilterTab() {\n    return this._activeFilterTab;\n  }\n\n  /**\n   * @description Map of which groups are currently filtered on\n   */\n  public get activeFilterGroup() {\n    return this._activeFilterGroup;\n  }\n\n  /**\n   * @description Index of the currently selected tab. Can be undefined when no tab is selected.\n   */\n  public get activeTab() {\n    return this._activeTab;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AnalyticsService } from '../../../services/analytics/analytics.service';\nimport { ArlasCollaborativesearchService } from '../../../services/collaborative-search/arlas.collaborative-search.service';\nimport { SpinnerOptions } from '../../../tools/utils';\nimport { AnalyticGroupConfiguration } from '../analytics.utils';\n\n/**\n * This component organizes the `Widgets` in a board.\n * A Widget is declared within a \"group\" in the configuration. A group contains one or more Widgets\n */\n@Component({\n  selector: 'arlas-analytics-board',\n  templateUrl: './analytics-board.component.html',\n  styleUrls: ['./analytics-board.component.scss']\n})\nexport class AnalyticsBoardComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n\n  /**\n   * @Input : Angular\n   * @description Display mode of the analytics tab. Can be 'normal' or 'compact'.\n   */\n  @Input() public mode = 'normal';\n\n  /**\n   * @Input : Angular\n   * @description Id of the element to scroll to inside of the analytics board.\n   */\n  @Input() public target: string;\n\n  /**\n   * @Input : Angular\n   * @description Whether or not the spinner is displayed when a component is loading data\n   */\n  @Input() public showSpinner = false;\n\n  @Input() public colorSpinner = 'primary';\n  @Input() public diameterSpinner = 100;\n  @Input() public strokeWidthSpinner = 5;\n\n  /**\n   * @Input : Angular\n   * @description Whether or not the indicators are displayed when a filter is active on a group or tab\n   */\n  @Input() public showIndicators = false;\n\n  /**\n   * @Output : Angular\n   * @description Emits an event coming from one of the Widgets.\n   * The emitted output has information about\n   * the `origin` which is the contributor id of the Widget; `event` the name of the event; and eventually `data` which contains\n   * the emitted data from the component.\n   */\n  @Output() public boardOutputs: EventEmitter<{ origin: string; event: string; data?: any; }> = new EventEmitter();\n\n  /**\n   * @Output : Angular\n   * @description Emits an event when the display mode of a group is changed. The value transmitted is the group id\n   */\n  @Output() public modeChange: EventEmitter<string> = new EventEmitter();\n\n  public spinnerOptions: SpinnerOptions;\n\n  /**\n   * @description List of groups. Each group contains one or more widgets.\n   */\n  public groups: Array<AnalyticGroupConfiguration>;\n\n  public expandedHeaderHeight = 48;\n  public collapsedHeaderHeight = 32;\n  private tabChangeSubscription: Subscription;\n  public constructor(\n    protected collaborativeService: ArlasCollaborativesearchService,\n    public analyticsService: AnalyticsService,\n  ) { }\n\n  public ngOnInit() {\n    this.spinnerOptions = {\n      color: !!this.colorSpinner ? this.colorSpinner : 'primary',\n      diameter: (this.diameterSpinner !== undefined && this.diameterSpinner !== null) ? this.diameterSpinner : 100,\n      strokeWidth: (this.strokeWidthSpinner !== undefined && this.strokeWidthSpinner !== null) ? this.strokeWidthSpinner : 5,\n    };\n\n    // When the tab is changed, get the groups to display\n    this.groups = this.analyticsService.getActiveGroups();\n    this.tabChangeSubscription = this.analyticsService.tabChange.subscribe(() => {\n      this.groups = this.analyticsService.getActiveGroups();\n    });\n\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.target && changes.groups === undefined) {\n      this.scrollToAnalyticsComponent(changes.target.currentValue);\n    }\n  }\n\n  public ngAfterViewInit() {\n    this.scrollToAnalyticsComponent(this.target);\n  }\n\n  public scrollToAnalyticsComponent(target: string) {\n    if (this.mode === 'normal' && target !== undefined) {\n      const element = (<HTMLElement>document.getElementById(target));\n      element.scrollIntoView(true);\n    }\n  }\n\n  /**\n   * Emits the widgets output events.\n   * @param source Contributor identifier\n   * @param event Name of the event\n   * @param data Emitted data\n   */\n  public listenOutput(event: { origin: string; event: string; data?: any; }) {\n    this.boardOutputs.next(event);\n  }\n\n  public drop(event: CdkDragDrop<string[]>) {\n    this.analyticsService.dropGroup(event);\n  }\n\n  public changeMode(event) {\n    this.modeChange.next(event);\n  }\n\n  public removeFilter(groupId: string, event: any) {\n    this.analyticsService.removeFilter(groupId);\n    event.stopPropagation();\n  }\n\n  public openPanel(group: AnalyticGroupConfiguration) {\n    this.analyticsService.openPanel(group);\n  }\n\n  public closePanel(group: AnalyticGroupConfiguration) {\n    this.analyticsService.closePanel(group);\n  }\n\n  public ngOnDestroy(): void {\n    if (this.tabChangeSubscription) {\n      this.tabChangeSubscription.unsubscribe();\n    }\n  }\n}\n","<div class=\"analytics-board-content\" cdkDropList cdkScrollable\n  [cdkDropListDisabled]=\"!analyticsService.isActiveDragDrop\" [class.analytics-board-compact]=\"mode === 'compact'\"\n  (cdkDropListDropped)=\"drop($event)\">\n  @for (group of groups; track $index) {\n    <mat-expansion-panel cdkDrag id=\"analytics-panel-{{group?.groupId}}\"\n      *ngIf=\"analyticsService.groupsDisplayStatusMap?.get(group?.groupId) && mode === 'normal'\"\n      [expanded]=\"group?.collapsed !== true\" class=\"analytics-board-panel\" (opened)=\"openPanel(group)\"\n      (closed)=\"closePanel(group)\">\n      <mat-expansion-panel-header cdkDragHandle *ngIf=\"group?.title !== undefined\"\n        [expandedHeight]=\"expandedHeaderHeight + 'px'\" [collapsedHeight]=\"collapsedHeaderHeight + 'px'\" color=\"primary\">\n        <mat-panel-title class=\"analytics-board-panel-title\">\n          <div *ngIf=\"showIndicators && analyticsService.activeFilterGroup.get(group.groupId)\"\n            class=\"active-filter-group\" (click)=\"removeFilter(group.groupId, $event);\">\n            <mat-icon class=\"active-filter-group-close\" matTooltip=\"{{'Click to remove filter' | translate}}\"\n              matTooltipPosition=\"below\">clear</mat-icon>\n          </div>\n          <mat-icon *ngIf=\"group?.icon !== undefined\" class=\"analytics-board-panel-icon\">{{group.icon}}</mat-icon>\n          {{group.title | translate}}\n        </mat-panel-title>\n      </mat-expansion-panel-header>\n      <div class=\"analytics-board-group analytics-group-{{group.components.length}}\">\n        <div *ngFor=\"let component of group.components;let i = index\" class=\"analytics-board-card\"\n          [ngClass]=\"component?.customizedCssClass\" [class.centered]=\"component?.componentType === 'donut'\">\n          <arlas-tool-widget\n            id=\"{{component?.componentType + '-' + component?.contributorId + '-' + group.groupId + '-' + i}}\"\n            [componentType]=\"component?.componentType\" [contributorId]=\"component?.contributorId\"\n            [showExportCsv]=\"component?.showExportCsv\" [componentParams]=\"component?.input\"\n            [spinnerOptions]=\"spinnerOptions\" [position]=\"i\" [groupLength]=\"group.components.length\"\n            (outEvents)=\"listenOutput($event)\">\n          </arlas-tool-widget>\n          <arlas-tool-progress-spinner *ngIf=\"showSpinner\" [strokeWidth]=\"strokeWidthSpinner\" [color]=\"colorSpinner\"\n            [diameter]=\"diameterSpinner\" [hidden]=\"!(component?.contributorId | contributorUpdating:collaborativeService.totalSubscribe)\"></arlas-tool-progress-spinner>\n        </div>\n      </div>\n    </mat-expansion-panel>\n\n    <div id=\"{{'compact-' + group.groupId}}\"\n      *ngIf=\"analyticsService.groupsDisplayStatusMap?.get(group.groupId) && mode === 'compact'\"\n      #compactTooltip=\"matTooltip\" (mouseover)=\"compactTooltip.show()\" matTooltip=\"{{group.title | translate}}\"\n      matTooltipPosition=\"right\" (click)=\"changeMode(group.groupId)\" class=\"analytics-compact-card\">\n      <mat-icon>{{group.icon}}</mat-icon>\n      <div *ngIf=\"analyticsService.activeFilterGroup.get(group.groupId)\" class=\"active-filter\"\n        (click)=\"removeFilter(group.groupId, $event);compactTooltip.hide()\">\n        <mat-icon class=\"active-filter-close\" matTooltip=\"{{'Click to remove filter' | translate}}\"\n          matTooltipPosition=\"below\" (mouseenter)=\"compactTooltip.hide()\">clear</mat-icon>\n      </div>\n    </div>\n  }\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Input, OnInit } from '@angular/core';\nimport { AnalyticGroupConfiguration } from '../analytics.utils';\nimport { AnalyticsService } from '../../../services/analytics/analytics.service';\nimport { getParamValue } from '../../../tools/utils';\n\n@Component({\n  selector: 'arlas-analytics-menu',\n  templateUrl: './analytics-menu.component.html',\n  styleUrls: ['./analytics-menu.component.scss']\n})\nexport class AnalyticsMenuComponent implements OnInit {\n\n  /**\n   * @Input : Angular\n   * @description If no tab is selected based on the url, indicates which tab index to select by default.\n   * If none is supplied, then no tab is displayed by default\n   */\n  @Input() public tabIndexByDefault?: number;\n\n  /**\n   * @Input : Angular\n   * @description List of groups. Each group contains one or more widgets.\n   */\n  @Input() public groups: Array<AnalyticGroupConfiguration>;\n\n  /**\n   * @Input : Angular\n   * @description Whether to show the indicator of filters applied on this tab.\n   */\n  @Input() public showIndicators = false;\n\n  public constructor(\n    public analyticsService: AnalyticsService\n  ) { }\n\n  public ngOnInit(): void {\n    // Get active tab from url\n    const tab = getParamValue('at');\n    if (tab) {\n      const tabIndex = this.analyticsService.tabs.map(t => t.name).indexOf(decodeURI(tab));\n      if (tabIndex >= 0) {\n        this.selectTab(tabIndex);\n      }\n    }\n\n    // Load tab by default if one was given, and no tab is currently selected\n    if (this.analyticsService.activeTab === undefined && this.tabIndexByDefault !== undefined\n        && this.tabIndexByDefault < this.analyticsService.tabs.length) {\n      this.selectTab(this.tabIndexByDefault);\n    }\n  }\n\n  /**\n   * Method called when clicking on a tab to select or unselect it. If already selected, unselects it.\n   * @param index Index of the tab selected in the list of tabs\n   */\n  public selectTab(index: number) {\n    this.analyticsService.selectTab(index === this.analyticsService.activeTab ? undefined : index);\n  }\n\n  /**\n   * Remove all the filters linked to the contributors of the clicked tab\n   * @param tabId The name of the tab clicked\n   * @param event The click event fired when clicked\n   */\n  public removeTabFilter(tabId: string, event: any) {\n    // find out the type of the click event\n    this.analyticsService.removeTabFilter(tabId);\n    event.stopPropagation();\n  }\n}\n","<mat-action-list class=\"analytics-menu\">\n    <button mat-list-item *ngFor=\"let tab of analyticsService.tabs; let tabIdx = index\" (click)=\"selectTab(tabIdx)\">\n        <mat-icon *ngIf=\"tab.icon\" [matTooltip]=\"tab.name | translate\" matTooltipPosition=\"right\"\n            class=\"tab-icon\" [class.tab--selected]=\"tabIdx === analyticsService.activeTab\">\n            {{ tab.icon }}\n        </mat-icon>\n        <div *ngIf=\"!tab.icon\" [matTooltip]=\"tab.name | translate\"  matTooltipPosition=\"right\"\n            [class.tab--selected]=\"tabIdx === analyticsService.activeTab\">\n            {{ tab.name[0] }}\n        </div>\n\n        <div *ngIf=\"showIndicators && analyticsService.activeFilterTab.get(tab.name)\" class=\"active-filter-tab\"\n            (click)=\"removeTabFilter(tab.name, $event);\">\n            <mat-icon class=\"active-filter-tab-close\"\n                matTooltip=\"{{'Click to remove all filters of this tab' | translate}}\"\n                matTooltipPosition=\"right\">clear</mat-icon>\n        </div>\n    </button>\n</mat-action-list>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { BehaviorSubject, map, Observable, of } from 'rxjs';\nimport { sortOnDate, ArlasStorageObject } from './utils';\nimport { mergeMap } from 'rxjs/operators';\n\nexport class ArlasLocalDatabase<T extends ArlasStorageObject> {\n  /** Stream that emits whenever the data has been modified. */\n  public dataChange: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\n  public get data(): T[] {\n    return this.dataChange.value;\n  }\n  public storageObjectMap: Map<string, T> = new Map<string, T>();\n\n  public storageKey: string;\n\n  public constructor(storageKey: string = 'storage_object', additionalObject?: any) {\n    this.storageKey = storageKey;\n\n    if (localStorage.getItem(this.storageKey) !== null) {\n      const copiedData = [];\n      Array.from(JSON.parse(localStorage.getItem(this.storageKey))).forEach((obj: T) => {\n        const newObj: T = this.init(obj, additionalObject);\n        copiedData.push(newObj);\n        this.storageObjectMap.set(obj.id, newObj);\n      });\n      const sortedData = sortOnDate(copiedData);\n      this.dataChange.next((sortedData as T[]));\n    }\n  }\n\n  /**\n   * Method call for each element at init\n   * @param obj Object to init of type <T>\n   * @param additionnalObj Addtionnal object\n   */\n  public init(obj: T, additionnalObj?: any): T {\n    return obj;\n  }\n\n  public add(storageObject: T): Observable<void> {\n    return of(true).pipe(map(v => {\n      const copiedData = this.data.slice();\n      copiedData.push(storageObject);\n      this.storageObjectMap.set(storageObject.id, storageObject);\n      const sortedData = sortOnDate(copiedData);\n      localStorage.setItem(this.storageKey, JSON.stringify(sortedData));\n      this.dataChange.next((sortedData as T[]));\n    }));\n  }\n\n  public remove(id: string): Observable<void> {\n    return of(true).pipe(map(v => {\n      const copiedData = this.data.slice();\n      const newData = [];\n      copiedData.forEach((u: T) => {\n        if (u.id !== id) {\n          newData.push(u);\n        }\n      });\n      this.storageObjectMap.delete(id);\n      localStorage.setItem(this.storageKey, JSON.stringify(sortOnDate(newData)));\n      this.dataChange.next(newData);\n    }));\n  }\n\n\n  public update(id: string, storageObject: T): Observable<void> {\n    return of(true).pipe(mergeMap(v => this.remove(id).pipe(mergeMap(() => this.add(storageObject)))));\n  };\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Aoi } from './model';\nimport { Guid } from '../../tools/utils';\nimport { ArlasLocalDatabase } from '../../tools/arlasLocalDatabase';\n\nexport class AoiDatabase extends ArlasLocalDatabase<Aoi> {\n\n  public constructor() {\n    super('aoi');\n  }\n\n  public init(aoi: Aoi): Aoi {\n    const initAoi = {\n      id: aoi.id,\n      date: new Date(aoi.date),\n      name: aoi.name,\n      geometry: aoi.geometry,\n      private: aoi.private\n    };\n    return initAoi;\n  }\n\n  public createAoi(name: string, geometry: any, visibility: boolean = false, date?: Date, id?: string): Aoi {\n    let uid = '';\n    let aoiDate: Date;\n\n    if (id) {\n      uid = id;\n    } else {\n      const guid = new Guid();\n      uid = guid.newGuid();\n    }\n    if (date) {\n      aoiDate = new Date(date);\n    } else {\n      aoiDate = new Date();\n    }\n    const aoi: Aoi = {\n      id: uid,\n      date: aoiDate,\n      name: name,\n      geometry: geometry,\n      private: visibility\n    };\n    return aoi;\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { AoiDatabase } from './aoiDatabase';\nimport { Aoi } from './model';\nimport { ArlasStartupService } from '../startup/startup.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ArlasAoiService {\n  public dataBase: AoiDatabase;\n  public aoiMap: Map<string, Aoi> = new Map<string, Aoi>();\n\n  public constructor(private arlasStartupService: ArlasStartupService) {\n    if (this.arlasStartupService.shouldRunApp && !this.arlasStartupService.emptyMode) {\n      this.dataBase = new AoiDatabase();\n      this.aoiMap = this.dataBase.storageObjectMap;\n    }\n  }\n\n  public addAoi(name: string, geometry: any) {\n    const newAoi = this.dataBase.createAoi(name, geometry);\n    this.dataBase.add(newAoi);\n    this.aoiMap = this.dataBase.storageObjectMap;\n  }\n\n  public removeAoi(id: string) {\n    this.dataBase.remove(id);\n    this.aoiMap = this.dataBase.storageObjectMap;\n  }\n\n  public getAoiById(id: string): Aoi {\n    return Array.from(this.aoiMap.values()).find(aoi => aoi.id === id);\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Observable, merge, BehaviorSubject } from 'rxjs';\nimport { DataSource } from '@angular/cdk/collections';\nimport { ArlasLocalDatabase } from './arlasLocalDatabase';\nimport { sortOnDate, ArlasStorageObject } from './utils';\nimport { map } from 'rxjs/operators';\n\nexport class ArlasDataSource extends DataSource<any> {\n  private _filterChange = new BehaviorSubject('');\n  public get filter(): string {\n    return this._filterChange.value;\n  }\n  public set filter(filter: string) {\n    this._filterChange.next(filter);\n  }\n  public constructor(public arlasLocalDatabase: ArlasLocalDatabase<ArlasStorageObject>) {\n    super();\n  }\n  /** Connect function called by the table to retrieve one stream containing the data to render. */\n  public connect(): Observable<ArlasStorageObject[]> {\n    const displayDataChanges = [\n      this.arlasLocalDatabase.dataChange,\n      this._filterChange\n    ];\n    return merge(...displayDataChanges).pipe(map(() => {\n      localStorage.setItem(this.arlasLocalDatabase.storageKey, JSON.stringify(this.arlasLocalDatabase.data));\n      return this.getSortedData();\n\n    }));\n  }\n\n  public disconnect() { }\n  public getSortedData(): ArlasStorageObject[] {\n    const data = this.arlasLocalDatabase.data.slice();\n    // force date asc sort\n    const sortedData = sortOnDate(data);\n    return sortedData.slice().filter((item: ArlasStorageObject) => {\n      if (item.name !== undefined) {\n        const searchStr = (item.name).toLowerCase();\n        return searchStr.indexOf(this.filter.toLowerCase()) !== -1;\n      }\n    });\n\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Output } from '@angular/core';\nimport { ArlasAoiService } from '../../services/aoi/aoi.service';\nimport { Subject } from 'rxjs';\nimport { Aoi } from '../../services/aoi/model';\nimport { ArlasDataSource } from '../../tools/arlasDataSource';\n\n@Component({\n  selector: 'arlas-aoi',\n  templateUrl: './aoi.component.html',\n  styleUrls: ['./aoi.component.css']\n})\nexport class AoiComponent {\n\n  public aois: ArlasDataSource;\n  public columnsToDisplay = ['checked', 'name', 'date', 'actions'];\n  public itemsCheck: Array<string> = new Array<string>();\n\n  @Output() public actions: Subject<{ action: string; id: string; geometry?: any; }> = new Subject<any>();\n\n  public constructor(\n    private aoiService: ArlasAoiService\n  ) {\n    this.aois = new ArlasDataSource(this.aoiService.dataBase);\n  }\n\n  public selectAoi(event, id) {\n    if (event.checked) {\n      this.itemsCheck.push(id);\n    } else {\n      const index = this.itemsCheck.indexOf(id, 0);\n      if (index > -1) {\n        this.itemsCheck.splice(index, 1);\n      }\n    }\n  }\n\n  public viewAoi(id: string) {\n    const aoi: Aoi = this.aoiService.getAoiById(id);\n    this.actions.next({ action: 'view', id: id, geometry: aoi.geometry });\n\n  }\n\n  public removeAoi(id: string) {\n    this.aoiService.removeAoi(id);\n    this.selectAoi({ event: { checked: false } }, id);\n    this.actions.next({ action: 'remove', id: id });\n  }\n}\n","<mat-table [dataSource]=\"aois\" class=\"aoi-table-items\">\n  <ng-container matColumnDef=\"checked\">\n    <mat-header-cell *matHeaderCellDef> # </mat-header-cell>\n    <mat-cell *matCellDef=\"let aoi\">\n      <mat-checkbox class=\"aoi-check\" (change)=\"selectAoi($event, aoi.id)\"></mat-checkbox>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"actions\">\n    <mat-header-cell *matHeaderCellDef> {{ 'Actions' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let aoi\">\n      <mat-icon class=\"aoi-icons-action aoi-icons-action-view\" title=\"{{ 'View' | translate }}\" (click)=\"viewAoi(aoi.id)\">\n        remove_red_eye\n      </mat-icon>\n      <mat-icon class=\"aoi-icons-action aoi-icons-action-delete\" title=\"{{ 'Remove' | translate }}\" (click)=\"removeAoi(aoi.id)\">\n        delete\n      </mat-icon>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"date\">\n    <mat-header-cell *matHeaderCellDef> {{ 'Date' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let aoi\"> {{aoi.date | date: 'dd/MM/yyyy HH:mm:ss'}} </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"name\">\n    <mat-header-cell *matHeaderCellDef> {{ 'Name' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let aoi\">{{aoi.name}}</mat-cell>\n  </ng-container>\n\n  <mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></mat-header-row>\n  <mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></mat-row>\n</mat-table>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Observable } from 'rxjs';\nimport { ArlasLocalDatabase } from '../../tools/arlasLocalDatabase';\nimport { Guid } from '../../tools/utils';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasStartupService } from '../startup/startup.service';\nimport { ArlasBookmarkService } from './bookmark.service';\nimport { BookMark, BookMarkType } from './model';\n\nexport class BookmarkLocalDatabase extends ArlasLocalDatabase<BookMark> {\n\n  public constructor(\n    public bookmarkService: ArlasBookmarkService,\n    public arlasCollaborativesearchService: ArlasCollaborativesearchService,\n    public startupService: ArlasStartupService) {\n    super('bookmark', bookmarkService);\n  }\n\n  public init(bookmark: BookMark, service: ArlasBookmarkService): BookMark {\n    const initBookmark = {\n      id: bookmark.id,\n      date: new Date(bookmark.date),\n      name: bookmark.name,\n      prettyFilter: bookmark.prettyFilter,\n      url: bookmark.url,\n      type: bookmark.type,\n      color: bookmark.color,\n      count: new Observable<0>(),\n      views: bookmark.views,\n      collections: bookmark.collections\n    };\n    service.setBookMarkCount(initBookmark);\n    return initBookmark;\n  }\n\n  public createBookmark(name: string, prettyFilter: string, url: string, collections: Set<string>,\n    type: BookMarkType, color: string, id?: string, date?: Date, views?: number): BookMark {\n    let uid = '';\n    let bookmarkDate: Date;\n    let bookmarkViews: number;\n    if (id) {\n      uid = id;\n    } else {\n      const guid = new Guid();\n      uid = guid.newGuid();\n    }\n    if (date) {\n      bookmarkDate = new Date(date);\n    } else {\n      bookmarkDate = new Date();\n    }\n    if (views) {\n      bookmarkViews = views;\n    } else {\n      bookmarkViews = 0;\n    }\n    const bookMark: BookMark = {\n      id: uid,\n      date: bookmarkDate,\n      name: name,\n      prettyFilter: prettyFilter,\n      url: url,\n      type: type,\n      color: color,\n      count: new Observable<0>(),\n      views: bookmarkViews,\n      collections: Array.from(collections).sort().join(',')\n    };\n    this.bookmarkService.setBookMarkCount(bookMark);\n    return bookMark;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { BehaviorSubject, catchError, map, mergeMap, Observable, of } from 'rxjs';\nimport { ArlasStorageObject } from './utils';\nimport { PersistenceService } from '../services/persistence/persistence.service';\nimport { DataResource, DataWithLinks } from 'arlas-persistence-api';\n\nexport class ArlasPersistenceDatabase<T extends ArlasStorageObject> {\n  /** Stream that emits whenever the data has been modified. */\n  public dataChange: BehaviorSubject<{ total: number; items: T[]; }>\n    = new BehaviorSubject<{ total: number; items: T[]; }>({ total: 0, items: [] });\n  public get data(): { total: number; items: T[]; } {\n    return this.dataChange.value;\n  }\n  public storageObjectMap: Map<string, T> = new Map<string, T>();\n\n\n  public storageKey: string;\n  public persistenceService: PersistenceService;\n  public additionalObject: any;\n\n  private page: { size: number; number: number; } = { size: 10, number: 1 };\n\n  public constructor(storageKy: string = 'storage_object', persistenceService: PersistenceService, additionalObject?: any) {\n    this.storageKey = storageKy;\n    this.persistenceService = persistenceService;\n    this.additionalObject = additionalObject;\n  }\n\n  /**\n   * Method call for each element at init\n   * @param obj Object to init of type <T>\n   * @param additionnalObj Addtionnal object\n   */\n  public init(obj: T, additionnalObj?: any): T {\n    return obj;\n  }\n\n  public add(storageObject: T): Observable<void> {\n    return this.persistenceService.create(this.storageKey, storageObject.name, JSON.stringify(storageObject))\n      .pipe(catchError(e => of(e)),\n        mergeMap(\n          result => {\n            const newObj = storageObject;\n            newObj['id'] = result.id;\n            return this.persistenceService.update(result.id, JSON.stringify(newObj), (result as any).last_update_date);\n          }\n        ),\n        mergeMap(\n          (d) => this.list(this.page.size, this.page.number, 'desc')\n        )\n      );\n  }\n\n  public remove(id: string): Observable<void> {\n    return this.persistenceService.delete(id).pipe(catchError(e => of(e)), mergeMap(result => {\n      this.storageObjectMap.delete(id);\n      return this.list(this.page.size, this.page.number, 'desc');\n    }));\n  }\n\n  public list(size: number, page: number, order: string, key = undefined): Observable<void> {\n    return this.persistenceService.list(this.storageKey, size, page, order, key)\n      .pipe(catchError(e => of(e)), map((dataResource: DataResource) => {\n        const copiedData = [];\n        let total = 0;\n        if (dataResource.count > 0) {\n          Array.from(dataResource.data).forEach((obj: DataWithLinks) => {\n            const newObj: T = this.init(JSON.parse(obj.doc_value) as T, this.additionalObject);\n            copiedData.push(newObj);\n            this.storageObjectMap.set(newObj.id, newObj);\n          });\n          total = dataResource.total;\n        }\n        this.dataChange.next({ total: total, items: copiedData as T[] });\n      }));\n  }\n\n  public update(id: string, storageObject: T): Observable<void> {\n    return this.persistenceService.get(id)\n      .pipe(mergeMap(s => this.persistenceService.update(id, JSON.stringify(storageObject), (s.last_update_date as any))\n        .pipe(catchError(e => of(e)), mergeMap((result =>\n          this.list(this.page.size, this.page.number, 'desc')\n        )))));\n\n  }\n\n  public setPage(page: { size: number; number: number; }) {\n    this.page = page;\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { BookMark, BookMarkType } from './model';\nimport { ArlasBookmarkService } from './bookmark.service';\nimport { Guid } from '../../tools/utils';\nimport { Observable } from 'rxjs';\nimport { PersistenceService } from '../persistence/persistence.service';\nimport { ArlasPersistenceDatabase } from '../../tools/arlasPersistenceDatabase';\nimport { ArlasStartupService } from '../startup/startup.service';\n\n\nexport class BookmarkPersistenceDatabase extends ArlasPersistenceDatabase<BookMark> {\n\n  public constructor(\n    public bookmarkService: ArlasBookmarkService,\n    public persistenceService: PersistenceService,\n    public startupService: ArlasStartupService) {\n    super('bookmark', persistenceService, bookmarkService);\n  }\n\n  public init(bookmark: BookMark, service: ArlasBookmarkService): BookMark {\n    const initBookmark = {\n      id: bookmark.id,\n      date: new Date(bookmark.date),\n      name: bookmark.name,\n      prettyFilter: bookmark.prettyFilter,\n      url: bookmark.url,\n      type: bookmark.type,\n      color: bookmark.color,\n      count: new Observable<0>(),\n      views: bookmark.views,\n      collections: bookmark.collections\n    };\n    service.setBookMarkCount(initBookmark);\n    return initBookmark;\n  }\n\n  public createBookmark(name: string, prettyFilter: string, url: string, collections: Set<string>,\n    type: BookMarkType, color: string, id?: string, date?: Date, views?: number): BookMark {\n    let uid = '';\n    let bookmarkDate: Date;\n    let bookmarkViews: number;\n    if (id) {\n      uid = id;\n    } else {\n      const guid = new Guid();\n      uid = guid.newGuid();\n    }\n    if (date) {\n      bookmarkDate = new Date(date);\n    } else {\n      bookmarkDate = new Date();\n    }\n    if (views) {\n      bookmarkViews = views;\n    } else {\n      bookmarkViews = 0;\n    }\n    const bookMark: BookMark = {\n      id: uid,\n      date: bookmarkDate,\n      name: name,\n      prettyFilter: prettyFilter,\n      url: url,\n      type: type,\n      color: color,\n      count: new Observable<0>(),\n      views: bookmarkViews,\n      collections: Array.from(collections).sort().join(',')\n    };\n    this.bookmarkService.setBookMarkCount(bookMark);\n    return bookMark;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Observable } from 'rxjs';\nimport { ArlasStorageObject } from '../../tools/utils';\n\nexport enum BookMarkType {\n  enumIds,\n  filterWithTime,\n  filterWithoutTime\n}\n\nexport interface BookMark extends ArlasStorageObject {\n\n  prettyFilter: string;\n  url: string;\n  type: BookMarkType;\n  color: string;\n  count: Observable<number>;\n  /** @deprecated */\n  views: number;\n  collections: string;\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Expression, Filter } from 'arlas-api';\nimport { Collaboration, fromEntries, projType } from 'arlas-web-core';\nimport { Observable, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { getKeyForColor } from '../../tools/utils';\nimport { ArlasIamService } from '../arlas-iam/arlas-iam.service';\nimport { AuthentificationService } from '../authentification/authentification.service';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { PersistenceService } from '../persistence/persistence.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\nimport { ArlasStartupService } from '../startup/startup.service';\nimport { BookmarkLocalDatabase } from './bookmarkLocalDatabase';\nimport { BookmarkPersistenceDatabase } from './bookmarkPersistenceDatabase';\nimport { BookMark, BookMarkType } from './model';\n\n/** Constants used to fill up our data base. */\n@Injectable()\nexport class ArlasBookmarkService {\n  public dataBase: BookmarkLocalDatabase | BookmarkPersistenceDatabase;\n  public bookMarkMap: Map<string, BookMark> = new Map<string, BookMark>();\n  public selectorById: string;\n  public count = 0;\n  public maxSize = 1000;\n  public pageNumber = 1;\n  public onAction = new Subject<{ action: string; id: string; }>();\n\n  public constructor(\n    private collaborativesearchService: ArlasCollaborativesearchService,\n    private activatedRoute: ActivatedRoute,\n    public snackBar: MatSnackBar,\n    public arlasStartupService: ArlasStartupService,\n    private authentService: AuthentificationService,\n    private arlasIamService: ArlasIamService,\n    private persistenceService: PersistenceService,\n    private settingsService: ArlasSettingsService,\n    private router: Router,\n    private translate: TranslateService) {\n    if (this.arlasStartupService.shouldRunApp && !this.arlasStartupService.emptyMode) {\n      const settings = this.settingsService.getSettings();\n      const useAuthent = !!settings && !!settings.authentication && !!settings.authentication.use_authent;\n      // The default behavior is openid, so if there is no auth_mode specified, it is openid\n      const useAuthentOpenID = useAuthent && settings.authentication.auth_mode !== 'iam';\n      const useAuthentIam = useAuthent && settings.authentication.auth_mode === 'iam';\n      let userConnected = false;\n      if(useAuthentOpenID){\n        userConnected = this.authentService.hasValidAccessToken() && this.authentService.hasValidIdToken();\n      }\n      if(useAuthentIam){\n        userConnected = !!this.arlasIamService.isAuthenticated();\n      }\n      if (this.persistenceService.isAvailable && userConnected ) {\n        this.dataBase = new BookmarkPersistenceDatabase(this, this.persistenceService, this.arlasStartupService);\n        this.listBookmarks(this.maxSize, this.pageNumber ).subscribe({\n          error(err) {\n            console.error(err);\n          }\n        });\n        this.dataBase.dataChange.subscribe(() => {\n          this.bookMarkMap = this.dataBase.storageObjectMap;\n        });\n      } else {\n        this.dataBase = new BookmarkLocalDatabase(this, this.collaborativesearchService, this.arlasStartupService);\n        this.dataBase.dataChange.subscribe(() => {\n          this.bookMarkMap = this.dataBase.storageObjectMap;\n        });\n      }\n      this.selectorById = this.arlasStartupService.selectorById;\n\n    }\n  }\n\n  /**\n   * List all bookmark for the user to update dataBase\n   */\n  public listBookmarks(size: number, pageNumber: number): Observable<void> {\n    return (this.dataBase as BookmarkPersistenceDatabase).list(size, pageNumber, 'desc');\n  }\n\n  public setPage(size: number, pageNumber: number) {\n    (this.dataBase as BookmarkPersistenceDatabase).setPage({ size: size, number: pageNumber });\n  }\n\n  public addBookmark(newBookMarkName: string, selectedItem?: Set<string>): Observable<void> {\n    if (selectedItem) {\n      const url = this.getUrlFomSetIds(selectedItem);\n      const dataModel = this.collaborativesearchService.dataModelBuilder(decodeURI(url), true);\n      const collections = this.collaborativesearchService.getCollectionsFromFilters(dataModel);\n      const color = '#' + getKeyForColor(dataModel);\n      const bookmarkFromItem = this.dataBase.createBookmark(newBookMarkName, newBookMarkName, url, collections, BookMarkType.enumIds, color);\n      return this.dataBase.add(bookmarkFromItem);\n    } else {\n      let filter = '';\n      this.collaborativesearchService.collaborations.forEach((k, v) => {\n        filter = filter + '-' + this.collaborativesearchService.registry.get(v).getFilterDisplayName();\n      });\n      const url = this.collaborativesearchService.urlBuilder().split('filter=')[1];\n      const dataModel = this.collaborativesearchService.dataModelBuilder(decodeURI(url), true);\n      const collections = this.collaborativesearchService.getCollectionsFromFilters(dataModel);\n      const color = '#' + getKeyForColor(dataModel);\n      let type: BookMarkType;\n      if (!this.isTemporalFilter(dataModel)) {\n        type = BookMarkType.filterWithoutTime;\n      } else {\n        type = BookMarkType.filterWithTime;\n      }\n      const bookmarkFromFilter = this.dataBase.createBookmark(newBookMarkName, filter.substring(1, filter.length), url, collections, type, color);\n      return this.dataBase.add(bookmarkFromFilter);\n    }\n  }\n\n\n  public createCombineBookmark(newBookMarkName: string, selectedBookmark: Set<string>): Observable<void> {\n    if (this.bookMarkMap.get(Array.from(selectedBookmark)[0]).type === BookMarkType.enumIds) {\n      return this.addBookmark(newBookMarkName, this.combineBookmarkFromIds(selectedBookmark));\n    } else {\n      const dataModel = this.combineBookmarkFromFilter(selectedBookmark);\n      const collections = this.collaborativesearchService.getCollectionsFromFilters(dataModel);\n      const color = '#' + getKeyForColor(dataModel);\n      /** map to object (using fromEntries) so that the stringify works properly */\n      Array.from(Object.keys(dataModel)).forEach(identifier => {\n        dataModel[identifier] = Object.assign({}, dataModel[identifier]);\n        dataModel[identifier].filters = fromEntries(dataModel[identifier].filters);\n      });\n      const url = JSON.stringify(dataModel);\n      let type: BookMarkType;\n      if (!this.isTemporalFilter(dataModel)) {\n        type = BookMarkType.filterWithoutTime;\n      } else {\n        type = BookMarkType.filterWithTime;\n      }\n      let filter = '';\n      Object.keys(dataModel).forEach(v => {\n        filter = filter + '-' + this.collaborativesearchService.registry.get(v).getFilterDisplayName();\n      });\n      const bookmark = this.dataBase.createBookmark(newBookMarkName, filter.substring(1, filter.length), url, collections, type, color);\n      return this.dataBase.add(bookmark);\n    }\n  }\n\n  public removeBookmark(id: string) {\n    this.dataBase.remove(id).subscribe({\n      next: () => this.onAction.next({\n        action: 'delete',\n        id: id\n      }),\n      error: err => console.error(err)\n    });\n  }\n\n  public viewBookMark(id: string) {\n    const bookmark = this.getBookmarkById(id);\n    const dataModel = this.collaborativesearchService.dataModelBuilder(decodeURI(bookmark.url), true);\n    this.viewFromDataModel(dataModel);\n    this.openSnackBar(this.translate.instant('Loading bookmark', {bookmark: bookmark.name}));\n  }\n\n  public openSnackBar(message: string) {\n    const config = new MatSnackBarConfig();\n    config.panelClass = ['custom-class'];\n    config.duration = 750;\n    config.verticalPosition = 'top';\n    this.snackBar.open(message, '', config);\n  }\n\n  public setBookMarkCount(bookMark: BookMark) {\n    bookMark.count = this.getCountFromUrl(bookMark.url);\n  }\n\n  public viewCombineBookmark(selectedBookmark: Set<string>) {\n    let dataModel: Object;\n    if (this.bookMarkMap.get(Array.from(selectedBookmark)[0]).type === BookMarkType.enumIds) {\n      const url = this.getUrlFomSetIds(this.combineBookmarkFromIds(selectedBookmark, true));\n      dataModel = this.collaborativesearchService.dataModelBuilder(decodeURI(url), true);\n    } else {\n      dataModel = this.combineBookmarkFromFilter(selectedBookmark, true);\n    }\n    this.viewFromDataModel(dataModel);\n  }\n\n  public init(bookmark: BookMark) {\n    const initBookmark: BookMark = {\n      id: bookmark.id,\n      date: new Date(bookmark.date),\n      name: bookmark.name,\n      prettyFilter: bookmark.prettyFilter,\n      url: bookmark.url,\n      type: bookmark.type,\n      color: bookmark.color,\n      count: new Observable<0>(),\n      views: bookmark.views,\n      collections: bookmark.collections\n    };\n    this.setBookMarkCount(initBookmark);\n    return initBookmark;\n  }\n\n  public updateBookmarkName(bookmarkName: string, id: string){\n    const bookmark = this.getBookmarkById(id);\n    bookmark.name = bookmarkName;\n    this.dataBase.update(id, bookmark).subscribe(() => console.log(this.bookMarkMap));\n  }\n\n  private viewFromDataModel(dataModel: Object) {\n    this.collaborativesearchService.setCollaborations(dataModel);\n    let language = null;\n    if (this.activatedRoute.snapshot.queryParams['lg']) {\n      language = this.activatedRoute.snapshot.queryParams['lg'];\n    }\n    const queryParams: Params = Object.assign({}, this.activatedRoute.snapshot.queryParams);\n    /** map to object (using fromEntries) so that the stringify works properly */\n    Array.from(Object.keys(dataModel)).forEach(identifier => {\n      dataModel[identifier] = Object.assign({}, dataModel[identifier]); /** cloning */\n      dataModel[identifier].filters = fromEntries(dataModel[identifier].filters);\n    });\n    queryParams['filter'] = JSON.stringify(dataModel);\n    if (language) {\n      queryParams['lg'] = language;\n    }\n    this.router.navigate([], { queryParams: queryParams, relativeTo: this.activatedRoute });\n  }\n\n  private combineBookmarkFromIds(selectedBookmark: Set<string>, changeOperator = false): Set<string> {\n    const ids = [];\n    selectedBookmark.forEach(id => {\n      const bookmark: BookMark = this.bookMarkMap.get(id);\n      const dataModel = this.collaborativesearchService.dataModelBuilder(bookmark.url.replace('filter=', ''), changeOperator);\n      /** selectorById is the identifier of a resultlist contributor named 'resultlist' */\n      const resultListContributor = dataModel[this.selectorById];\n      if (!!resultListContributor && !!resultListContributor.filters) {\n        resultListContributor.filters.forEach((filters: Filter[], collection: string) => {\n          /** for now resultlists are monocolleection, so this code will behave the same as the precedent */\n          filters.forEach(filter => {\n            if (!!filter.f && filter.f.length > 0 && !!filter.f[0] && filter.f[0].length > 0) {\n              filter.f[0][0].value.split(',').forEach(i => ids.push(i));\n            }\n          });\n        });\n      }\n    });\n    return new Set(ids);\n  }\n\n\n  private combineBookmarkFromFilter(selectedBookmark: Set<string>, changeOperator = false): Object {\n    const dataModel = {};\n    selectedBookmark.forEach(id => {\n      const bookmark: BookMark = this.bookMarkMap.get(id);\n      const bookMarkDataModel = this.collaborativesearchService.dataModelBuilder(bookmark.url.replace('filter=', ''), changeOperator);\n      if (Object.keys(dataModel).length === 0) {\n        Object.keys(bookMarkDataModel).forEach(k => {\n          dataModel[k] = bookMarkDataModel[k];\n        });\n      } else {\n        Object.keys(bookMarkDataModel).forEach(k => {\n          if (dataModel[k] === undefined) {\n            dataModel[k] = bookMarkDataModel[k];\n          } else {\n            bookMarkDataModel[k].filters\n              .forEach((filters, collection) => {\n                if (dataModel[k].filters.get(collection) === undefined) {\n                  dataModel[k].filters.set(collection, filters);\n                } else {\n                  /** filters : Map<collection, Fitler[]> */\n                  if (!!filters && filters.length > 0) {\n                    /** for now we only have one filter */\n                    const filter = filters[0];\n                    Object.keys(filter).forEach(keyfil => {\n                      if (keyfil !== 'righthand') {\n                        if (dataModel[k].filters.get(collection)[0][keyfil] === undefined) {\n                          /** for now we only have one filter */\n                          dataModel[k].filters.get(collection)[0][keyfil] = bookMarkDataModel[k].filters.get(collection)[0][keyfil];\n                        } else {\n                          /** filters : Map<collection, Fitler[]> */\n                          bookMarkDataModel[k].filters.get(collection)[0][keyfil]\n                            .forEach(ex => ex\n                              .forEach(e => dataModel[k].filters.get(collection)[0][keyfil][0].push(e)));\n                        }\n                      }\n                    });\n                  }\n\n                }\n              });\n          }\n        });\n      }\n    });\n    return dataModel;\n  }\n\n  private getCountFromUrl(url: string): Observable<number> {\n    const dataModel = this.collaborativesearchService.dataModelBuilder(url);\n    const defaultCollection = this.collaborativesearchService.defaultCollection;\n    const filters: Array<Filter> = [];\n    Object.keys(dataModel).forEach(key => {\n      if (dataModel[key].filters as Map<string, Filter[]>) {\n        const defaultCollectionFilters = dataModel[key].filters.get(defaultCollection);\n        if (!!defaultCollectionFilters) {\n          defaultCollectionFilters.forEach(filter => {\n            filters.push(filter);\n          });\n        }\n      }\n    });\n    return this.collaborativesearchService.resolveComputeHits([projType.count, {}], filters,\n      this.collaborativesearchService.defaultCollection)\n      .pipe(map(hits => hits.totalnb));\n  }\n\n  private getBookmarkById(id: string): BookMark {\n    let bookmark: BookMark;\n    this.bookMarkMap.forEach((k, v) => {\n      if (k.id === id) {\n        bookmark = k;\n      }\n    });\n    return bookmark;\n  }\n\n  private getUrlFomSetIds(selectedItem?: Set<string>): string {\n    const dataModel = {};\n    const collaboration: Collaboration = {\n      filters: new Map<string, Filter[]>(),\n      enabled: true,\n    };\n    const f: Array<Expression> = [];\n    let values = '';\n    selectedItem.forEach(s => {\n      values = values + s + ',';\n\n    });\n    const e: Expression = {\n      field: this.arlasStartupService.collectionId,\n      op: Expression.OpEnum.Eq,\n      value: values.substring(0, values.length - 1)\n    };\n    f.push(e);\n    const filters: Filter = {\n      f: [f]\n    };\n    const collabFilters = new Map<string, Filter[]>();\n    collabFilters.set(this.collaborativesearchService.defaultCollection, [filters]);\n    collaboration.filters = collabFilters;\n    /** map to object (using fromEntries) so that the stringify works properly */\n    dataModel[this.selectorById] = Object.assign({}, collaboration);\n    dataModel[this.selectorById].filters = fromEntries(dataModel[this.selectorById].filters);\n    const url = JSON.stringify(dataModel);\n    return url;\n\n  }\n\n  private isTemporalFilter(dataModel: Object): boolean {\n    let isTemporalFilter = false;\n    Object.keys(dataModel).forEach(key => {\n      if (this.arlasStartupService.temporalContributor.indexOf(key) >= 0) {\n        isTemporalFilter = true;\n      }\n    });\n    return isTemporalFilter;\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ArlasBookmarkService } from '../../services/bookmark/bookmark.service';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n@Component({\n  templateUrl: './bookmark-add-dialog.component.html',\n  styleUrls: ['./bookmark-add-dialog.component.scss']\n})\nexport class BookmarkAddDialogComponent {\n  public bookmarkName = new FormControl('', [Validators.required]);\n  public errorMessage = '';\n  public disableSubmit = false;\n  public constructor(\n    private bookmarkService: ArlasBookmarkService,\n    private translateService: TranslateService,\n    public dialogRef: MatDialogRef<BookmarkAddDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) protected data: { name: string | undefined; }) { }\n\n  public cancel(): void {\n    this.dialogRef.close();\n  }\n\n  public submit(): void {\n    this.bookmarkName.setErrors({ 'incorrect': false });\n    this.disableSubmit = true;\n    if (this.bookmarkName.value && !this.data.name) {\n      this.bookmarkService.addBookmark(this.bookmarkName.value).subscribe({\n        next: () => {\n          this.dialogRef.close();\n          this.bookmarkService.openSnackBar(marker('Bookmark succefully created.'));\n        },\n        error: e => {\n          this.bookmarkName.setErrors({ 'incorrect': true });\n          if (e.message === 'Required parameter id was null or undefined when calling update.') {\n            this.errorMessage = this.translateService.instant('Bookmark already exists');\n          } else {\n            this.errorMessage = this.translateService.instant('Bookmark creation error');\n          }\n        },\n        complete: () => this.disableSubmit = false\n      });\n    } else {\n      this.dialogRef.close((this.bookmarkName.value));\n    }\n  }\n\n  public pressEvent(event: KeyboardEvent) {\n    if (event.keyCode === 13) {\n      this.submit();\n    }\n  }\n}\n\n","\n<div mat-dialog-content class=\"bookmark__add\">\n  <h1 class=\"bookmark__add--title\" mat-dialog-title>\n    {{ 'Dataset name' | translate }}\n  </h1>\n  <mat-form-field class=\"bookmark__add--input\">\n    <input matInput tabindex=\"1\" [formControl]=\"bookmarkName\" (keypress)=\"pressEvent($event)\">\n    <mat-error *ngIf=\"bookmarkName.invalid\">{{errorMessage | translate}}</mat-error>\n  </mat-form-field>\n</div>\n<div mat-dialog-actions class=\"bookmark__add--actions\">\n  <button mat-raised-button [disabled]=\"disableSubmit\" class=\"modal_button\" color=\"accent\" (click)=\"submit()\"  tabindex=\"2\">{{ 'OK' | translate }}</button>\n  <button mat-raised-button class=\"modal_button\" (click)=\"cancel()\" tabindex=\"-1\">{{ 'Cancel' | translate }}</button>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject, Output } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ArlasBookmarkService } from '../../services/bookmark/bookmark.service';\nimport { BookmarkDataSource } from '../../services/bookmark/bookmarkDataSource';\nimport { BookmarkPersistenceDatabase } from '../../services/bookmark/bookmarkPersistenceDatabase';\nimport { BookMark } from '../../services/bookmark/model';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { BookmarkAddDialogComponent } from './bookmark-add-dialog.component';\n\n@Component({\n  selector: 'arlas-bookmark',\n  templateUrl: './bookmark.component.html',\n  styleUrls: ['./bookmark.component.scss']\n})\nexport class BookmarkComponent {\n\n  public bookmarks: BookmarkDataSource | BookMark[];\n  public columnsToDisplay = ['checked', 'name', 'date', 'count', 'actions'];\n  public itemsCheck: Array<string> = new Array<string>();\n  public disableCombine = true;\n  public showCombine = true;\n\n\n  public isPersistenceActive = false;\n  public currentCollectionsSet = new Set<string>();\n\n  @Output() public actions: Subject<{ action: string; id: string; geometry?: any; }> = new Subject<any>();\n\n  private _onDestroy$ = new Subject<boolean>();\n\n  public constructor(\n    private bookmarkService: ArlasBookmarkService,\n    private dialog: MatDialog,\n    private arlasCollaborativesearchService: ArlasCollaborativesearchService,\n    @Inject(MAT_DIALOG_DATA) public data: { isSelect: boolean; }\n  ) {\n    if (!!data && !data.isSelect) {\n      // Remove the 'checked' column\n      this.columnsToDisplay = ['name', 'date', 'count', 'actions'];\n      this.showCombine = false;\n    }\n\n    this.currentCollectionsSet = new Set(this.arlasCollaborativesearchService.collections);\n    // Init component with data from persistence server, if defined and server is reachable\n    if (this.bookmarkService.dataBase instanceof BookmarkPersistenceDatabase) {\n      this.isPersistenceActive = true;\n      this.bookmarkService.setPage(this.bookmarkService.maxSize, this.bookmarkService.pageNumber);\n      this.getBookmarksList();\n      (this.bookmarkService.dataBase as BookmarkPersistenceDatabase).dataChange\n        .pipe(takeUntil(this._onDestroy$))\n        .subscribe((data: { total: number; items: BookMark[]; }) => {\n          this.bookmarkService.count = data.total;\n          this.bookmarks = this.getDisplayableBookmarks(data.items);\n        });\n    } else {\n      (this.bookmarkService.dataBase).dataChange\n        .pipe(takeUntil(this._onDestroy$))\n        .subscribe((data: BookMark[]) => {\n          this.bookmarkService.count = data.length;\n          this.bookmarks = this.getDisplayableBookmarks(data);\n        });\n    }\n  }\n\n  public ngOnDestroy() {\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n\n  public getDisplayableBookmarks(items: BookMark[]) {\n    return items.filter(bk => {\n      let allBookmarksCollectionsPresent = true;\n      if (bk.collections) {\n        const bookmarCollections = bk.collections.split(',');\n        const absent = bookmarCollections.find(bc => !this.currentCollectionsSet.has(bc));\n        allBookmarksCollectionsPresent = !absent;\n        return allBookmarksCollectionsPresent;\n      } else {\n        return false;\n      }\n    });\n  }\n\n  public getBookmarksList() {\n    // The subscribe is needed to consume the response to the request and create a dataChange\n    this.bookmarkService.listBookmarks(this.bookmarkService.maxSize, this.bookmarkService.pageNumber).subscribe({\n      error(err) {\n        console.error(err);\n      }\n    });\n  }\n\n\n  public selectBookmark(event: { checked: boolean; }, id: string) {\n    if (event.checked) {\n      this.itemsCheck.push(id);\n    } else {\n      const index = this.itemsCheck.indexOf(id, 0);\n      if (index > -1) {\n        this.itemsCheck.splice(index, 1);\n      }\n    }\n    this.disableCombine = this.itemsCheck.length < 2;\n  }\n\n  public viewBookmark(id: string) {\n    this.bookmarkService.viewBookMark(id);\n    this.actions.next({ action: 'view', id: id });\n  }\n\n  public removeBookmark(id: string) {\n    this.bookmarkService.removeBookmark(id);\n    this.selectBookmark({ checked: false }, id);\n    this.actions.next({ action: 'remove', id: id });\n  }\n\n  public combine() {\n    const dialogRef = this.dialog.open(BookmarkAddDialogComponent, { data: { name: null }, id: 'add-bookmark-dialog' });\n    dialogRef.afterClosed().subscribe(bookmarkName => {\n      if (bookmarkName) {\n        this.bookmarkService.createCombineBookmark(bookmarkName, new Set(this.itemsCheck));\n      }\n    });\n  }\n\n  public viewCombine() {\n    this.bookmarkService.viewCombineBookmark(new Set(this.itemsCheck));\n    this.actions.next({ action: 'view-combine', id: this.itemsCheck.join('#') });\n  }\n\n  public updateBookMarkName(id, name){\n    const dialogRef = this.dialog.open(BookmarkAddDialogComponent, { data: { name: name }, id: 'add-bookmark-dialog' });\n    dialogRef.afterClosed().subscribe(bookmarkName => {\n      if (bookmarkName) {\n        this.bookmarkService.updateBookmarkName(bookmarkName, id);\n      }\n    });\n  }\n}\n","<mat-table [dataSource]=\"bookmarks\" class=\"bookmark-table-items\">\n  <ng-container matColumnDef=\"checked\">\n    <mat-header-cell *matHeaderCellDef> # </mat-header-cell>\n    <mat-cell *matCellDef=\"let bookmark\">\n      <mat-checkbox class=\"bookmark-check\" (change)=\"selectBookmark($event, bookmark.id)\"></mat-checkbox>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"actions\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Actions' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let bookmark\">\n      <mat-icon mat-icon-button style=\"cursor: pointer;\" (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\">more_vert</mat-icon>\n      <mat-menu #menu=\"matMenu\">\n          <button mat-menu-item (click)=\"viewBookmark(bookmark.id)\">\n              <mat-icon>remove_red_eye</mat-icon><span>{{'View' | translate}}</span>\n          </button>\n          <button mat-menu-item (click)=\"removeBookmark(bookmark.id)\">\n              <mat-icon >delete</mat-icon><span>{{'Delete' | translate}}</span>\n          </button>\n          <button mat-menu-item (click)=\"updateBookMarkName(bookmark.id, bookmark.name)\">\n            <mat-icon >edit</mat-icon><span>{{'Rename' | translate}}</span>\n        </button>\n      </mat-menu>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"date\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Date' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let bookmark\"> {{bookmark.date | date: 'dd/MM/yyyy HH:mm:ss'}} </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"name\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Name' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let bookmark\">\n      <mat-icon [style.color]=\"bookmark.color\">label</mat-icon>\n      <div class=\"bookmark__name\" [matTooltip]=\"'View' | translate\" [matTooltipPosition]=\"'right'\"\n        (click)=\"viewBookmark(bookmark.id)\">{{bookmark.name}}</div>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"count\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Count' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let bookmark\"> {{bookmark.count | async}}</mat-cell>\n  </ng-container>\n\n  <mat-header-row *matHeaderRowDef=\"columnsToDisplay; sticky: true\"></mat-header-row>\n  <mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></mat-row>\n</mat-table>\n\n\n<ng-container *ngIf=\"showCombine\">\n  <div class=\"bookmark-actions__description\">\n    <mat-icon>info</mat-icon>\n    <span>\n      {{ 'Bookmarks can be combined to create a new one containing the filters of all selected bookmarks.' | translate }}\n      {{ 'The color next to the name matches the combination of fields and operations of the filters.' | translate }}\n      {{ 'Filters on the same field are combined with an OR, whereas for different fields it is with an AND.' | translate }}\n    </span>\n  </div>\n  <div class=\"bookmark-actions\">\n    <button class=\"bookmark-action-button\" mat-raised-button [disabled]=\"disableCombine\"(click)=\"viewCombine()\">{{ 'View Combine' | translate }}</button>\n    <button class=\"bookmark-action-button\" mat-raised-button [disabled]=\"disableCombine\" (click)=\"combine()\">{{ 'Combine' | translate }}</button>\n  </div>\n</ng-container>\n\n<mat-dialog-actions align=\"end\">\n  <button mat-raised-button mat-dialog-close>{{ 'Close' | translate }}</button>\n</mat-dialog-actions>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatMenu } from '@angular/material/menu';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ArlasBookmarkService } from '../../services/bookmark/bookmark.service';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { BookmarkAddDialogComponent } from '../bookmark/bookmark-add-dialog.component';\nimport { BookmarkComponent } from '../bookmark/bookmark.component';\n\n@Component({\n  selector: 'arlas-bookmark-menu',\n  templateUrl: './bookmark-menu.component.html',\n  styleUrls: ['./bookmark-menu.component.scss']\n})\nexport class BookmarkMenuComponent implements OnInit, OnDestroy {\n\n  /**\n   * @Input : Angular\n   * @description Icon to use for the 'Manage dataset' action\n   */\n  @Input() public icon: string;\n  /**\n   * @deprecated Top bookmarks are no longer displayed\n   */\n  @Input() public nbTopBookmarks: number;\n  @Input() public isSelectMultipleBookmarks = true;\n\n  public nbCollaborations = 0;\n  public addBookmarkDisabled = false;\n  private _onDestroy$ = new Subject<boolean>();\n  public infoMessage: string;\n  @ViewChild('menu') public matMenu: MatMenu;\n\n  public constructor(\n    public dialog: MatDialog,\n    public bookmarkService: ArlasBookmarkService,\n    private collabrativeSearchService: ArlasCollaborativesearchService  ) { }\n\n  public ngOnInit(): void {\n    this.icon = this.icon ? this.icon : 'view_list';\n\n    this.nbCollaborations = this.collabrativeSearchService.collaborations.size;\n    this.checkAddButtonState();\n    this.collabrativeSearchService.collaborationBus.pipe(takeUntil(this._onDestroy$))\n      .subscribe(() => {\n        this.nbCollaborations = this.collabrativeSearchService.collaborations.size;\n        this.checkAddButtonState();\n      });\n  }\n\n  private checkAddButtonState() {\n    this.addBookmarkDisabled = this.bookmarkService.count >= this.bookmarkService.maxSize\n      || this.nbCollaborations === 0;\n    const infoMessagesKeys = [];\n    this.infoMessage = '';\n    if (this.bookmarkService.count >= this.bookmarkService.maxSize) {\n      infoMessagesKeys.push('maxSizeExceeded');\n    }\n\n    if (this.nbCollaborations === 0) {\n      infoMessagesKeys.push('noFilter');\n    }\n    if (infoMessagesKeys.length > 0) {\n      this.infoMessage = marker('bookmark_' + infoMessagesKeys.join('_'));\n    }\n  }\n\n  public openDatasetListDialog() {\n    this.dialog.open(BookmarkComponent, { width: '60vw' , maxWidth: '800px',\n      data: {isSelect: this.isSelectMultipleBookmarks}, panelClass: 'bookmark-manager' });\n  }\n\n  public openDialogAdd() {\n    if (!this.addBookmarkDisabled) {\n      this.dialog.open(BookmarkAddDialogComponent, { data: { name: null }, id: 'add-bookmark-dialog' });\n    }\n  }\n\n  public viewBookmark(id: string) {\n    this.bookmarkService.viewBookMark(id);\n  }\n\n  public ngOnDestroy() {\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n}\n","<mat-menu #menu=\"matMenu\">\n  <div class=\"add\">\n    <mat-button mat-menu-item (click)=\"openDialogAdd()\" [class.full-width]=\"!addBookmarkDisabled\" [disabled]=\"addBookmarkDisabled\">\n      <mat-icon>bookmark_add</mat-icon>\n      <span>{{ \"Add a dataset\" | translate }}</span>\n    </mat-button>\n    <mat-icon class=\"info\" *ngIf=\"addBookmarkDisabled\" [matTooltip]=\"infoMessage | translate: { maxBookmarks: bookmarkService.maxSize}\"\n      matTooltipClass=\"allow-breakline\" >info_outlined</mat-icon>\n  </div>\n  <mat-button mat-menu-item (click)=\"openDatasetListDialog()\">\n    <mat-icon>{{icon}}</mat-icon>\n    <span>{{ 'Manage datasets' | translate }}</span>\n  </mat-button>\n</mat-menu>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { ArlasDataSource } from '../../tools/arlasDataSource';\nimport { BookMark } from './model';\nimport { BookmarkLocalDatabase } from './bookmarkLocalDatabase';\n\n\nexport class BookmarkDataSource extends ArlasDataSource {\n\n  public constructor(public dataBase: BookmarkLocalDatabase) {\n    super(dataBase);\n  }\n\n  public getSortedData(): BookMark[] {\n    const data = this.dataBase.data.slice();\n    // force date asc sort\n    const sortedData = this.sortOnDate(data);\n    return sortedData.slice().filter((item: BookMark) => {\n      if (item.name !== undefined) {\n        const searchStr = (item.name + ' ' + item.collections).toLowerCase();\n        return searchStr.indexOf(this.filter.toLowerCase()) !== -1;\n      }\n    });\n\n  }\n\n  public sortOnDate(data: BookMark[]): BookMark[] {\n    const sortedData = data.sort((a, b) => {\n      let propertyA: number = new Date(0).getTime();\n      let propertyB: number = new Date(0).getTime();\n      [propertyA, propertyB] = [a.date.getTime(), b.date.getTime()];\n      const valueA = isNaN(+propertyA) ? propertyA : +propertyA;\n      const valueB = isNaN(+propertyB) ? propertyB : +propertyB;\n\n      return (valueA < valueB ? -1 : 1) * (-1);\n    });\n    return sortedData;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nexport const NO_ORGANISATION = '';\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { AuthorisationError } from './authorisation-error';\n\nexport class AuthorisationOnActionError extends AuthorisationError {\n\n  public action: string;\n  public constructor(status: number, action: string) {\n    super(status);\n    if (this.status === 403) {\n      this.message = 'access forbidden to ' + action;\n    } else if (this.status === 401) {\n      this.message = marker('access not authorized anymore');\n    } else {\n      // could never happen because this error should be thrown only for the statuses 401 & 403\n      this.message = marker('Unknown error');\n    }\n  }\n}\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { PersistenceService } from '../../../services/persistence/persistence.service';\nimport { Config } from '../../../tools/utils';\nimport { ArlasConfigService } from '../../../services/startup/startup.service';\nimport { catchError, of, take } from 'rxjs';\nimport { AuthorisationOnActionError } from '../../../tools/errors/authorisation-on-action-error';\nimport { ErrorService } from '../../../services/error/error.service';\n\nexport interface PersistenceGroup {\n  name: string;\n  label: string;\n  reader: boolean;\n  writer: boolean;\n}\n@Component({\n  selector: 'arlas-share-config',\n  templateUrl: './share-config.component.html',\n  styleUrls: ['./share-config.component.css']\n})\nexport class ShareConfigComponent implements OnInit {\n\n  @Input() public config: Config;\n  @Output() public updateEmitter: EventEmitter<[boolean, any]> = new EventEmitter();\n  public groups: Array<PersistenceGroup>;\n\n  public constructor(private persistenceService: PersistenceService,\n    private configurationService: ArlasConfigService, private errorService: ErrorService\n  ) {\n\n  }\n  public ngOnInit() {\n    const options = this.getOptionsSetOrg(this.config.org);\n    this.persistenceService.getGroupsByZone(this.config.zone, options).pipe(take(1)).subscribe((s: any) => {\n      this.groups = new Array();\n      s.forEach(g => {\n        const paths = g.split('/');\n        const group: PersistenceGroup = {\n          name: g,\n          label: paths[paths.length - 1],\n          reader: (new Set(this.config.readers)).has(g),\n          writer: (new Set(this.config.writers)).has(g)\n        };\n        if(g === 'group/public'){\n          if(this.config.displayPublic){\n            this.groups.push(group);\n          }\n        }else{\n          this.groups.push(group);\n        }\n      });\n    });\n  }\n\n  public updateGroups() {\n    const readers = this.config.readers ? new Set<string>(this.config.readers) : new Set<string>();\n    const writers = this.config.writers ? new Set<string>(this.config.writers) : new Set<string>();\n    this.groups.forEach(g => {\n      if (g.reader) {\n        readers.add(g.name);\n      } else {\n        readers.delete(g.name);\n      }\n      if (g.writer) {\n        writers.add(g.name);\n      } else {\n        writers.delete(g.name);\n      }\n    });\n    const options = this.getOptionsSetOrg(this.config.org);\n    this.persistenceService\n      .update(this.config.id, this.config.value, this.config.lastUpdate,\n        this.config.name, Array.from(readers), Array.from(writers), options)\n      .pipe(\n        catchError((err) => {\n          this.errorService.closeAll().afterAllClosed.pipe(take(1))\n            .subscribe(() =>\n              this.errorService.emitAuthorisationError(new AuthorisationOnActionError(err.status, 'share_dashboard'), false));\n          return of(err);\n        })\n      )\n      .subscribe({\n        next: () => {\n          this.config.readers = Array.from(readers);\n          this.config.writers = Array.from(writers);\n          this.updateEmitter.emit([true, this.config]);\n        }\n      });\n    const arlasConfig = this.configurationService.parse(this.config.value);\n    if (!!arlasConfig) {\n      const resourcesGroups = this.persistenceService.dashboardToResourcesGroups(Array.from(readers), Array.from(writers));\n      if (this.configurationService.hasPreview(arlasConfig)) {\n        const previewId = this.configurationService.getPreview(arlasConfig);\n        this.persistenceService.updateResource(previewId, resourcesGroups.readers, resourcesGroups.writers, undefined, options);\n      }\n      if (this.configurationService.hasI18n(arlasConfig)) {\n        const i18nIds = this.configurationService.getI18n(arlasConfig);\n        Object.keys(i18nIds).forEach(lg => {\n          this.persistenceService.updateResource(i18nIds[lg], resourcesGroups.readers, resourcesGroups.writers, undefined, options);\n        });\n      }\n      if (this.configurationService.hasTours(arlasConfig)) {\n        const toursIds = this.configurationService.getTours(arlasConfig);\n        Object.keys(toursIds).forEach(lg => {\n          this.persistenceService.updateResource(toursIds[lg], resourcesGroups.readers, resourcesGroups.writers, undefined, options);\n        });\n      }\n    }\n  }\n\n  private getOptionsSetOrg(org: string) {\n    return this.persistenceService.getOptionsSetOrg(org);\n  }\n\n  public close() {\n    this.updateEmitter.emit([true, {}]);\n  }\n\n  public changeReader(changeValue, group: PersistenceGroup) {\n    group.reader = changeValue.checked;\n  }\n  public changeWriter(changeValue, group: PersistenceGroup) {\n    group.writer = changeValue.checked;\n  }\n}\n","<mat-table [dataSource]=\"groups\" class=\"group-table-items\">\n  <ng-container matColumnDef=\"group\">\n    <mat-header-cell *matHeaderCellDef class=\"group-cell\">{{ 'group' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let group\" class=\"group-cell\"> {{group.label}} </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"reader\">\n    <mat-header-cell *matHeaderCellDef>{{ 'reading' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let group\">\n      <mat-checkbox  color=\"primary\" [checked]=\"group.reader\" (change)=\"changeReader($event, group)\"></mat-checkbox>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"writer\">\n    <mat-header-cell *matHeaderCellDef>{{ 'writing' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let group\">\n      <mat-checkbox *ngIf=\"group.label !== 'public'\" color=\"primary\"  [checked]=\"group.writer\" (change)=\"changeWriter($event, group)\"></mat-checkbox>\n    </mat-cell>\n  </ng-container>\n  <mat-header-row class=\"group-row\" *matHeaderRowDef=\"['group', 'reader', 'writer']\"></mat-header-row>\n  <mat-row class=\"group-row\" *matRowDef=\"let myRowData; columns: ['group', 'reader', 'writer']\"></mat-row>\n</mat-table>\n<div mat-dialog-actions class=\"share-container\">\n  <button mat-raised-button class=\"modal_button share-button\" color=\"primary\" (click)=\"updateGroups()\">{{ 'Share' | translate }}</button>\n  <button mat-raised-button class=\"modal_button\" (click)=\"close()\" >{{ 'Cancel' | translate }}</button>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { DataWithLinks } from 'arlas-persistence-api';\nimport { Observable, catchError, forkJoin, map, mergeMap, of, take, tap } from 'rxjs';\nimport { ErrorService } from '../../../services/error/error.service';\nimport { PersistenceService } from '../../../services/persistence/persistence.service';\nimport { ArlasConfigService } from '../../../services/startup/startup.service';\nimport { AuthorisationOnActionError } from '../../../tools/errors/authorisation-on-action-error';\nimport { Config, ConfigAction, ConfigActionEnum } from '../../../tools/utils';\n\n@Component({\n  selector: 'arlas-action-modal',\n  templateUrl: './action-modal.component.html',\n  styleUrls: ['./action-modal.component.css']\n})\nexport class ActionModalComponent {\n\n  public action: ConfigAction;\n  public value: string;\n  public ConfigAction = ConfigActionEnum;\n\n  public errorMessage = '';\n  public constructor(\n    @Inject(MAT_DIALOG_DATA) data: ConfigAction,\n    private dialogRef: MatDialogRef<ActionModalComponent>,\n    private persistenceService: PersistenceService,\n    private configurationService: ArlasConfigService,\n    private errorService: ErrorService\n  ) {\n    this.action = data;\n  }\n\n  public duplicate(newName: string, config: Config) {\n    const arlasConfig = this.configurationService.parse(config.value);\n    if (!!arlasConfig) {\n      const hasResources = this.configurationService.hasResources(arlasConfig);\n      if (hasResources) {\n        this.duplicateResourcesThenConfig$(arlasConfig, newName, config.org).subscribe({\n          error: error => this.raiseError(error),\n          next: () => {\n            this.dialogRef.close(this.action);\n          }\n        });\n      } else {\n        this.duplicateConfig$(config.id, newName, config.org).subscribe({\n          error: error => this.raiseError(error),\n          next: () => {\n            this.dialogRef.close(this.action);\n          }\n        });\n      }\n    } else {\n      console.error('Error duplicating the config: the config is not valid');\n    }\n  }\n\n\n  private duplicateConfig$(configId: string, newConfigName: string, org?: string) {\n    return this.persistenceService.duplicate('config.json', configId, newConfigName, this.getOptionsSetOrg(org))\n      .pipe(\n        catchError((err) => {\n          this.errorService.closeAll().afterAllClosed.pipe(take(1))\n            .subscribe(() => this.errorService.emitAuthorisationError(new AuthorisationOnActionError(err.status, 'duplicate_dashboard'), false));\n          return of(err);\n        }));\n  }\n\n  private duplicateResourcesThenConfig$(arlasConfig: any, newConfigName: string, org: string): Observable<DataWithLinks> {\n    return this.duplicateResources$(arlasConfig, newConfigName, org)\n      .pipe(\n        mergeMap((stringifiedNewArlasConfig: string) =>\n          this.persistenceService.create('config.json', newConfigName, stringifiedNewArlasConfig, [], [],\n            this.getOptionsSetOrg(org)))\n      ).pipe(\n        catchError((err) => {\n          this.errorService.closeAll().afterAllClosed.pipe(take(1))\n            .subscribe(() => this.errorService.emitAuthorisationError(new AuthorisationOnActionError(err.status, 'duplicate_dashboard'), false));\n          return of();\n        })\n      );\n  }\n\n  public create(name: string) {\n    this.persistenceService.create('config.json', name, '{}', [], [])\n      .subscribe({\n        next: (data) => {\n          this.errorMessage = '';\n          this.dialogRef.close(data.id);\n        },\n        error: (e) => this.raiseError(e)\n      });\n  }\n\n\n  public duplicateResources$(arlasConfig: any, newConfigName: string, org: string): Observable<string> {\n    const resources$: Observable<DataWithLinks>[] = [];\n    if (this.configurationService.hasPreview(arlasConfig)) {\n      const previewId = this.configurationService.getPreview(arlasConfig);\n      resources$.push(\n        this.duplicatePreview$(previewId, newConfigName, org).pipe(\n          tap((d: DataWithLinks) => this.configurationService.updatePreview(arlasConfig, d.id))\n        )\n      );\n    }\n    if (this.configurationService.hasI18n(arlasConfig)) {\n      const i18ns = this.configurationService.getI18n(arlasConfig);\n      Object.keys(i18ns).forEach(lg => {\n        resources$.push(\n          this.duplicateI18n$(i18ns[lg], lg, newConfigName, org).pipe(\n            tap((d: DataWithLinks) => this.configurationService.updateI18n(arlasConfig, lg, d.id))\n          )\n        );\n      });\n    }\n\n    if (this.configurationService.hasTours(arlasConfig)) {\n      const tours = this.configurationService.getTours(arlasConfig);\n      Object.keys(tours).forEach(lg => {\n        resources$.push(\n          this.duplicateTour$(tours[lg], lg, newConfigName, org).pipe(\n            tap((d: DataWithLinks) => this.configurationService.updateTour(arlasConfig, lg, d.id))\n          )\n        );\n      });\n    }\n\n    return forkJoin(resources$).pipe(map(p => JSON.stringify(arlasConfig)));\n  }\n\n  private duplicatePreview$(previewId: string, newConfigName: string, org?: string): Observable<DataWithLinks> {\n    const newPreviewName = newConfigName.concat('_preview');\n    return this.persistenceService.get(previewId, this.getOptionsSetOrg(org))\n      .pipe(mergeMap((p: DataWithLinks) =>\n        this.persistenceService.create('preview', newPreviewName, p.doc_value, [], [],\n          this.getOptionsSetOrg(p.doc_organization))\n      ));\n  }\n\n  private duplicateI18n$(i18nId: string, lg: string, newConfigName: string, org?: string): Observable<DataWithLinks> {\n    const newI18nName = newConfigName.concat('_i18n_' + lg);\n    return this.persistenceService.get(i18nId, this.getOptionsSetOrg(org))\n      .pipe(mergeMap((p: DataWithLinks) =>\n        this.persistenceService.create('i18n', newI18nName, p.doc_value, [], [],\n          this.getOptionsSetOrg(p.doc_organization))\n      ));\n  }\n\n  private duplicateTour$(i18nId: string, lg: string, newConfigName: string, org?: string): Observable<DataWithLinks> {\n    const newTourName = newConfigName.concat('_tour_' + lg);\n    return this.persistenceService.get(i18nId, this.getOptionsSetOrg(org))\n      .pipe(mergeMap((p: DataWithLinks) =>\n        this.persistenceService.create('tour', newTourName, p.doc_value, [], [],\n          this.getOptionsSetOrg(p.doc_organization))\n      ));\n  }\n\n  public rename(newName: string, config: Config) {\n    const options = this.getOptionsSetOrg(config.org);\n    this.persistenceService.get(config.id, options)\n      .pipe(\n        catchError((err) => {\n          this.errorService.closeAll().afterAllClosed.pipe(take(1))\n            .subscribe(() =>\n              this.errorService.emitAuthorisationError(new AuthorisationOnActionError(err.status, 'rename_dashboard'), false));\n          return of(err);\n        })\n      )\n      .subscribe(\n        (currentConfig: DataWithLinks) => {\n          const arlasConfig = this.configurationService.parse(currentConfig.doc_value);\n          if (!!arlasConfig) {\n            if (this.configurationService.hasPreview(arlasConfig)) {\n              const previewId = this.configurationService.getPreview(arlasConfig);\n              this.persistenceService.renameResource(previewId, newName + '_preview', options);\n            }\n            if (this.configurationService.hasI18n(arlasConfig)) {\n              const i18nIds = this.configurationService.getI18n(arlasConfig);\n              Object.keys(i18nIds).forEach(lg => {\n                this.persistenceService.renameResource(i18nIds[lg], newName + '_i18n_' + lg, options);\n              });\n            }\n            if (this.configurationService.hasTours(arlasConfig)) {\n              const toursIds = this.configurationService.getTours(arlasConfig);\n              Object.keys(toursIds).forEach(lg => {\n                this.persistenceService.renameResource(toursIds[lg], newName + '_i18n_' + lg, options);\n              });\n            }\n          }\n          this.persistenceService.rename(config.id, newName, this.getOptionsSetOrg(config.org))\n            .subscribe({\n              error: error => this.raiseError(error),\n              next: () => {\n                this.dialogRef.close(this.action);\n              }\n            });\n        });\n  }\n\n  public closeShare(event: [boolean, any]) {\n    // update share is successful, close dialog\n    if (event[0]) {\n      this.dialogRef.close(event[1]);\n    }\n  }\n\n  public raiseError(err: any) {\n    switch (err.status) {\n      case 401:\n        this.errorMessage = marker('Unauthorized to create a dashboard, you need to log in');\n        break;\n      case 403:\n        this.errorMessage = marker('Missing permissions to create a dashboard');\n        break;\n      case 500:\n        err.json().then(e => {\n          if ((e.message as string).indexOf('already exists') > 0) {\n            this.errorMessage = marker('A configuration with this name exists already, please choose another name');\n          } else {\n            this.errorMessage = marker('An error occurred, please try later');\n          }\n        });\n        break;\n      default:\n        this.errorMessage = marker('An error occurred, please try later');\n    }\n  }\n\n  private getOptionsSetOrg(org: string) {\n    return this.persistenceService.getOptionsSetOrg(org);\n  }\n}\n\n\n","<div *ngIf=\"action.type === ConfigAction.DELETE\">\n    <h2 mat-dialog-title>{{'Delete' | translate}} {{action.config.name}}?</h2>\n    <mat-dialog-content>{{'This will delete' | translate}} {{action.config.name}} {{'element and cannot be undone.' | translate}}</mat-dialog-content>\n    <mat-dialog-actions>\n        <!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->\n        <button mat-raised-button class=\"modal_button\" color=\"primary\"  [mat-dialog-close]=\"action.config.id\">{{'Delete' | translate}}</button>\n        <button mat-raised-button class=\"modal_button\" [mat-dialog-close]=\"false\">{{'Cancel' | translate}}</button>\n    </mat-dialog-actions>\n</div>\n\n<div *ngIf=\"action.type=== ConfigAction.DUPLICATE\">\n    <h2 mat-dialog-title>{{'Duplicate' | translate}} {{action.config.name}}?</h2>\n    <div mat-dialog-content>\n        <mat-form-field class=\"example-form-field\">\n            <mat-label>{{'New name' | translate}}</mat-label>\n            <input matInput type=\"text\" [(ngModel)]=\"value\" (focus)=\"errorMessage=''\">\n            <button mat-button *ngIf=\"value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"value=''\">\n            <mat-icon>close</mat-icon>\n            </button>\n        </mat-form-field>\n        <span style=\"color: red; display: block;\">{{errorMessage | translate}}</span>\n    </div>\n    <div mat-dialog-actions>\n        <button mat-raised-button class=\"modal_button\" color=\"primary\" (click)=\"duplicate(value, action.config)\">{{ 'Duplicate' | translate}}</button>\n        <button mat-raised-button class=\"modal_button\" [mat-dialog-close]=\"false\">{{ 'Cancel' | translate}}</button>\n    </div>\n</div>\n\n<div *ngIf=\"action.type=== ConfigAction.RENAME\">\n    <h2 mat-dialog-title>{{'Rename' | translate}} {{action.config.name}}?</h2>\n    <div mat-dialog-content>\n        <mat-form-field class=\"example-form-field\">\n            <mat-label>{{'New name' | translate}}</mat-label>\n            <input matInput type=\"text\" [(ngModel)]=\"value\" (focus)=\"errorMessage=''\">\n            <button mat-button *ngIf=\"value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"value=''\">\n            <mat-icon>close</mat-icon>\n            </button>\n        </mat-form-field>\n        <span style=\"color: red; display: block;\">{{errorMessage | translate}}</span>\n    </div>\n    <div mat-dialog-actions>\n        <button mat-raised-button class=\"modal_button\" color=\"primary\" (click)=\"rename(value, action.config)\">{{ 'Rename' | translate}}</button>\n        <button mat-raised-button class=\"modal_button\" [mat-dialog-close]=\"false\">{{ 'Cancel' | translate}}</button>\n    </div>\n</div>\n\n<div *ngIf=\"action.type=== ConfigAction.CREATE\">\n  <h2 mat-dialog-title>{{'Add a new dashboard' | translate}}</h2>\n  <div mat-dialog-content>\n      <mat-form-field class=\"example-form-field\">\n          <mat-label>{{'Name' | translate}}</mat-label>\n          <input matInput type=\"text\" [(ngModel)]=\"value\" (focus)=\"errorMessage=''\">\n          <button mat-button *ngIf=\"value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"value=''\">\n          <mat-icon>close</mat-icon>\n          </button>\n      </mat-form-field>\n      <span style=\"color: red; display: block;\">{{errorMessage | translate}}</span>\n  </div>\n  <div mat-dialog-actions>\n      <button mat-raised-button class=\"modal_button\" color=\"primary\" (click)=\"create(value)\">{{ 'Create' | translate }}</button>\n      <button mat-raised-button class=\"modal_button\" [mat-dialog-close]=\"false\">{{ 'Cancel' | translate }}</button>\n  </div>\n</div>\n\n<div *ngIf=\"action.type=== ConfigAction.SHARE\">\n  <h2 mat-dialog-title>{{'Share dashboard' | translate}}</h2>\n  <div mat-dialog-content>\n      <arlas-share-config [config]=\"action.config\" (updateEmitter)=\"closeShare($event)\" ></arlas-share-config>\n  </div>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Configuration, ExploreApi } from 'arlas-api';\nimport { DataWithLinks } from 'arlas-persistence-api';\nimport { Subject, from, of } from 'rxjs';\nimport { catchError, filter, map, take } from 'rxjs/operators';\nimport { ArlasIamService } from '../../../services/arlas-iam/arlas-iam.service';\nimport { AuthentificationService } from '../../../services/authentification/authentification.service';\nimport { ArlasCollectionService } from '../../../services/collection/arlas-collection.service';\nimport { ErrorService } from '../../../services/error/error.service';\nimport { PersistenceService } from '../../../services/persistence/persistence.service';\nimport { ArlasSettingsService } from '../../../services/settings/arlas.settings.service';\nimport { ArlasConfigService } from '../../../services/startup/startup.service';\nimport { NO_ORGANISATION } from '../../../tools/consts';\nimport { ConfigAction, ConfigActionEnum } from '../../../tools/utils';\nimport { ActionModalComponent } from '../action-modal/action-modal.component';\nimport { AuthorisationOnActionError } from '../../../tools/errors/authorisation-on-action-error';\n\n@Component({\n  selector: 'arlas-config-menu',\n  templateUrl: './config-menu.component.html',\n  styleUrls: ['./config-menu.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class ConfigMenuComponent {\n  @Input() public actions: Array<ConfigAction>;\n\n  @Input() public zone: string;\n\n  @Output() public actionExecutedEmitter = new Subject();\n\n  public ConfigAction = ConfigActionEnum;\n\n  public constructor(\n    private readonly dialog: MatDialog,\n    private readonly persistenceService: PersistenceService,\n    private readonly configService: ArlasConfigService,\n    private readonly collectionService: ArlasCollectionService,\n    private readonly errorService: ErrorService,\n    private readonly arlasIamService: ArlasIamService,\n    private readonly arlasSettings: ArlasSettingsService,\n    private readonly authenService: AuthentificationService\n  ) {\n\n  }\n\n  public onActionClick(action: ConfigAction): void {\n    switch (action.type) {\n      case ConfigActionEnum.VIEW: {\n        // redirect to arlas-wui-app with config ID;\n        // http://localhost:4200/?config_id=50322281-d279-11ea-9fd1-0242ac160002\n        if (action.url && action.config && action.config.id && action.configIdParam) {\n\n          let url = action.url.concat('/?' + action.configIdParam + '=').concat(action.config.id);\n          if (!!action.config.org && action.config.org !== NO_ORGANISATION) {\n            url = url.concat('&org=' + action.config.org);\n          }\n          this.openUrl(url);\n        }\n        this.actionExecutedEmitter.next(action);\n        break;\n      }\n      case ConfigActionEnum.DELETE: {\n        // Open a confirm modal to validate this choice. Available only if updatable is true for this object\n        const options = this.persistenceService.getOptionsSetOrg(action.config.org);\n        this.getDialogRef(action).subscribe(id => {\n          this.persistenceService.get(id, options).pipe(\n            catchError((err) => {\n              this.errorService.closeAll().afterAllClosed.pipe(take(1))\n                .subscribe(() =>\n                  this.errorService.emitAuthorisationError(new AuthorisationOnActionError(err.status, 'delete_dashboard'), false));\n              return of(err);\n            })\n          ).pipe(\n            map((p: DataWithLinks) => {\n              const parsedConfig = this.configService.parse(p.doc_value);\n              if (this.configService.hasPreview(parsedConfig)) {\n                const previewId = this.configService.getPreview(parsedConfig);\n                this.persistenceService.deleteResource(previewId, options);\n              }\n              if (this.configService.hasI18n(parsedConfig)) {\n                const i18nIds = this.configService.getI18n(parsedConfig);\n                Object.keys(i18nIds).forEach(lg => {\n                  this.persistenceService.deleteResource(i18nIds[lg], options);\n                });\n              }\n              if (this.configService.hasTours(parsedConfig)) {\n                const toursIds = this.configService.getTours(parsedConfig);\n                Object.keys(toursIds).forEach(lg => {\n                  this.persistenceService.deleteResource(toursIds[lg], options);\n                });\n              }\n              this.persistenceService.delete(id, options)\n                .subscribe(() => this.actionExecutedEmitter.next(action));\n            })\n          )\n            .subscribe();\n        });\n        break;\n      }\n      case ConfigActionEnum.EDIT: {\n        // redirect to arlas wui-builer with config ID\n        if (action.url && action.config && action.config.id) {\n          let url = action.url.concat(action.config.id);\n          if (!!action.config.org && action.config.org !== NO_ORGANISATION) {\n            url = url.concat('?org=' + action.config.org);\n          }\n          this.openUrl(url);\n        }\n        this.actionExecutedEmitter.next(action);\n        break;\n      }\n      case ConfigActionEnum.DUPLICATE:\n      case ConfigActionEnum.RENAME:\n        if (action.config && action.config.id) {\n          this.getDialogRef(action).subscribe(() => this.actionExecutedEmitter.next(action));\n        }\n        break;\n      case ConfigActionEnum.SHARE: {\n        if (action.config && action.config.id && action.config.value && JSON.parse(action.config.value).arlas?.server?.url) {\n          const arlasServerUrl = JSON.parse(action.config.value).arlas.server.url;\n          const configuration: Configuration = new Configuration();\n          const arlasExploreApi: ExploreApi = new ExploreApi(\n            configuration,\n            arlasServerUrl,\n            window.fetch\n          );\n          let headers = {};\n          const authentConfig = this.arlasSettings.getAuthentSettings();\n          if (authentConfig && authentConfig.auth_mode === 'iam') {\n            headers = {\n              Authorization: 'Bearer ' + this.arlasIamService.getAccessToken(),\n              'arlas-org-filter': action.config.org\n            };\n          } else if (authentConfig && authentConfig.auth_mode === 'openid') {\n            headers = {\n              Authorization: 'Bearer ' + this.authenService.accessToken,\n            };\n          }\n          const fetchOptions = { headers };\n          from(arlasExploreApi.list(false, 0, fetchOptions)).subscribe(cdrs => {\n            const publicCollections = cdrs.filter(c => (c.params.organisations as any).public).map(c => c.collection_name);\n            const dashboardCollections = Array.from(this.collectionService.getCollectionFromDashboard(JSON.parse(action.config.value)));\n            const publicChecker = (arr, target) => target.every(v => arr.includes(v));\n            action.config.displayPublic = publicChecker(publicCollections, dashboardCollections);\n            this.getDialogRef(action).subscribe(() => this.actionExecutedEmitter.next(action));\n          });\n        }\n        break;\n      }\n      default: {\n        console.error('Unknown action');\n        break;\n      }\n    }\n  }\n\n  private getDialogRef(action: ConfigAction) {\n    const dialogRef = this.dialog.open(ActionModalComponent, {\n      disableClose: true,\n      data: action\n    });\n    return dialogRef.afterClosed().pipe(filter(result => !!result));\n  }\n\n  private openUrl(url: string) {\n    const win = window.open(url, '_blank');\n    win.focus();\n  }\n\n}\n","<button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"Show actions\">\n  <mat-icon>more_vert</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"action-menu\">\n  <div *ngFor=\"let action of actions\">\n    <div *ngIf=\"action.type === ConfigAction.VIEW\">\n      <button mat-menu-item (click)=\"onActionClick(action)\">\n        <mat-icon>launch</mat-icon>\n        <span>{{'View' | translate}}</span>\n      </button>\n    </div>\n    <div *ngIf=\"action.type === ConfigAction.SHARE\">\n      <button mat-menu-item [disabled]=\"!action.enabled\" (click)=\"onActionClick(action)\">\n        <mat-icon>share</mat-icon>\n        <span>{{'Share' | translate}}</span>\n      </button>\n    </div>\n    <div *ngIf=\"action.type === ConfigAction.EDIT\">\n      <button mat-menu-item [disabled]=\"!action.enabled\" (click)=\"onActionClick(action)\">\n        <mat-icon>create</mat-icon>\n        <span>{{'Edit' | translate}}</span>\n      </button>\n    </div>\n    <div *ngIf=\"action.type === ConfigAction.DUPLICATE\">\n      <button mat-menu-item [disabled]=\"!action.enabled\" (click)=\"onActionClick(action)\">\n        <mat-icon>filter_none</mat-icon>\n        <span>{{'Duplicate' | translate}}</span>\n      </button>\n    </div>\n    <div *ngIf=\"action.type === ConfigAction.RENAME\">\n      <button mat-menu-item [disabled]=\"!action.enabled\" (click)=\"onActionClick(action)\">\n        <mat-icon>drive_file_rename_outline</mat-icon>\n        <span>{{'Rename' | translate}}</span>\n      </button>\n    </div>\n    <div *ngIf=\"action.type === ConfigAction.DELETE\">\n      <button mat-menu-item [disabled]=\"!action.enabled\" (click)=\"onActionClick(action)\">\n        <mat-icon>delete</mat-icon>\n        <span>{{'Delete' | translate}}</span>\n      </button>\n    </div>\n  </div>\n</mat-menu>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTableModule } from '@angular/material/table';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ErrorService } from '../../../services/error/error.service';\nimport { ShareConfigComponent } from './share-config.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    TranslateModule,\n    MatMenuModule,\n    MatIconModule,\n    MatButtonModule,\n    MatTableModule,\n    MatCheckboxModule\n  ],\n  exports: [\n    ShareConfigComponent\n  ],\n  declarations: [\n    ShareConfigComponent\n  ]\n})\nexport class ShareConfigModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { ActionModalComponent } from './action-modal.component';\nimport { PersistenceService } from '../../../services/persistence/persistence.service';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { ShareConfigModule } from '../share-config/share-config.module';\nimport { ErrorService } from '../../../services/error/error.service';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    TranslateModule,\n    MatMenuModule,\n    MatIconModule,\n    MatDialogModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatButtonModule,\n    ShareConfigModule,\n    FormsModule\n  ],\n  exports: [\n    ActionModalComponent\n  ],\n  declarations: [\n    ActionModalComponent\n  ],\n  providers: [\n    ErrorService\n  ]\n})\nexport class ActionModalModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ConfigMenuComponent } from './config-menu.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { ActionModalModule } from '../action-modal/action-modal.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    TranslateModule,\n    MatMenuModule,\n    MatIconModule,\n    ActionModalModule,\n    MatButtonModule\n  ],\n  exports: [\n    ConfigMenuComponent\n  ],\n  declarations: [\n    ConfigMenuComponent\n  ]\n})\nexport class ConfigMenuModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n  selector: 'arlas-tool-confirm-modal-msg',\n  templateUrl: './confirm-modal.component.html',\n  styleUrls: ['./confirm-modal.component.css']\n})\nexport class ConfirmModalComponent {\n  public confirmMessage: string;\n  public confirmHTLMMessage: string;\n\n  public constructor(public dialogRef: MatDialogRef<ConfirmModalComponent>) { }\n}\n","<h2 mat-dialog-title><mat-icon style=\"vertical-align: text-bottom;color:red;\">warning</mat-icon>&nbsp;CAUTION</h2>\n<mat-dialog-content style=\"font-family:Roboto,'Helvetica Neue',sans-serif\" [innerHTML]=\"confirmHTLMMessage\">{{confirmMessage}}</mat-dialog-content>\n<mat-dialog-actions>\n  <button mat-button [mat-dialog-close]=\"false\">No</button>\n  <button mat-button [mat-dialog-close]=\"true\">Yes</button>\n</mat-dialog-actions>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit, Input, Output, ElementRef, OnDestroy, ViewChild } from '@angular/core';\nimport { Granularity, TimelineData, TimelineTooltip } from 'arlas-d3';\nimport { Subject } from 'rxjs';\nimport { CalendarTimelineComponent, TranslationDirection } from 'arlas-web-components';\nimport { ArlasOverlayRef } from '../../tools/utils';\nimport { ArlasOverlayService } from '../../services/overlays/overlay.service';\n\n\n/**\n * A Widget wraps a component from ARLAS-web-components and bind it to its contributor. The component has thus input data to plot.\n * Note: This component is binded to ARLAS-wui configuration\n */\n@Component({\n  selector: 'arlas-tool-calendar-timeline',\n  templateUrl: './calendar-timeline.component.html',\n  styleUrls: ['./calendar-timeline.component.css']\n})\nexport class CalendarTimelineToolComponent implements OnInit, OnDestroy {\n\n  public tooltipEvent: Subject<TimelineTooltip> = new Subject<TimelineTooltip>();\n\n  public timelineOverlayRef: ArlasOverlayRef;\n  @Input() public granularity: Granularity;\n  @Input() public climatological: boolean;\n  @Input() public boundDates: Date[] = [];\n  @Input() public data: TimelineData[] = [];\n  @Input() public cursorPosition: Date;\n  @Input() public hideLeftButton: boolean;\n  @Input() public hideRightButton: boolean;\n  @Output() public selectedDate: Subject<TimelineData> = new Subject();\n  @Output() public hoveredDate: Subject<TimelineTooltip> = new Subject();\n  @Output() public translate: Subject<TranslationDirection> = new Subject();\n\n  @ViewChild('calendarTimelineComponent', { static: false }) public calendarTimelineComponent: CalendarTimelineComponent;\n\n  public constructor(\n    private arlasOverlayService: ArlasOverlayService\n  ) {\n  }\n\n  public ngOnInit() {\n  }\n\n  public ngOnDestroy() {\n    this.tooltipEvent.complete();\n    this.tooltipEvent.unsubscribe();\n\n  }\n\n\n  public showCalendarTimelineooltip(tooltip: TimelineTooltip, e: ElementRef, xOffset: number, yOffset: number, right: boolean) {\n    if (!!this.timelineOverlayRef) {\n      this.timelineOverlayRef.close();\n    }\n    if (!!tooltip && tooltip.shown) {\n      this.timelineOverlayRef = this.arlasOverlayService.openCalendarTimelineTooltip({ data: tooltip }, e, xOffset, yOffset, right);\n    }\n  }\n\n  public hideHistogramTooltip() {\n    if (!!this.timelineOverlayRef) {\n      this.timelineOverlayRef.close();\n    }\n  }\n\n  public emitTooltip(tooltip: TimelineTooltip, e: ElementRef) {\n\n    const yOffset = -110;\n    let xOffset = tooltip.position;\n    let right = false;\n    if (!!tooltip && tooltip.shown && tooltip.position > tooltip.width / 2) {\n      xOffset = -tooltip.width + tooltip.position;\n      right = true;\n    }\n    this.showCalendarTimelineooltip(tooltip, e, xOffset, yOffset, right);\n  }\n\n  public onSelectedDate(data: TimelineData) {\n    this.selectedDate.next(data);\n  }\n\n  public onTranslate(td: TranslationDirection): void {\n    this.translate.next(td);\n  }\n\n  public plot(): void {\n    if (this.calendarTimelineComponent) {\n      this.calendarTimelineComponent.plot();\n    }\n  }\n}\n","<div class=\"arlas-calendar_timeline\" #calendar_timeline_view>\n    <arlas-calendar-timeline #calendarTimelineComponent\n        [id]=\"'cc'\"\n        [boundDates]=\"boundDates\"\n        [granularity]=\"granularity\"\n        [climatological]=\"climatological\"\n        [data]=\"data\"\n        [cursorPosition]=\"cursorPosition\"\n        [hideLeftButton]=\"hideLeftButton\"\n        [hideRightButton]=\"hideRightButton\"\n        (translate)=\"onTranslate($event)\"\n        (hoveredData)=\"emitTooltip($event, calendar_timeline_view)\"\n        (selectedData)=\"onSelectedDate($event)\"\n    ></arlas-calendar-timeline>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nexport class ArlasSearchField {\n\n  /**\n   * @description The field label\n   */\n  public label: string;\n  /**\n   * @description The type of the field.\n   */\n  public type: string;\n\n  public constructor(label: string, type: string) {\n    this.label = label;\n    this.type = type;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, input } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n  selector: 'arlas-admonition-card',\n  standalone: true,\n  imports: [\n    TranslateModule\n  ],\n  templateUrl: './admonition-card.component.html',\n  styleUrl: './admonition-card.component.scss'\n})\nexport class AdmonitionCardComponent {\n  public title = input<string>();\n\n}\n","<div class=\"admonition note\">\n  <p class=\"admonition-title\">{{ title() | translate}}</p>\n  <p><ng-content></ng-content></p>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Component, Inject, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\nimport { CollectionReferenceDescription } from 'arlas-api';\nimport { projType } from 'arlas-web-core';\nimport { DeviceDetectorService, OS } from 'ngx-device-detector';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { AuthentificationService } from '../../services/authentification/authentification.service';\nimport {\n  ArlasCollaborativesearchService\n} from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\nimport { ArlasConfigService } from '../../services/startup/startup.service';\nimport { orderAlphabeticallyArlasSearchFields } from '../../tools/utils';\nimport { ArlasSearchField } from '../share/model/ArlasSearchField';\n\nexport const ARLAS_HITS_EXPORTER_VERSION = 2.2;\n\n@Component({\n  selector: 'arlas-download',\n  templateUrl: './download.component.html',\n  styleUrls: ['./download.component.css']\n})\nexport class DownloadComponent {\n\n  @Input() public icon = 'get_app';\n  @Input() public collections;\n\n\n  public constructor(\n    public dialog: MatDialog\n  ) { }\n\n  public openDialog() {\n    this.dialog.open(DownloadDialogComponent, { data: this.collections, width: '80vw' }\n    );\n  }\n}\n\n@Component({\n  selector: 'arlas-download-dialog',\n  templateUrl: './download-dialog.component.html',\n  styleUrls: ['./download-dialog.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class DownloadDialogComponent implements OnInit {\n\n  public allFields = new Array<ArlasSearchField>();\n  public selectedFields = new Array<ArlasSearchField>();\n  public selectedSortableFields = new Array<ArlasSearchField>();\n  public selectedFieldString = '';\n  public selectedFirstOrderField: ArlasSearchField;\n  public selectedSecondOrderField: ArlasSearchField;\n  public selectedThirdOrderField: ArlasSearchField;\n\n  public filterUrl: string;\n  public exportedTypeCommand: string;\n  public authTypeCommand: string;\n\n  public isCopied = false;\n\n  public exportTypeGroup: UntypedFormGroup;\n  public paramFormGroup: UntypedFormGroup;\n  public collectionRef: CollectionReferenceDescription;\n\n  public operatingSystems = ['Linux/Mac', 'Windows'];\n  public detectedOs = 'Linux/Mac';\n\n  public arlasHitsExporterVersion = ARLAS_HITS_EXPORTER_VERSION;\n  public collections;\n  public selectedCollection;\n  public serverUrl;\n  @ViewChild('selectedList', { static: false }) public selectionList: MatSelectionList;\n\n  public constructor(\n    @Inject(MAT_DIALOG_DATA) public data: string[],\n    private formBuilder: UntypedFormBuilder,\n    private collaborativeService: ArlasCollaborativesearchService,\n    private configService: ArlasConfigService,\n    private authService: AuthentificationService,\n    private iamService: ArlasIamService,\n    private settingsService: ArlasSettingsService,\n    private deviceService: DeviceDetectorService,\n  ) {\n    this.collections = data;\n    this.selectedCollection = data[0];\n  }\n\n  public ngOnInit() {\n    this.serverUrl = this.configService.getValue('arlas.server').url;\n    if (this.deviceService.os === OS.WINDOWS) {\n      this.detectedOs = 'Windows';\n    }\n\n    this.exportTypeGroup = this.formBuilder.group({\n      exportType: ['', Validators.required]\n    });\n    this.paramFormGroup = this.formBuilder.group({\n      availableFields: ['', Validators.required]\n    });\n    this.setCollectionField(this.selectedCollection);\n  }\n\n  public onSelectionChange(selectedOptionsList: SelectionModel<MatListOption>) {\n    this.selectedFields = new Array<ArlasSearchField>();\n    this.selectedFieldString = '';\n    selectedOptionsList.selected.forEach((option, index) => {\n      const field = option.getLabel().split('-');\n      this.selectedFields.push(new ArlasSearchField(field[0].trim(), field[1].trim()));\n      this.selectedFieldString += (index !== 0 ? ',' : '') + field[0].trim();\n    });\n  }\n\n  public collectionChange(event) {\n    this.selectedFields = new Array<ArlasSearchField>();\n    this.selectionList.deselectAll();\n    this.setCollectionField(this.selectedCollection);\n  }\n\n  public setCollectionField(collection) {\n    this.collaborativeService.describe(collection).subscribe(\n      description => {\n        this.allFields = [];\n        this.collectionRef = description;\n        const fields = description.properties;\n        if (fields) {\n          Object.keys(fields).forEach(fieldName => {\n            this.getFieldProperties(fields, fieldName);\n          });\n          this.allFields.sort(orderAlphabeticallyArlasSearchFields);\n        }\n\n      },\n      error => {\n        this.collaborativeService.collaborationErrorBus.next(error);\n      });\n  }\n  /**\n   * Switches between dialog steps\n   * @param event The step index\n   */\n  public changeStep(event) {\n    if (event.selectedIndex === 2) {\n      this.isCopied = false;\n      this.exportedTypeCommand = this.exportTypeGroup.get('exportType').value;\n      const filters = Array.from(this.collaborativeService.collaborations.values()).filter(element =>\n        !!element.filters.get(this.selectedCollection) && element.filters.get(this.selectedCollection).length > 0)\n        .map(element => element.filters.get(this.selectedCollection)[0]);\n      this.filterUrl = this.collaborativeService.getUrl([projType.search, []], filters);\n      const token = this.getToken();\n      if (!!token) {\n        this.authTypeCommand = '--auth=token --token=' + token;\n      }\n    }\n  }\n\n  /**\n   * Get the good token according to user connection mode\n   * @returns {string | null}\n   * @protected\n   */\n  protected getToken() {\n    const authSettings = this.settingsService.getAuthentSettings();\n    const authMode = authSettings?.auth_mode ?? undefined;\n    const isAuthActivated = !!authSettings && !!authSettings.use_authent;\n    if(!isAuthActivated) {\n      return null;\n    }\n\n    if (authMode === 'iam') {\n      return this.iamService.getAccessToken();\n    } else {\n      return this.authService.accessToken;\n    }\n  }\n\n  public copyCommand(downloadCommand, downloadCommandWindows) {\n    if (this.detectedOs === 'Windows') {\n      this.copyTextToClipboard((downloadCommandWindows as HTMLTextAreaElement).value);\n    } else {\n      this.copyTextToClipboard((downloadCommand as HTMLTextAreaElement).value);\n    }\n  }\n\n  /**\n   * Copies a text in your clipboard\n   * @param text Text to copy\n   */\n  public copyTextToClipboard(text: string) {\n    const textArea = document.createElement('textarea');\n    textArea.value = text.trim();\n    document.body.appendChild(textArea);\n    textArea.select();\n    try {\n      this.isCopied = document.execCommand('copy');\n    } catch (err) {\n      this.isCopied = false;\n    }\n    document.body.removeChild(textArea);\n  }\n\n  private getFieldProperties(fieldList: any, fieldName: string, parentPrefix?: string) {\n    if (fieldList[fieldName].type === 'OBJECT') {\n      const subFields = fieldList[fieldName].properties;\n      if (subFields) {\n        Object.keys(subFields).forEach(subFieldName => {\n          this.getFieldProperties(subFields, subFieldName, (parentPrefix ? parentPrefix : '') + fieldName + '.');\n        });\n      }\n    } else {\n      this.allFields.push({ label: (parentPrefix ? parentPrefix : '') + fieldName, type: fieldList[fieldName].type });\n    }\n  }\n\n}\n","<button mat-mini-fab (click)=\"openDialog()\" color=\"accent\" class=\"download-button\">\n  <mat-icon aria-label=\"Get your data\">{{icon}}</mat-icon>\n</button>\n","<mat-horizontal-stepper [linear]=\"true\" (selectionChange)=\"changeStep($event)\" class=\"download-stepper\">\n  <mat-step [stepControl]=\"exportTypeGroup\">\n    <form [formGroup]=\"exportTypeGroup\">\n      <ng-template matStepLabel>{{'Type' | translate}}</ng-template>\n      <arlas-admonition-card [title]=\"'Important' | translate\">\n        {{'This tool allows you to get a docker command line to download your data' | translate}}.<br>\n        {{'Make sure you have' | translate}} <strong>docker</strong> {{'installed before continuing' | translate}}.\n      </arlas-admonition-card>\n      <mat-radio-group class=\"download-radio-group\" formControlName=\"exportType\">\n        <mat-radio-button [value]=\"'csv'\" class=\"download-radio-button\">{{ 'CSV' | translate}}\n        </mat-radio-button>\n        <mat-radio-button [value]=\"'json'\" class=\"download-radio-button\">{{ 'Json' | translate}}\n        </mat-radio-button>\n      </mat-radio-group>\n      <mat-divider class=\"download__divider\"></mat-divider>\n      <button mat-button matStepperNext class=\"download-stepper-button\">{{ 'Next' | translate}}</button>\n    </form>\n  </mat-step>\n  <mat-step [stepControl]=\"paramFormGroup\">\n    <form [formGroup]=\"paramFormGroup\">\n      <ng-template matStepLabel>{{'Parameters' | translate}}</ng-template>\n\n      <mat-form-field>\n        <mat-label>{{ \"Collection\" | translate}}</mat-label>\n        <mat-select (selectionChange)=\"collectionChange($event)\" [(value)]=\"selectedCollection\">\n          <mat-option *ngFor=\"let option of collections\" [value]=\"option\" >\n              {{ option | getCollectionDisplayName | translate }}\n            </mat-option>\n        </mat-select>\n      </mat-form-field>\n\n\n      <div class=\"download-feature-block\">\n        <div class=\"download-title-list\">\n          <mat-label>{{'Available fields' | translate}}</mat-label>\n        </div>\n        <div style=\"flex:1;padding:0 7px;\">\n        </div>\n        <div class=\"download-title-list\">\n          <mat-label>{{'Selected fields' | translate}}</mat-label>\n        </div>\n      </div>\n      <div class=\"download-feature-block\">\n        <div style=\"max-height: 40vh;overflow:auto;flex:3\">\n          <mat-selection-list role=\"listbox\" formControlName=\"availableFields\" #selectedList\n            (selectionChange)=\"onSelectionChange(selectedList.selectedOptions)\">\n            <mat-list-option *ngFor=\"let field of allFields\">\n              <p matLine title=\"{{ field.label }} - {{field.type}}\">\n                {{ field.label }} - <span class=\"download-description\">{{field.type}}</span>\n              </p>\n            </mat-list-option>\n          </mat-selection-list>\n        </div>\n        <div class=\"download-feature-button\">\n          <button mat-raised-button class=\"mat-accent fill text-sm download-button\"\n            matTooltip=\"{{'Select All' | translate}}\" matTooltipPosition=\"above\"\n            (click)=\"selectedList.selectAll();onSelectionChange(selectedList.selectedOptions)\">\n            &gt;&gt;\n          </button>\n          <br /><br />\n          <button mat-raised-button class=\"mat-primary fill text-sm download-button\"\n            matTooltip=\"{{'Remove All' | translate}}\"\n            (click)=\"selectedList.deselectAll();onSelectionChange(selectedList.selectedOptions)\">\n            &lt;&lt;\n          </button>\n        </div>\n\n        <div style=\"max-height:40vh;overflow:auto;flex:3\">\n          <mat-list role=\"list\">\n            <mat-list-item *ngIf=\"selectedFields.length == 0\">{{'No item selected' | translate}}</mat-list-item>\n            <mat-list-item role=\"listitem\" *ngFor=\"let field of selectedFields\">\n              <p matLine title=\"{{ field.label }} - {{field.type}}\">\n                {{ field.label }} - <span class=\"download-description\">{{field.type}}</span>\n              </p>\n            </mat-list-item>\n          </mat-list>\n        </div>\n      </div>\n      <mat-divider class=\"download__divider\"></mat-divider>\n      <button mat-button matStepperPrevious class=\"download-stepper-button\">{{ 'Back' | translate}}</button>\n      <button mat-button matStepperNext class=\"download-stepper-button\">{{ 'Next' | translate}}</button>\n    </form>\n  </mat-step>\n  <mat-step>\n    <ng-template matStepLabel>{{ 'Command line' | translate}}</ng-template>\n    <div class=\"download-block\">\n      <mat-form-field appearance=\"outline\">\n        <mat-label>{{ 'Target OS' | translate}}</mat-label>\n        <mat-select [(value)]=\"detectedOs\" #osselection (selectionChange)=\"isCopied = false\">\n          <mat-option *ngFor=\"let opt of operatingSystems\" [value]=\"opt\">\n            {{opt}}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n      <textarea [hidden]=\"osselection.value === 'Windows'\" class=\"download-box\" #downloadCommand>docker run \\\n      -it \\\n      --mount dst=/output,src=\"$PWD\",type=bind \\\n      --rm \\\n      gisaia/arlas-hits-exporter:{{arlasHitsExporterVersion}} \\\n        --search_url=\"{{serverUrl}}/explore/{{selectedCollection}}/_search?size=9999&sort={{collectionRef?.params.id_path}}&{{filterUrl}}\" \\\n        --include={{selectedFieldString}} \\\n        --format={{this.exportedTypeCommand}} \\\n        {{authTypeCommand}}\n      </textarea>\n      <textarea [hidden]=\"osselection.value !== 'Windows'\" class=\"download-box\" #downloadCommandWindows>docker run -it --mount dst=/output,src=\"%cd%\",type=bind --rm gisaia/arlas-hits-exporter:{{arlasHitsExporterVersion}} --search_url=\"{{serverUrl}}/explore/{{selectedCollection}}/_search?size=9999&sort={{collectionRef?.params.id_path}}&{{filterUrl}}\" --include={{selectedFieldString}} --format={{exportedTypeCommand}} {{authTypeCommand}}\n      </textarea>\n    </div>\n    <mat-divider class=\"download__divider\"></mat-divider>\n    <div class=\"download-stepper-actions\">\n      <button mat-button matStepperPrevious class=\"download-stepper-button\">{{ 'Back' | translate}}</button>\n      <button mat-raised-button color=\"accent\" class=\"download-stepper-button\"\n        [class.btn-success]=\"isCopied\" (click)=\"copyCommand(downloadCommand, downloadCommandWindows)\">\n        <mat-icon [class.hide-icon]=\"!isCopied\">check</mat-icon>\n        <span *ngIf=\"!isCopied\">{{ 'Copy' | translate}}</span>\n        <span *ngIf=\"isCopied\">{{ 'Copied' | translate}}</span>\n      </button>\n    </div>\n  </mat-step>\n</mat-horizontal-stepper>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Extend } from './model';\nimport { Guid } from '../../tools/utils';\nimport { ArlasLocalDatabase } from '../../tools/arlasLocalDatabase';\n\nexport class ExtendLocalDatabase extends ArlasLocalDatabase<Extend> {\n\n\n  public constructor() {\n    super('extend');\n  }\n\n  public init(extend: Extend): Extend {\n    const initExtend = {\n      id: extend.id,\n      date: new Date(extend.date),\n      name: extend.name,\n      geometry: extend.geometry,\n      private: extend.private\n    };\n    return initExtend;\n  }\n\n  public createExtend(name: string, geometry: any, visibility: boolean = false, date?: Date, id?: string): Extend {\n    let uid = '';\n    let extendDate: Date;\n\n    if (id) {\n      uid = id;\n    } else {\n      const guid = new Guid();\n      uid = guid.newGuid();\n    }\n    if (date) {\n      extendDate = new Date(date);\n    } else {\n      extendDate = new Date();\n    }\n    const extend: Extend = {\n      id: uid,\n      date: extendDate,\n      name: name,\n      geometry: geometry,\n      private: visibility\n    };\n    return extend;\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Extend } from './model';\nimport { Guid } from '../../tools/utils';\nimport { ArlasPersistenceDatabase } from '../../tools/arlasPersistenceDatabase';\nimport { PersistenceService } from '../persistence/persistence.service';\n\nexport class ExtendPersistenceDatabase extends ArlasPersistenceDatabase<Extend> {\n\n\n  public constructor( public persistenceService: PersistenceService) {\n    super('extend', persistenceService);\n  }\n\n  public init(extend: Extend): Extend {\n    const initExtend = {\n      id: extend.id,\n      date: new Date(extend.date),\n      name: extend.name,\n      geometry: extend.geometry,\n      private: extend.private\n    };\n    return initExtend;\n  }\n\n  public createExtend(name: string, geometry: any, visibility: boolean = false, date?: Date, id?: string): Extend {\n    let uid = '';\n    let extendDate: Date;\n\n    if (id) {\n      uid = id;\n    } else {\n      const guid = new Guid();\n      uid = guid.newGuid();\n    }\n    if (date) {\n      extendDate = new Date(date);\n    } else {\n      extendDate = new Date();\n    }\n    const extend: Extend = {\n      id: uid,\n      date: extendDate,\n      name: name,\n      geometry: geometry,\n      private: visibility\n    };\n    return extend;\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { PersistenceService } from '../persistence/persistence.service';\nimport { ArlasStartupService } from '../startup/startup.service';\nimport { ExtendLocalDatabase } from './extendLocalDatabase';\nimport { ExtendPersistenceDatabase } from './extendPersistenceDatabase';\nimport { Extend } from './model';\nimport { Observable } from 'rxjs';\nimport { AuthentificationService } from '../authentification/authentification.service';\n\n@Injectable()\nexport class ArlasExtendService {\n  public dataBase: ExtendLocalDatabase | ExtendPersistenceDatabase;\n  public extendMap: Map<string, Extend> = new Map<string, Extend>();\n\n  public constructor(\n    private arlasStartupService: ArlasStartupService,\n    private authentService: AuthentificationService,\n    private persistenceService: PersistenceService) {\n    if (this.arlasStartupService.shouldRunApp && !this.arlasStartupService.emptyMode) {\n      if (this.persistenceService.isAvailable && this.authentService.hasValidAccessToken() && this.authentService.hasValidIdToken()) {\n        this.dataBase = new ExtendPersistenceDatabase(this.persistenceService);\n        this.dataBase.dataChange.subscribe(() => {\n          this.extendMap = this.dataBase.storageObjectMap;\n        });\n      } else {\n        this.dataBase = new ExtendLocalDatabase();\n        this.dataBase.dataChange.subscribe(() => {\n          this.extendMap = this.dataBase.storageObjectMap;\n        });\n      }\n    }\n  }\n\n  public init(extend: Extend): Extend {\n    const initExtend = {\n      id: extend.id,\n      date: new Date(extend.date),\n      name: extend.name,\n      geometry: extend.geometry,\n      private: extend.private\n    };\n    return initExtend;\n  }\n\n  /**\n * List all bookmark for the user to update dataBase\n */\n  public listExtends(size: number, pageNumber: number): Observable<void> {\n    return (this.dataBase as ExtendPersistenceDatabase).list(size, pageNumber, 'desc');\n  }\n\n  public setPage(size: number, pageNumber: number) {\n    (this.dataBase as ExtendPersistenceDatabase).setPage({ size: size, number: pageNumber });\n  }\n\n  public addExtend(name: string, geometry: any): Observable<void>{\n    const newExtend = this.dataBase.createExtend(name, geometry);\n    return this.dataBase.add(newExtend);\n  }\n\n  public removeExtend(id: string): Observable<void> {\n    return this.dataBase.remove(id);\n  }\n\n  public getExtendById(id: string): Extend {\n    return Array.from(this.extendMap.values()).find(extend => extend.id === id);\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Output } from '@angular/core';\nimport { ArlasExtendService } from '../../services/extend/extend.service';\nimport { Subject } from 'rxjs';\nimport { Extend } from '../../services/extend/model';\nimport { ArlasDataSource } from '../../tools/arlasDataSource';\nimport { PageEvent } from '@angular/material/paginator';\nimport { ExtendPersistenceDatabase } from '../../services/extend/extendPersistenceDatabase';\nimport { ExtendLocalDatabase } from '../../services/extend/extendLocalDatabase';\n\n@Component({\n  selector: 'arlas-extend',\n  templateUrl: './extend.component.html',\n  styleUrls: ['./extend.component.css']\n})\nexport class ExtendComponent {\n\n  public extends: ArlasDataSource | Extend[];\n  public columnsToDisplay = ['checked', 'name', 'date', 'actions'];\n  public itemsCheck: Array<string> = new Array<string>();\n\n  public resultsLength = 0;\n  public pageSize = 10;\n  public pageNumber = 1;\n\n  public isPersistenceActive = false;\n\n  @Output() public actions: Subject<{ action: string; id: string; geometry?: any; }> = new Subject<any>();\n\n  public constructor(\n    private extendService: ArlasExtendService\n  ) {\n    // Init component with data from persistence server, if defined and server is reachable\n    if (this.extendService.dataBase instanceof ExtendPersistenceDatabase) {\n      this.isPersistenceActive = true;\n      this.extendService.setPage(this.pageSize, this.pageNumber);\n      this.getExtendsList();\n      (this.extendService.dataBase as ExtendPersistenceDatabase).dataChange\n        .subscribe((data: { total: number; items: Extend[]; }) => {\n          this.resultsLength = data.total;\n          this.extends = data.items;\n        });\n    } else {\n      this.extends = new ArlasDataSource(this.extendService.dataBase as ExtendLocalDatabase);\n    }\n  }\n\n  public getExtendsList() {\n    this.extendService.listExtends(this.pageSize, this.pageNumber).subscribe(()=>{},(e)=> console.error(e));\n  }\n\n  public pageChange(pageEvent: PageEvent) {\n    this.pageNumber = pageEvent.pageIndex;\n    this.pageSize = pageEvent.pageSize;\n    this.extendService.setPage(this.pageSize, this.pageNumber);\n    this.getExtendsList();\n  }\n\n  public selectExtend(event: { checked: boolean; }, id: string) {\n    if (event.checked) {\n      this.itemsCheck.push(id);\n    } else {\n      const index = this.itemsCheck.indexOf(id, 0);\n      if (index > -1) {\n        this.itemsCheck.splice(index, 1);\n      }\n    }\n  }\n\n  public viewExtend(id: string) {\n    const extend: Extend = this.extendService.getExtendById(id);\n    this.actions.next({ action: 'view', id: id, geometry: extend.geometry });\n\n  }\n\n  public removeExtend(id: string) {\n    this.extendService.removeExtend(id).subscribe(()=>{\n      this.selectExtend({ checked: false }, id);\n      this.actions.next({ action: 'remove', id: id });\n    },(e)=> console.error(e));\n  }\n}\n","<mat-table [dataSource]=\"extends\" class=\"extend-table-items\">\n  <ng-container matColumnDef=\"checked\">\n    <mat-header-cell *matHeaderCellDef> # </mat-header-cell>\n    <mat-cell *matCellDef=\"let extend\">\n      <mat-checkbox class=\"extend-check\" (change)=\"selectExtend($event, extend.id)\"></mat-checkbox>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"actions\">\n    <mat-header-cell *matHeaderCellDef> {{ 'Actions' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let extend\">\n      <mat-icon class=\"extend-icons-action extend-icons-action-view\" title=\"{{ 'View' | translate }}\" (click)=\"viewExtend(extend.id)\">\n        remove_red_eye\n      </mat-icon>\n      <mat-icon class=\"extend-icons-action extend-icons-action-delete\" title=\"{{ 'Remove' | translate }}\" (click)=\"removeExtend(extend.id)\">\n        delete\n      </mat-icon>\n    </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"date\">\n    <mat-header-cell *matHeaderCellDef> {{ 'Date' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let extend\"> {{extend.date | date: 'dd/MM/yyyy HH:mm:ss'}} </mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"name\">\n    <mat-header-cell *matHeaderCellDef> {{ 'Name' | translate }} </mat-header-cell>\n    <mat-cell *matCellDef=\"let extend\">{{extend.name}}</mat-cell>\n  </ng-container>\n\n  <mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></mat-header-row>\n  <mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></mat-row>\n</mat-table>\n<mat-paginator *ngIf=\"isPersistenceActive\" [pageIndex]=\"this.pageNumber\"\n  [pageSize]=\"this.pageSize\"\n  [length]=\"resultsLength\"\n  [pageSizeOptions]=\"[5, 10, 15, 20]\"\n  [showFirstLastButtons]=true\n  (page)=\"pageChange($event)\"\n></mat-paginator>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport {\n  ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges,\n  OnInit, Output, Pipe, PipeTransform, SimpleChanges, ViewEncapsulation\n} from '@angular/core';\nimport { CollectionReferenceParameters } from 'arlas-api';\nimport { ArlasColorService } from 'arlas-web-components';\nimport { Collaboration, Contributor } from 'arlas-web-core';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasCollectionService } from '../../services/collection/arlas-collection.service';\nimport { ArlasConfigService, ArlasStartupService } from '../../services/startup/startup.service';\nimport { CollectionCount, ZoomToDataStrategy } from '../../tools/utils';\nimport { isShortcutID } from '../filter-shortcut/filter-shortcut.utils';\n\n@Pipe({ name: 'getContributorLabel' })\nexport class GetContributorLabelPipe implements PipeTransform {\n  public transform(value: string, registry?: Map<string, Contributor>): string {\n    let label = registry.get(value).getFilterDisplayName();\n    if (label !== undefined && label !== '') {\n      const labelSplited = label.split('<=');\n      if (labelSplited.length === 3) {\n        label = labelSplited[1].trim();\n      }\n      return label;\n    } else {\n      return '';\n    }\n  }\n}\n\n@Pipe({ name: 'getColorFilter' })\nexport class GetColorFilterPipe implements PipeTransform {\n  public transform(value: string, type: string, collaborationsMap: Map<string, Collaboration>): string {\n    const collaboration = collaborationsMap.get(value);\n    if (type === 'color') {\n      return collaboration.enabled ? '#000' : '#BDBDBD';\n    } else if (type === 'background') {\n      return '#FFF';\n    }\n  }\n}\n\n@Pipe({ name: 'getGlobalColorFilter' })\nexport class GetGlobalColorFilterPipe implements PipeTransform {\n  public transform(value: string, type: string, color, backgroundColor, collaborationsMap: Map<string, Collaboration>): string {\n    const collaboration = collaborationsMap.get(value);\n    if (type === 'color') {\n      return collaboration.enabled ? color : '#BDBDBD';\n    } else if (type === 'background') {\n      return collaboration.enabled ? backgroundColor : '#FFF';\n    }\n  }\n}\n\n@Pipe({ name: 'getCollaborationIcon' })\nexport class GetCollaborationIconPipe implements PipeTransform {\n  public transform(value: string, contributorsIcons: Map<string, string>): string {\n    return contributorsIcons.get(value);\n\n  }\n}\n\n@Pipe({ name: 'isCollabOnCollection' })\nexport class IsCollabOnCollectionPipe implements PipeTransform {\n  public transform(value: string, collection: string, contributors: Map<string, Contributor>) {\n    const contributor = contributors.get(value);\n    return contributor.collections.map(c => c.collectionName).indexOf(collection) >= 0 && value !== 'timeline';\n  }\n}\n\n@Component({\n  selector: 'arlas-filter',\n  templateUrl: './filters.component.html',\n  styleUrls: ['./filters.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  animations: [\n    trigger('fadeInOut', [\n      state('void', style({ opacity: 0 })), // Initial state when element is not present\n      state('*', style({ opacity: 1 })), // Final state when element is present\n      transition(':enter', animate('500ms ease-in-out')), // Animation duration and easing\n      transition(':leave', animate('500ms ease-in-out'))\n    ])\n  ]\n})\nexport class FiltersComponent implements OnInit, OnChanges {\n\n  /**\n   * @Input : Angular\n   * @description Background color of the filters chips\n   */\n  @Input() public backgroundColorFilter = '#FFF';\n  /**\n    * @Input : Angular\n    * @description Color of the filters icon\n    */\n  @Input() public colorFilter = '#000';\n\n  /**\n   * @Input : Angular\n   * @description Contributors identifier array which will be ignored from the filter summary\n   */\n  @Input() public ignoredContributors = new Array<string>();\n\n  /**\n   * @Input : Angular\n   * @description Map of collectionName, collection params. This input allows us to verify if the collection has a centroid path and\n   * therefore propose or not the 'Zoom to Data' button\n   */\n  @Input() public collectionToDescription = new Map<string, CollectionReferenceParameters>();\n\n  /**\n   * @Input : Angular\n   * @description Specifies which space in pixels is available to display the collection counts,\n   * in order to hide the one that would overflow. If not set, this behavior is not put in place.\n   */\n  @Input() public availableSpace: number;\n\n  /**\n   * @Input : Angular\n   * @description Spacing used between collection count elements.\n   * Used to compute how much space is available for the counts.\n   */\n  @Input() public spacing = 5;\n\n  /**\n   * @Input : Angular\n   * @description Whether the zoom to data icon is displayed or not\n   */\n  @Input() public showZoomToData = true;\n\n  /**\n   * @Input : Angular\n   * @description Type of zoom to data\n   */\n  @Input() public zoomToStrategy: ZoomToDataStrategy;\n\n  /**\n   * @Output : Angular\n   * @description This output emit contributor id  on click on filter chip\n   */\n  @Output() public clickOnFilter: Subject<string> = new Subject<string>();\n\n  /**\n   * @Output : Angular\n   * @description This output emits the order of zooming on the extent of the given collection name\n   */\n  @Output() public zoomEvent: Subject<string> = new Subject<string>();\n\n\n  public collaborations: Set<string> = new Set<string>();\n  public contributors: Map<string, Contributor>;\n  public contributorsIcons: Map<string, string>;\n  public collaborationByCollection: Array<{ collection: string; collaborationId: string; }> = [];\n  public countAll: CollectionCount[];\n  public extraCountAll: CollectionCount[];\n  public readonly NUMBER_FORMAT_CHAR = 'NUMBER_FORMAT_CHAR';\n  public collaborationsMap: Map<string, Collaboration>;\n  public isExtraOpen = false;\n\n  public ZoomToDataStrategy = ZoomToDataStrategy;\n\n  /**\n   * @description Whether to exceptionally display the extra collections for space computations\n   */\n  public showExtraCollections = false;\n\n  private _onDestroy$ = new Subject<boolean>();\n\n  public constructor(\n    private collaborativeSearchService: ArlasCollaborativesearchService,\n    private arlasStartupService: ArlasStartupService,\n    private configService: ArlasConfigService,\n    private arlasColorService: ArlasColorService,\n    private cdr: ChangeDetectorRef,\n    private collectionService: ArlasCollectionService\n  ) {\n    this.contributors = this.collaborativeSearchService.registry;\n    this.subscribeToFutureCollaborations();\n  }\n\n  public ngOnInit(): void {\n    this.contributorsIcons = new Map(this.getAllContributorsIcons());\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes['availableSpace'] || changes['extraTitleWidth']) {\n      this.hideExtraCollections(true);\n    }\n  }\n\n  public ngOnDestroy() {\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n\n  public removeCollaboration(contributorId: string): void {\n    this.collaborativeSearchService.removeFilter(contributorId);\n    this.cdr.detectChanges();\n  }\n\n  public changeCollaborationState(contributorId): void {\n    this.clickOnFilter.next(contributorId);\n    const collaborationState = this.collaborativeSearchService.isEnable(contributorId);\n    if (collaborationState) {\n      this.collaborativeSearchService.disable(contributorId);\n    } else {\n      this.collaborativeSearchService.enable(contributorId);\n    }\n  }\n\n  public removeAllFilters(): void {\n    this.collaborativeSearchService.removeAll();\n    this.cdr.detectChanges();\n  }\n\n  public getAllContributorsIcons(): any {\n    return Array.from(this.arlasStartupService.contributorRegistry.keys())\n      .map(k => [k, this.configService.getValue('arlas.web.contributors').find(contrib => contrib.identifier === k).icon]).values();\n  }\n\n  public zoomToData(collection: string): void {\n    this.zoomEvent.next(collection);\n  }\n\n  public toggleExtraCounts() {\n    this.isExtraOpen = !this.isExtraOpen;\n  }\n\n  private retrieveCurrentCollaborations() {\n    // If a contributor is the one of a shortcut, then its id is an UUID\n    Array.from(this.contributors.keys()).filter(id => (this.ignoredContributors.indexOf(id) < 0) && !isShortcutID(id))\n      .forEach(contributorId => {\n        const collaboration = this.collaborativeSearchService.getCollaboration(contributorId);\n        if (collaboration != null) {\n          this.collaborations.add(contributorId);\n        } else {\n          this.collaborations.delete(contributorId);\n        }\n      });\n  }\n\n  private subscribeToFutureCollaborations() {\n    this.collaborativeSearchService.collaborationBus.pipe(takeUntil(this._onDestroy$)).subscribe(collaborationBus => {\n      this.collaborationsMap = new Map(this.collaborativeSearchService.collaborations);\n      this.collaborativeSearchService.countAll.pipe(take(1), takeUntil(this._onDestroy$)).subscribe(count => {\n        if (!!count) {\n          this.countAll = [];\n          const countsMap = new Map<string, CollectionCount>();\n          count.forEach(c => {\n            countsMap.set(c.collection, {\n              collection: c.collection,\n              count: c.count,\n              color: this.arlasColorService.getColor(c.collection) + ' !important',\n              hasCentroidPath: !!this.collectionToDescription.get(c.collection) &&\n                !!this.collectionToDescription.get(c.collection).centroid_path,\n              hasGeometryPath: !!this.collectionToDescription.get(c.collection) &&\n                !!this.collectionToDescription.get(c.collection).geometry_path,\n              unit: this.collectionService.getUnit(c.collection),\n              ignored: this.collectionService.isUnitIgnored(c.collection)\n            });\n          });\n\n          /** respects order of units list that is given by config */\n          const unitsSet = new Set(this.collectionService.getAllUnits().map(u => u.collection));\n          unitsSet.forEach(c => {\n            if (countsMap.get(c)) {\n              this.countAll.push(countsMap.get(c));\n            }\n          });\n          // Collections that don't have units are at the end of the list\n          countsMap.forEach((v, k) => {\n            if (!unitsSet.has(k)) {\n              this.countAll.push(v);\n            }\n          });\n        }\n        this.cdr.detectChanges();\n        this.hideExtraCollections(false);\n      });\n      if (!collaborationBus.all && (this.ignoredContributors.indexOf(collaborationBus.id) < 0) && !isShortcutID(collaborationBus.id)) {\n        const collaboration = this.collaborativeSearchService.getCollaboration(collaborationBus.id);\n        if (collaboration != null) {\n          if (collaborationBus.operation === 0) {\n            this.collaborations.add(collaborationBus.id);\n          } else if (collaborationBus.operation === 1) {\n            this.collaborations.delete(collaborationBus.id);\n          }\n        } else {\n          this.collaborations.delete(collaborationBus.id);\n        }\n      } else {\n        this.retrieveCurrentCollaborations();\n      }\n    });\n  }\n\n  /**\n   * Based on the space available, decide which collection count go in a 'See more' section. If no 'availableSpace' is set, nothing is done.\n   */\n  private hideExtraCollections(resizeEvent: boolean) {\n    if (this.availableSpace && this.countAll) {\n      this.showExtraCollections = true;\n      if (resizeEvent && this.extraCountAll) {\n        this.countAll = [...this.countAll, ...this.extraCountAll];\n        this.extraCountAll = new Array();\n      }\n      this.cdr.detectChanges();\n\n      const widths = this.countAll.map(\n        c => !!document.getElementById(`arlas-count-${c.collection}`) ?\n          document.getElementById(`arlas-count-${c.collection}`).getBoundingClientRect().width + this.spacing : 0);\n      const clearAllWidth = this.collaborations.size > 0 && !!document.getElementById('clear-all') ?\n        document.getElementById('clear-all').getBoundingClientRect().width + this.spacing : 0;\n      const timelineChipWidth = this.collaborations.has('timeline') && !!document.getElementById('filter-chip-timeline') ?\n        document.getElementById('filter-chip-timeline').getBoundingClientRect().width + this.spacing : 0;\n      const extraCollectionsWidth = !!document.getElementById('extra-collections') ?\n        document.getElementById('extra-collections').getBoundingClientRect().width + this.spacing : 0;\n\n      let breakoffIndex = -1;\n      let cumulativeWidth = 0;\n      const threshold = this.availableSpace - timelineChipWidth - clearAllWidth;\n      for (let idx = 0; idx < widths.length; idx++) {\n        cumulativeWidth += widths[idx];\n        // If this count overflows\n        if (cumulativeWidth > threshold) {\n          // If the previous count + the 'See more' overflows\n          if (idx - 1 >= 0 && cumulativeWidth - widths[idx] > threshold - extraCollectionsWidth) {\n            breakoffIndex = idx - 1;\n          } else {\n            breakoffIndex = idx;\n          }\n          break;\n        }\n      }\n      this.extraCountAll = breakoffIndex >= 0 ? this.countAll.splice(breakoffIndex, this.countAll.length - breakoffIndex) : [];\n      this.showExtraCollections = false;\n      this.cdr.detectChanges();\n    }\n  }\n}\n","<mat-chip-listbox class=\"chips--container\">\n  <ng-container *ngFor=\"let c of countAll\">\n    <mat-basic-chip class=\"collection-chip\" id=\"arlas-count-{{c.collection}}\" [style.borderColor]=\"c.color\"\n      *ngIf=\"!c.ignored\">\n      <div class=\"count-container\">\n        <div *ngIf=\"showZoomToData &&\n              (((zoomToStrategy === ZoomToDataStrategy.CENTROID || !zoomToStrategy)  && c.hasCentroidPath)\n              || (zoomToStrategy === ZoomToDataStrategy.GEOMETRY && c.hasGeometryPath))\" class=\"zoom\"\n          (click)=\"zoomToData(c.collection)\" matTooltip=\"{{ 'Zoom to data' | translate }}\" matTooltipPosition=\"below\">\n          <mat-icon>filter_center_focus</mat-icon>\n        </div>\n\n        <div class=\"value-unit\">\n          <div class=\"value\">\n            {{c.count | formatNumber:NUMBER_FORMAT_CHAR}}\n          </div>\n          <div class=\"unit\">\n            {{c.unit | translate}}\n          </div>\n        </div>\n        <ng-container *ngFor=\"let contributorId of collaborations; let index = index\">\n          <mat-basic-chip id=\"filter-chip-{{contributorId}}\" class=\"filter-chip\"\n            *ngIf=\"contributorId | isCollabOnCollection:c.collection:contributors\"\n            [style.color]=\"contributorId | getGlobalColorFilter:'color':colorFilter:backgroundColorFilter:collaborationsMap \"\n            [style.background-color]=\"contributorId | getGlobalColorFilter:'background':colorFilter:backgroundColorFilter:collaborationsMap \"\n            (click)=\"changeCollaborationState(contributorId)\"\n            [matTooltip]=\"contributorId | getContributorLabel:contributors | translate\">\n            <mat-icon class=\"icon\">{{contributorId | getCollaborationIcon:contributorsIcons }}\n            </mat-icon>\n            <mat-icon (click)=\"removeCollaboration(contributorId)\" class=\"icon_close mat-icon material-icons\">\n              clear</mat-icon>\n          </mat-basic-chip>\n        </ng-container>\n      </div>\n    </mat-basic-chip>\n  </ng-container>\n\n  <div *ngIf=\"showExtraCollections || (extraCountAll && extraCountAll.length > 0)\" class=\"extra\"\n    [class.extra-open]=\"isExtraOpen\" id=\"extra-collections\">\n    <section class=\"title\" (click)=\"toggleExtraCounts()\">\n      <div class=\"text\">{{ 'See more' | translate }}</div>\n      <div class=\"info\">\n        <div class=\"extra-count-number\">{{ extraCountAll ? extraCountAll.length : 0 }}</div>\n        <mat-icon class=\"chevron\">\n          {{isExtraOpen ? 'expand_less' : 'expand_more'}}\n        </mat-icon>\n      </div>\n    </section>\n    <div *ngIf=\"isExtraOpen\" class=\"separator\"></div>\n    <section [class.hidden]=\"!isExtraOpen\" class=\"extra-counts\">\n      <ng-container *ngFor=\"let c of extraCountAll\">\n        <mat-basic-chip class=\"collection-chip\" id=\"arlas-count-{{c.collection}}\" [style.borderColor]=\"c.color\"\n          *ngIf=\"!c.ignored\">\n          <div class=\"count-container\">\n            <div *ngIf=\"showZoomToData &&\n              (((zoomToStrategy === ZoomToDataStrategy.CENTROID || !zoomToStrategy)  && c.hasCentroidPath)\n              || (zoomToStrategy === ZoomToDataStrategy.GEOMETRY && c.hasGeometryPath))\" class=\"zoom\"\n              (click)=\"zoomToData(c.collection)\" matTooltip=\"{{ 'Zoom to data' | translate }}\"\n              matTooltipPosition=\"left\">\n              <mat-icon>filter_center_focus</mat-icon>\n            </div>\n\n            <div class=\"value-unit\">\n              <div class=\"value\">\n                {{c.count | formatNumber:NUMBER_FORMAT_CHAR}}\n              </div>\n              <div class=\"unit\">\n                {{c.unit | translate}}\n              </div>\n            </div>\n            <ng-container *ngFor=\"let contributorId of collaborations; let index = index\">\n              <mat-basic-chip id=\"filter-chip-{{contributorId}}\" class=\"filter-chip\"\n                *ngIf=\"contributorId | isCollabOnCollection:c.collection:contributors\"\n                [style.color]=\"contributorId | getGlobalColorFilter:'color':colorFilter:backgroundColorFilter:collaborationsMap \"\n                [style.background-color]=\"contributorId | getGlobalColorFilter:'background':colorFilter:backgroundColorFilter:collaborationsMap \"\n                (click)=\"changeCollaborationState(contributorId)\"\n                [matTooltip]=\"contributorId | getContributorLabel:contributors | translate\">\n                <mat-icon class=\"icon\">{{contributorId | getCollaborationIcon :contributorsIcons }}\n                </mat-icon>\n                <mat-icon (click)=\"removeCollaboration(contributorId)\" class=\"icon_close mat-icon material-icons\">\n                  clear</mat-icon>\n              </mat-basic-chip>\n            </ng-container>\n          </div>\n        </mat-basic-chip>\n      </ng-container>\n    </section>\n  </div>\n\n  <ng-container *ngFor=\"let contributorId of collaborations; let index = index\">\n    <ng-container *ngIf=\"contributorId === 'timeline'\">\n      <mat-basic-chip class=\"timeline-chip\" [@fadeInOut] id=\"filter-chip-{{contributorId}}\"\n        [style.color]=\"contributorId | getGlobalColorFilter:'color':colorFilter:backgroundColorFilter:collaborationsMap \"\n        (click)=\"changeCollaborationState(contributorId)\"\n        [matTooltip]=\"contributorId | getContributorLabel:contributors | translate\">\n        <mat-icon class=\"icon\">{{contributorId | getCollaborationIcon :contributorsIcons }}</mat-icon>\n        <mat-icon (click)=\"removeCollaboration(contributorId)\" class=\"icon_close mat-icon material-icons\">\n          clear</mat-icon>\n      </mat-basic-chip>\n    </ng-container>\n  </ng-container>\n\n  <mat-basic-chip id=\"clear-all\" class=\"clear-chip\" *ngIf=\"collaborations.size > 0\" [@fadeInOut]\n    (click)=\"removeAllFilters()\" [matTooltip]=\"'Clear all filters' | translate\">\n    <mat-icon>filter_alt_off</mat-icon>\n  </mat-basic-chip>\n</mat-chip-listbox>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject, OnDestroy } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { PermissionDialogData } from '../_interfaces';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ArlasIamService } from '../../../services/arlas-iam/arlas-iam.service';\nimport { PermissionData, PermissionDef } from 'arlas-iam-api';\nimport { Subscription, finalize } from 'rxjs';\nimport { ArlasSettingsService } from '../../../services/settings/arlas.settings.service';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\n\n@Component({\n  templateUrl: './permissions-creator-dialog.component.html',\n  styleUrls: ['./permissions-creator-dialog.component.scss']\n})\nexport class PermissionsCreatorDialogComponent implements OnDestroy {\n\n  public createPermissionForm: FormGroup;\n\n  public CREATE_TEXT: string = marker('Create the permission');\n  public CLOSE_TEXT = marker('Close');\n\n  public descriptionInputDisabled = false;\n  public descriptionInputHidden = false;\n\n  public creationButtonDisabled = false;\n  public creationButtonHidden = false;\n\n  public creationStatus: 'successful' | 'errored';\n  public creationError;\n\n  public showErrorDetails = false;\n  public showSpinner = false;\n  public showAction = true;\n  private subscription: Subscription;\n\n  public constructor(\n    private iamService: ArlasIamService,\n    @Inject(MAT_DIALOG_DATA) public data: PermissionDialogData,\n    private settingsService: ArlasSettingsService) {\n    this.createPermissionForm = new FormGroup({\n      description: new FormControl<string>('', [Validators.required])\n    });\n  }\n\n  public createPermission() {\n    this.CREATE_TEXT = marker('Creating');\n    this.showSpinner = true;\n    this.creationButtonDisabled = true;\n    this.descriptionInputDisabled = false;\n    const permissionDef: PermissionDef = {\n      value: this.data.partitionFilterHeader,\n      description: this.createPermissionForm.get('description').value\n    };\n    this.subscription = this.iamService.createPermission(this.data.oid, permissionDef).pipe(\n      finalize(() => {\n        this.showSpinner = false;\n        this.creationButtonDisabled = false;\n        this.creationButtonHidden = true;\n        this.descriptionInputHidden = true;\n      })\n    ).subscribe({\n      next: (permissionData: PermissionData) => {\n        this.creationStatus = 'successful';\n        this.showAction = !!this.settingsService.getArlasIAMWuiUrl();\n      },\n      error: (err: any) => {\n        this.creationStatus = 'errored';\n        this.creationError = err;\n        console.log(err);\n      }\n    });\n  }\n\n  public ngOnDestroy(): void {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  public goToArlasIAMWui() {\n    const iamUrl = this.settingsService.getArlasIAMWuiUrl();\n    if (!!iamUrl) {\n      window.open(iamUrl);\n    }\n  }\n\n}\n","<div mat-dialog-title class=\"title\">{{'Create permission' | translate}}</div>\n<mat-dialog-content class=\"content\">\n    <div class=\"announcement\"  *ngIf=\"!descriptionInputHidden\">\n        <span>{{'The current filters applied to' | translate}} </span>\n        <span class=\"collection\">{{ data.mainCollection | getCollectionDisplayName | translate }}, </span>\n        <span>{{'will be associated to a new permission' | translate}} </span>\n    </div>\n    <div class=\"call_to_action\"  *ngIf=\"!descriptionInputHidden\">{{'Add permission description' | translate}}</div>\n    <div class=\"create-content\" [formGroup]=\"createPermissionForm\" *ngIf=\"!descriptionInputHidden\">\n        <mat-form-field>\n            <mat-label>{{'Description' | translate}}</mat-label>\n            <input [disabled]=\"descriptionInputDisabled\" formControlName=\"description\" matInput type=\"text\" required >\n        </mat-form-field>\n    </div>\n    <div class=\"successful\" *ngIf=\"creationStatus === 'successful'\">\n        <div><mat-icon class=\"icon\">check_circle</mat-icon></div>\n        <div class=\"state\">{{'The permission was created successfully' | translate}}</div>\n        <div class=\"action\" *ngIf=\"showAction\" (click)=\"goToArlasIAMWui()\">{{'go to iam' | translate}}</div>\n    </div>\n    <div class=\"errored\" *ngIf=\"creationStatus === 'errored'\">\n        <div><mat-icon class=\"icon\">error</mat-icon></div>\n        <div class=\"state\">{{'The permission creation failed' | translate}}</div>\n        <div class=\"action\" (click)=\"showErrorDetails = !showErrorDetails\">\n            <span>{{'See details' | translate}}</span>\n            <mat-icon *ngIf=\"!showErrorDetails\">chevron_right</mat-icon>\n            <mat-icon *ngIf=\"showErrorDetails\">expand_more</mat-icon>\n        </div>\n        <div class=\"detail\" *ngIf=\"showErrorDetails\">\n            {{creationError | json}}\n        </div>\n    </div>\n</mat-dialog-content>\n<mat-dialog-actions class=\"actions\">\n    <button mat-button [disabled]=\"creationButtonDisabled\" [mat-dialog-close]=\"null\">{{CLOSE_TEXT | translate}}\n    </button>\n    <button class=\"create-action\" *ngIf=\"!creationButtonHidden\" mat-button (click)=\"createPermission()\"\n        [disabled]=\"createPermissionForm.invalid || creationButtonDisabled\">\n        <span class=\"label\">{{CREATE_TEXT | translate}}</span>\n        <mat-spinner *ngIf=\"showSpinner\" diameter=\"20\"></mat-spinner>\n    </button>\n</mat-dialog-actions>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Filter } from 'arlas-api';\nimport { Subscription } from 'rxjs';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { PermissionDialogData } from './_interfaces';\nimport { PermissionsCreatorDialogComponent } from './permissions-creator-dialog/permissions-creator-dialog.component';\n\n/** Creates an IAM permission based on the current filter of the main collection. */\n@Component({\n  selector: 'arlas-permissions-creator',\n  templateUrl: './permissions-creator.component.html',\n  styleUrls: ['./permissions-creator.component.scss']\n})\nexport class PermissionsCreatorComponent implements OnInit, OnDestroy {\n\n  public show = false;\n\n  private subscription: Subscription;\n\n  public constructor(\n    private collaborativeSearchService: ArlasCollaborativesearchService,\n    private iamService: ArlasIamService,\n    private createPermissionDialog: MatDialog\n  ) { }\n\n  public ngOnInit(): void {\n    this.show = this.hasCreationRight() && this.hasMainCollectionFilters();\n    this.subscription = this.collaborativeSearchService.ongoingSubscribe.subscribe(() => {\n      if (this.collaborativeSearchService.totalSubscribe === 0) {\n        this.show = this.hasCreationRight() && this.hasMainCollectionFilters();\n      }\n    });\n  }\n\n  public ngOnDestroy(): void {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  public createPermission() {\n    // - What is the main collection\n    const mainCollection = this.collaborativeSearchService.defaultCollection;\n    // - What is my current org\n    const currentOrgName = this.iamService.getOrganisation();\n    const canCreatePermission = this.hasCreationRight();\n    if (canCreatePermission) {\n      // - Get filters of the main collection\n      const filters: Filter[] = this.collaborativeSearchService.getFilters(mainCollection);\n      // - Build the permission\n      const partitionFilter = {};\n\n      partitionFilter[mainCollection] = this.collaborativeSearchService.getFinalFilter(filters);\n      const partitionFilterHeader = `h:partition-filter:${JSON.stringify(partitionFilter)}`;\n      const permissionData: PermissionDialogData = {\n        partitionFilterHeader,\n        mainCollection,\n        oid: this.getOrganisationId(currentOrgName)\n      };\n      // - open a dialog for description\n      this.createPermissionDialog.open(PermissionsCreatorDialogComponent, {\n        data: permissionData,\n        disableClose: true,\n        panelClass: 'arlas-permission-dialog'\n      });\n    } else {\n      this.show = false;\n    }\n  }\n\n  /** Checks if the current user is owner of the current organisation.\n   * If it is the case, we continue\n   * Otherwise, the creation of the permission is stopped.\n   */\n  private hasCreationRight() {\n    const currentUser = this.iamService.user;\n    const orgName = this.iamService.getOrganisation();\n    if (!currentUser) {\n      return false;\n      // logout ?\n    }\n    const currentOrg = currentUser.organisations.find(o => o.name === orgName);\n    if (!!currentOrg && currentOrg.isOwner) {\n      return true;\n    }\n    return false;\n  }\n\n  private hasMainCollectionFilters() {\n    const mainCollection = this.collaborativeSearchService.defaultCollection;\n    const filters: Filter[] = this.collaborativeSearchService.getFilters(mainCollection);\n    return filters.length > 0;\n  }\n\n  private getOrganisationId(orgName: string) {\n    const currentUser = this.iamService.user;\n    const currentOrg = currentUser.organisations.find(o => o.name === orgName);\n    return currentOrg.id;\n  }\n}\n","<button *ngIf=\"show\" mat-stroked-button (click)=\"createPermission()\"\n        [matTooltip]=\"'Create permission from filters' | translate\" class=\"permission\">\n    {{'Create permission' | translate}}\n</button>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { OnInit, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { getParamValue } from '../../tools/utils';\n\n/**\n * This component changes the `lg` parameter of ARLAS-wui url.\n */\n@Component({\n  selector: 'arlas-language-switcher',\n  templateUrl: './language-switcher.component.html',\n  styleUrls: ['./language-switcher.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class LanguageSwitcherComponent implements OnInit {\n  /**\n   * @Input : Angular\n   * @description List of available languages for translation\n   */\n  @Input() public availablesLanguages: string[];\n\n  @Input() public currentLanguage: string;\n\n  public constructor() {\n  }\n\n  public ngOnInit() {\n    this.currentLanguage = navigator.language.slice(0, 2);\n    const urlLanguage = getParamValue('lg');\n    if (urlLanguage) {\n      this.currentLanguage = decodeURIComponent(urlLanguage.replace(/\\+/g, ' '));\n    }\n  }\n\n  /**\n   * Sets the given language in `lg` parameter of ARLAS-wui url\n   * @param lang Language name\n   */\n  public setLanguage(lang: string) {\n    let newLg: string;\n    if (window.location.search) {\n      if (window.location.search.indexOf('lg') !== -1) {\n        newLg = window.location.search.replace(/lg=(\\w+)/, 'lg=' + lang);\n      } else {\n        newLg = window.location.search + '&lg=' + lang;\n      }\n    } else {\n      newLg = '?lg=' + lang;\n    }\n    const newUrl = window.location.host + window.location.pathname + newLg;\n\n    window.location.replace('http://' + newUrl);\n  }\n}\n\n\n","<mat-select class=\"language-picker\" [(value)]=\"currentLanguage\"\n    [disableOptionCentering]=\"true\" [panelClass]=\"'language-picker__panel'\">\n  <mat-select-trigger class=\"language-picker__trigger\">\n    <span class=\"flag-icon flag-{{currentLanguage}}\"></span>\n  </mat-select-trigger>\n  <mat-option (click)=\"setLanguage(lang)\" [value]=\"lang\" *ngFor=\"let lang of availablesLanguages\" class=\"switcher-option\">\n    <span class=\"flag-icon flag-{{lang}}\"></span>\n  </mat-option>\n</mat-select>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AggregationResponse } from 'arlas-api';\nimport { ArlasColorService } from 'arlas-web-components';\nimport { SearchContributor } from 'arlas-web-contributors';\nimport { OperationEnum } from 'arlas-web-core';\nimport { Observable, of, Subject, Subscription, zip } from 'rxjs';\nimport { debounceTime, filter, map, mergeMap, mergeWith, startWith } from 'rxjs/operators';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService } from '../../services/startup/startup.service';\n\n@Component({\n  selector: 'arlas-search',\n  templateUrl: './search.component.html',\n  styleUrls: ['./search.component.scss']\n})\nexport class SearchComponent implements OnInit, OnDestroy, OnChanges {\n  /**\n   * @Input : Angular\n   * @description Search contributor\n   */\n  @Input() public searchContributors: SearchContributor[];\n\n  /**\n   * @Input : Angular\n   * @description Top position of the search dialog in pixels\n   */\n  @Input() public dialogPositionTop: number;\n\n  /**\n   * @Input : Angular\n   * @description Left position of the search dialog in pixels\n   */\n  @Input() public dialogPositionLeft: number;\n\n  /**\n   * @Input : Angular\n   * @description Value of the search filter\n   */\n  @Input() public searchValue: string;\n\n  /**\n * @Input : Angular\n * @description Wether display or not the button to select the collections\n */\n  @Input() public displayCollectionSettings = true;\n\n  /**\n   * @description Placeholder value as retrieved from the search contributor\n   */\n  public searchPlaceholder: string;\n\n  public retrieveSearchValueSubs: Subscription[];\n\n  public collectionsState: Map<string, boolean> = new Map();\n  public collections: { label: string; checked: boolean; }[];\n\n  public constructor(\n    private arlasColorService: ArlasColorService,\n    private collaborativeService: ArlasCollaborativesearchService,\n    public translate: TranslateService,\n    private dialog: MatDialog,\n    private configService: ArlasConfigService,\n    private snackbar: MatSnackBar\n  ) { }\n\n  public ngOnInit(): void {\n    // By default all the collections are checked in the checkbox list\n    this.searchContributors.forEach(s => this.collectionsState.set(s.collection, true));\n    this.collections = this.searchContributors.map(s => ({\n      label: s.collection, checked: true,\n      color: this.arlasColorService.getColor(s.collection)\n    }));\n    this.searchPlaceholder = this.translate.instant(this.searchContributors[0] ? this.searchContributors[0].getName() : marker('Search...'));\n    this.searchValue = this.searchPlaceholder;\n    this.retrieveSearchValueSubs = new Array(this.searchContributors.length);\n    // Retrieve value from the url and future collaborations\n    this.searchContributors.forEach((s, i) => {\n      this.retrieveSearchValueSubs[i] = this.collaborativeService.collaborationBus.pipe(\n        filter(e => {\n          const contributor = this.collaborativeService.registry.get(e.id);\n          let letPassContributor = false;\n          if (contributor) {\n            letPassContributor = contributor.getConfigValue('type') === 'search' || contributor.getConfigValue('type') === 'chipssearch';\n          }\n          return s.isMyOwnCollaboration(e) || e.id === 'url' || e.id === 'all' || (letPassContributor && e.operation === OperationEnum.remove);\n        }))\n        .subscribe(\n          e => {\n            const collaboration = this.collaborativeService.getCollaboration(s.identifier);\n            if (collaboration) {\n              collaboration.filters.forEach((f, collection) => {\n                let initSearchValue = '';\n                if (collection === s.collection) {\n                  for (const filter of f) {\n                    let searchtxt = filter.q[0][0];\n                    if (filter.q[0][0].split(':').length > 0) {\n                      searchtxt = filter.q[0][0].split(':')[1];\n                    }\n                    const pattern = /\\\"/gi;\n                    initSearchValue += searchtxt.replace(pattern, '') + ' ';\n                  }\n                  this.searchValue = initSearchValue.slice(0, -1);\n                }\n              });\n            } else {\n              this.searchValue = this.searchPlaceholder;\n            }\n          }\n        );\n    });\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    // If an empty value is passed, use the placeholder instead\n    if (!!changes['searchValue'] && !changes['searchValue'].currentValue) {\n      this.searchValue = this.searchPlaceholder;\n    }\n  }\n\n  public ngOnDestroy(): void {\n    if (this.retrieveSearchValueSubs) {\n      this.retrieveSearchValueSubs.forEach(r => r.unsubscribe());\n    }\n  }\n\n  public search(value: string) {\n    this.searchContributors.filter(s => this.collectionsState.get(s.collection)).forEach(s => s.search(value));\n    if (this.searchContributors.length === 1) {\n      this.searchContributors[0].search(value);\n    } else {\n      const configDebounceTime = this.configService.getValue('arlas.server.debounceCollaborationTime');\n      const debounceDuration = configDebounceTime !== undefined ? configDebounceTime : 750;\n      const enabledContributors = this.searchContributors.filter(s => this.collectionsState.get(s.collection));\n      for (let i = 0; i < enabledContributors.length; i++) {\n        setTimeout(() => {\n          this.snackbar.open(this.translate.instant('Loading data of', { collection: enabledContributors[i].collection }));\n          enabledContributors[i].search(value);\n          if (i === enabledContributors.length - 1) {\n            setTimeout(() => this.snackbar.dismiss(), 1000);\n          }\n        }, (i) * ((debounceDuration + 100) * 1.5));\n      }\n    }\n  }\n\n  public openDialog() {\n    const dialogRef = this.dialog.open(SearchDialogComponent, {\n      id: 'arlas-search-dialog',\n      position: {\n        top: this.dialogPositionTop + 'px',\n        left: this.dialogPositionLeft + 'px',\n      },\n      data: {\n        searchContributors: this.searchContributors,\n        value: this.searchValue,\n        collectionsState: this.collectionsState,\n        collections: this.collections,\n        displayCollectionSettings: this.displayCollectionSettings\n      },\n      enterAnimationDuration: '0',\n      exitAnimationDuration: '0'\n    });\n\n    dialogRef.afterClosed().subscribe(event => {\n      if (!!event && !!event.searchValue) {\n        this.collections = event.collections;\n        this.collectionsState = event.collectionsState;\n        this.search(event.searchValue);\n      } else if (!event || event.searchValue === null || event.searchValue === '') {\n        // When nothing is in the search and no text was typed then it is null\n        // If text was typed then removed, it is ''\n        this.clearSearch();\n      }\n    });\n  }\n\n  public clearSearch() {\n    this.searchValue = this.searchPlaceholder;\n    const configDebounceTime = this.configService.getValue('arlas.server.debounceCollaborationTime');\n    const debounceDuration = configDebounceTime !== undefined ? configDebounceTime : 750;\n    for (let i = 0; i < this.searchContributors.length; i++) {\n      setTimeout(() => {\n        this.collaborativeService.removeFilter(this.searchContributors[i].identifier);\n      }, (i) * ((debounceDuration + 100) * 1.5));\n    }\n  }\n}\n\n@Component({\n  templateUrl: './search-dialog.component.html',\n  styleUrls: ['./search-dialog.component.scss']\n})\nexport class SearchDialogComponent {\n\n  /**\n   * @description Search contributor\n   */\n  public searchContributors: SearchContributor[];\n\n  public onLastBackSpace: Subject<boolean> = new Subject<boolean>();\n\n  /**\n   * @description Form for the search\n   */\n  public searchCtrl: UntypedFormControl;\n\n  /**\n   * @description List of results displayed in the autocomplete\n   */\n  public filteredSearch: Observable<any[]>;\n\n  private keyEvent: Subject<number> = new Subject<number>();\n\n  /**\n   * @description Placeholder value as retrieved from the search contributor\n   */\n  public searchPlaceholder: string;\n\n  /**\n   * @description Indicates whether a search request has been launched\n   */\n  public searching = false;\n\n  /**\n * @description Indicates whether display the collections settings button\n */\n  public displayCollectionSettings = false;\n\n  public collectionsState: Map<string, boolean> = new Map();\n  public collections: { label: string; checked: boolean; color: string; }[];\n  public updateAutoCompleteResult = new Subject<void>();\n  public constructor(\n    private arlasColorService: ArlasColorService,\n    private collaborativeService: ArlasCollaborativesearchService,\n    public dialogRef: MatDialogRef<SearchDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: {\n      'searchContributors': SearchContributor[];\n      'value': string;\n      'collections': { label: string; checked: boolean; color: string; }[];\n      'collectionsState': Map<string, boolean>;\n      'displayCollectionSettings': boolean;\n    },\n    public translate: TranslateService\n  ) {\n    this.searchContributors = data.searchContributors;\n    this.collectionsState = data.collectionsState;\n    this.collections = data.collections;\n    this.displayCollectionSettings = data.displayCollectionSettings;\n    this.searchPlaceholder = this.translate.instant(this.searchContributors[0]?.getName());\n\n    this.searchCtrl = new UntypedFormControl();\n\n    const autocomplete = this.searchCtrl.valueChanges.pipe(\n      debounceTime(250),\n      startWith(''),\n      filter(search => search !== null),\n      filter(search => search.length > 1),\n      mergeMap(search => this.mergeAutoComplete(search))\n    );\n\n    const noautocomplete = this.searchCtrl.valueChanges.pipe(\n      debounceTime(250),\n      startWith(''),\n      filter(search => search !== null),\n      filter(search => search.length < 2),\n      map(f => [])\n    );\n\n    const nullautocomplete = this.searchCtrl.valueChanges.pipe(\n      debounceTime(250),\n      startWith(''),\n      filter(search => search === null),\n      map(f => [])\n    );\n\n    // Create observable of default value autocomplete to merge it with others\n    if (data.value !== this.searchPlaceholder) {\n      this.searchCtrl.setValue(data.value);\n      const defaultAutocomplete = this.mergeAutoComplete(data.value);\n      this.filteredSearch = noautocomplete.pipe(mergeWith(autocomplete), mergeWith(nullautocomplete), mergeWith(defaultAutocomplete));\n    } else {\n      this.filteredSearch = noautocomplete.pipe(mergeWith(autocomplete), mergeWith(nullautocomplete));\n    }\n    this.filteredSearch.subscribe((val) => {\n      this.searching = false;\n    });\n    this.updateAutoCompleteResult.subscribe(() => {\n      if (this.searchCtrl.value && this.searchCtrl.value !== '') {\n        const defaultAutocomplete = this.mergeAutoComplete(this.searchCtrl.value);\n        this.filteredSearch = noautocomplete.pipe(mergeWith(autocomplete), mergeWith(nullautocomplete), mergeWith(defaultAutocomplete));\n      }\n    });\n  }\n\n  public onKeyUp(event: KeyboardEvent) {\n    if (this.searchCtrl.value !== null) {\n      this.keyEvent.next(this.searchCtrl.value.length);\n    }\n    if (event.key === 'Enter') {\n      this.dialogRef.close(\n        {\n          collections: this.collections,\n          collectionsState: this.collectionsState,\n          searchValue: this.searchCtrl.value?.trim()\n        });\n    }\n  }\n\n  public clickItemSearch(keyAsString: string) {\n    this.dialogRef.close({\n      collections: this.collections,\n      collectionsState: this.collectionsState,\n      searchValue: keyAsString\n    });\n  }\n\n  public clearSearch() {\n    this.searchCtrl.reset();\n  }\n  public onChangeCollection(event) {\n    if (!event.checked) {\n      // Remove filter\n      const contributorChanged = this.searchContributors.find(s => s.collection === event.source.id);\n      if (this.collaborativeService.getCollaboration(contributorChanged.identifier)) {\n        this.collaborativeService.removeFilter(contributorChanged.identifier);\n      }\n    }\n    this.collectionsState.set(event.source.id, event.checked);\n    this.updateAutoCompleteResult.next();\n  }\n\n  private mergeAutoComplete(search): Observable<AggregationResponse[]> {\n    if (this.searchContributors.length === 1) {\n      return zip(this.searchContributors.map(searchContrib => searchContrib.getAutoCompleteResponse$(search)\n        .pipe(map(resp => resp.elements))))\n        .pipe(map(elements => (elements as any).flat(Infinity)));\n    } else {\n      return zip(this.searchContributors.\n        filter(searchContrib => this.collectionsState.get(searchContrib.collection))\n        .map(searchContrib => zip(of(searchContrib.collection), searchContrib.getAutoCompleteResponse$(search))\n          .pipe(map(f => f[1].elements.map(e => {\n            (e as any).collection = f[0];\n            return e;\n          })))))\n        .pipe(map(elements => (elements as any).flat(Infinity)), map((el) => el.reduce((acc, l) => {\n          if (acc.find(i => i.key_as_string === l.key_as_string)) {\n            const f = acc.find(i => i.key_as_string === l.key_as_string);\n            f.collections.push({\n              color: this.arlasColorService.getColor(l.collection),\n              count: l.count,\n              collection: l.collection\n            });\n          } else {\n            l.collections = [{\n              color: this.arlasColorService.getColor(l.collection),\n              count: l.count,\n              collection: l.collection\n            }];\n            acc.push({ ...l });\n          }\n          return acc;\n        }, [])));\n    }\n  }\n}\n","<div class=\"arlas-search-container\">\n  <mat-icon class=\"search\">search</mat-icon>\n  <div class=\"search-text\" [class.search-text-empty]=\"searchValue === searchPlaceholder\" (click)=\"openDialog()\">\n    {{ searchValue }}\n  </div>\n  <button *ngIf=\"searchValue !== searchPlaceholder\" mat-icon-button type=\"button\" class=\"close\"\n  (click)=\"clearSearch()\" [matTooltip]=\"'Remove search text' | translate\">\n    <mat-icon class=\"icon\">close</mat-icon>\n  </button>\n</div>","<form mat-dialog-content class=\"search-dialog\">\n    <div class=\"arlas-search-container\">\n        <span class=\"flex-span\">\n            <mat-icon class=\"search\">search</mat-icon>\n            <button *ngIf=\"displayCollectionSettings && searchContributors.length > 1\" mat-icon-button\n                [matMenuTriggerFor]=\"menu\">\n                <mat-icon class=\"settings\">settings_outline</mat-icon>\n            </button>\n        </span>\n        <mat-menu #menu=\"matMenu\" class=\"settings-list\">\n            <mat-checkbox #menuItems id=\"{{ c.label }}\" *ngFor=\"let c of collections;\" [(ngModel)]=\"c.checked\"\n                [ngModelOptions]=\"{standalone: true}\" (click)=\"$event.stopPropagation()\" [disableRipple]=\"true\"\n                (change)=\"onChangeCollection($event)\">\n                <span class=\"flex-span\"><mat-icon class=\"scale-down\"\n                        [style.color]=\"c.color\">fiber_manual_record</mat-icon>\n                    {{ c.label | getCollectionDisplayName | translate }}</span></mat-checkbox>\n        </mat-menu>\n        <input matInput [formControl]=\"searchCtrl\" class=\"full-width-input\" autocomplete=\"off\"\n            placeholder=\"{{searchPlaceholder}}\" (keyup)=\"onKeyUp($event)\" name=\"search\">\n        <button *ngIf=\"searchCtrl.value\" mat-icon-button type=\"button\" class=\"close\" (click)=\"clearSearch()\">\n            <mat-icon class=\"icon\">close</mat-icon>\n        </button>\n    </div>\n    <ul class=\"autocomplete\" *ngIf=\"searchContributors.length === 1\">\n        <li *ngFor=\"let search of filteredSearch | async\" class=\"search-option\"\n            (click)=\"clickItemSearch(search.key_as_string)\" [matTooltip]=\"search.key_as_string\" matTooltipPosition=\"after\">\n            <span class=\"key\">{{ search.key_as_string }}</span>\n            <span class=\"count\">{{ search.count }}</span>\n        </li>\n        <li *ngIf=\"(filteredSearch | async).length === 0\" class=\"search-warning\">\n            <!-- Under two characters, no search is performed -->\n            <span *ngIf=\"searchCtrl.value === null || searchCtrl.value?.length < 2\">{{ 'No search' | translate }}</span>\n            <span *ngIf=\"searchCtrl.value?.length >= 2\">{{ (searching ? 'Searching' : 'No results') | translate\n                }}</span>\n        </li>\n    </ul>\n\n    <ul class=\"autocomplete\" *ngIf=\"searchContributors.length > 1\">\n        <li *ngFor=\"let search of filteredSearch | async\" class=\"search-option\"\n            (click)=\"clickItemSearch(search.key_as_string)\" [matTooltip]=\"search.key_as_string\" matTooltipPosition=\"after\">\n            <span class=\"key\">{{ search.key_as_string }}</span>\n            <div class=\"flex-span collections-count\" >\n            <div *ngFor=\"let s of search.collections\" class=\"flex-span\">\n                <span class=\"flex-span\">\n                    <mat-icon [matTooltip]=\"s.collection | getCollectionDisplayName | translate\"\n                    [style.color]=\"s.color\"\n                        class=\"chip-collection\">fiber_manual_record</mat-icon>\n                    <span class=\"count\">{{ s.count }}</span>\n                </span>\n            </div>\n        </div>\n        </li>\n        <li *ngIf=\"(filteredSearch | async).length === 0\" class=\"search-warning\">\n            <!-- Under two characters, no search is performed -->\n            <span *ngIf=\"searchCtrl.value === null || searchCtrl.value?.length < 2\">{{ 'No search' | translate }}</span>\n            <span *ngIf=\"searchCtrl.value?.length >= 2\">{{ (searching ? 'Searching' : 'No results') | translate}}</span>\n        </li>\n    </ul>\n</form>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { ArlasSearchField } from './model/ArlasSearchField';\n\n@Pipe({ name: 'excludeType' })\nexport class ExcludeTypePipe implements PipeTransform {\n\n  public transform(allField: ArlasSearchField[], type: Set<string>) {\n    return allField.filter(field => !type.has(field.type));\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { Component, Inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Aggregation } from 'arlas-api';\nimport { LayerSourceConfig, MapContributor } from 'arlas-web-contributors';\nimport { projType } from 'arlas-web-core';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService } from '../../services/startup/startup.service';\nimport { ArlasSearchField } from './model/ArlasSearchField';\n\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatListOption } from '@angular/material/list';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Search } from 'arlas-tagger-api';\nimport { ARLAS_VSET } from 'arlas-map';\nimport * as FileSaver from 'file-saver';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { orderAlphabeticallyArlasSearchFields } from '../../tools/utils';\n\n\nexport interface ShareLayerSourceConfig extends LayerSourceConfig {\n  visualisationName: string;\n}\n\n/**\n * This component allows to build a _geoaggregate and/or _geosearch requests through a guiding stepper and download the request result\n * as a json file after clicking on a \"Download\" button\n * Note: This component is binded to ARLAS-wui configuration.\n */\n@Component({\n  selector: 'arlas-share',\n  templateUrl: './share.component.html',\n  styleUrls: ['./share.component.css'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class ShareComponent {\n\n  @Input() public icon = 'share';\n\n  public constructor(\n    public dialog: MatDialog\n  ) { }\n\n  public openDialog(visibilityStatus?: Map<string, boolean>) {\n    this.dialog.open(ShareDialogComponent, { data: visibilityStatus, width: '80vw' });\n  }\n}\n\n\n@Component({\n  selector: 'arlas-share-dialog',\n  templateUrl: './share-dialog.component.html',\n  styleUrls: ['./share-dialog.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class ShareDialogComponent implements OnInit {\n\n  public sharableLayers: Array<ShareLayerSourceConfig> = new Array();\n  private request: Aggregation | Search;\n\n  private maxForFeature: number;\n  private maxForTopology: number;\n\n  public displayedUrl: string;\n  public precisions = [\n    [1, '5,009.4km x 4,992.6km'],\n    [2, '1,252.3km x 624.1km'],\n    [3, '156.5km x 156km'],\n    [4, '39.1km x 19.5km'],\n    [5, '4.9km x 4.9km'],\n    [6, '1.2km x 609.4m'],\n    [7, '152.9m x 152.4m'],\n    [8, '38.2m x 19m'],\n    [9, '4.8m x 4.8m'],\n    [10, '1.2m x 59.5cm'],\n    [11, '14.9cm x 14.9cm'],\n    [12, '3.7cm x 1.9cm']\n  ];\n\n  public geojsonTypeGroup: UntypedFormGroup;\n  public paramFormGroup: UntypedFormGroup;\n\n  public selectedFields = new Array<ArlasSearchField>();\n  public selectedOrderField: ArlasSearchField;\n  public sortDirection: string;\n\n  public allFields = new Array<ArlasSearchField>();\n  public excludedType = new Set<string>();\n  public excludedTypeString = '';\n  public shareConfig: any;\n\n  public layerCollectionMap: Map<string, string> = new Map();\n\n  // for now, the ARLAS-server url is fetched from the config in the startup service.\n  // we should do the same everywhere, otherwise we will have two sources (settings.yaml (it was env.js) & config.json) to configure\n  // the server, and this can lead to incoherences\n  public constructor(\n    @Inject(MAT_DIALOG_DATA) public data: Map<string, boolean>,\n    private _formBuilder: UntypedFormBuilder,\n    private collaborativeService: ArlasCollaborativesearchService,\n    private configService: ArlasConfigService,\n    public dialogRef: MatDialogRef<ShareDialogComponent>,\n    private spinner: NgxSpinnerService,\n    public translate: TranslateService,\n    private snackBar: MatSnackBar,\n  ) { }\n\n  public isSelected(field: ArlasSearchField): boolean {\n    return (this.selectedFields || []).some(f => f.label === field.label);\n  }\n  public ngOnInit() {\n    this.geojsonTypeGroup = this._formBuilder.group({\n      geojsonType: ['', Validators.required]\n    });\n    this.paramFormGroup = this._formBuilder.group({\n      precision: ['', Validators.required],\n      availableFields: ['', Validators.required],\n      orderField: [''],\n      orderDirection: ['']\n    });\n\n    this.shareConfig = this.configService.getValue('arlas.web.components.share.geojson');\n\n    this.maxForFeature = this.shareConfig['max_for_feature'];\n    this.maxForTopology = (\n      this.shareConfig['max_for_topology'] ?\n        this.shareConfig['max_for_topology'] : 1000\n    );\n    this.shareConfig['sort_excluded_type'].forEach(element => {\n      this.excludedType.add(element);\n      this.excludedTypeString += element + ', ';\n    });\n    this.excludedTypeString = this.excludedTypeString.substr(0, this.excludedTypeString.length - 2);\n    this.sharableLayers = [];\n    this.configService.getValue('arlas.web.contributors').forEach(contrib => {\n      if (contrib.type === 'map') {\n        if (!!this.data) {\n          this.data.forEach((vs, lv) => {\n            const visualisationLayer = lv.split(ARLAS_VSET);\n            if (visualisationLayer.length === 2) {\n              const id = visualisationLayer[1];\n              if (contrib.layers_sources) {\n                const layer = contrib.layers_sources.find(ls => ls.id === id);\n                if (!!layer && vs) {\n                  layer.visualisationName = visualisationLayer[0];\n                  this.sharableLayers.push(layer);\n                  this.layerCollectionMap.set(layer.id, contrib.collection);\n                }\n              }\n            }\n          });\n        }\n      }\n    });\n  }\n\n\n  /**\n   * Switches between dialog steps\n   * @param event The step index\n   */\n  public changeStep(event) {\n    const server = this.configService.getValue('arlas.server');\n    /* STEP 2 */\n    if (event.selectedIndex === 1) {\n      const geojsonType: { source: string; id: string; } = this.geojsonTypeGroup.get('geojsonType').value;\n      const layerSource = this.sharableLayers.find(sl => sl.id === geojsonType.id);\n      if (layerSource.source.startsWith('feature') && !layerSource.source.startsWith('feature-metric')) {\n        this.paramFormGroup.get('precision').disable();\n        this.paramFormGroup.get('availableFields').enable();\n        this.request = MapContributor.getFeatureSearch(layerSource) as Search;\n        this.request.page.size = this.maxForFeature;\n        this.allFields = [];\n        this.selectedFields = [];\n        if (this.allFields.length === 0) {\n          this.collaborativeService.describe(this.layerCollectionMap.get(layerSource.id)).subscribe(\n            description => {\n              const fields = description.properties;\n              if (fields) {\n                Object.keys(fields).forEach(fieldName => {\n                  this.getFieldProperties(fields, fieldName);\n                });\n                this.allFields.sort(orderAlphabeticallyArlasSearchFields);\n              }\n              if (!!(<any>this.request).projection && !!(<any>this.request).projection.includes) {\n                (<any>this.request).projection.includes.split(',').forEach(f => {\n                  const selectedField = this.allFields.find(field => field.label === f);\n                  this.selectedFields.push(selectedField);\n                });\n                this.paramFormGroup.patchValue({\n                  'availableFields': this.selectedFields.map(v => v.label)\n                });\n                this.paramFormGroup.updateValueAndValidity();\n              }\n            },\n            error => {\n              this.collaborativeService.collaborationErrorBus.next(error);\n            });\n        }\n      } else if (layerSource.source.startsWith('cluster')) {\n        this.paramFormGroup.get('precision').enable();\n        this.paramFormGroup.get('availableFields').disable();\n        this.request = MapContributor.getClusterAggregration(layerSource);\n      } else if (layerSource.source.startsWith('feature-metric')) {\n        this.request = MapContributor.getTopologyAggregration(layerSource);\n        this.request.size = this.maxForTopology.toString();\n      }\n    }\n  }\n\n\n  /**\n   * @param geojsonType Param containing info about the chosen layer to export\n   * @description Builds and executes a geosearch/geoaggregate request based on the chosen param of the form\n   * and export the result as json file.\n   * The exported file name is layerId-date-geojson.json\n   */\n  public exportGeojson(geojsonType) {\n    this.spinner.show('downloadgeojson');\n    const fileDate = Date.now();\n    if (geojsonType.source.startsWith('feature') && !geojsonType.source.startsWith('feature-metric')) {\n      this.request = (this.request as Search);\n      /** add chosen fields to include in the request */\n      if (!!this.selectedFields && this.selectedFields.length > 0) {\n        const include = [];\n        this.selectedFields.forEach(field => {\n          include.push(field.label);\n        });\n        /** incude param is comma separated field paths */\n        this.request.projection.includes = include.join(',');\n      }\n      /** add sort on chosen fields to the request */\n      if (!!this.selectedOrderField) {\n        this.request.page.sort = (this.sortDirection === 'desc' ? '-' : '') + this.selectedOrderField.label;\n      }\n      this.collaborativeService.resolveButNotFeatureCollection([projType.geosearch, this.request],\n        this.collaborativeService.collaborations, this.layerCollectionMap.get(geojsonType.id))\n        .subscribe({next: f => {\n          this.saveJson(f, (this.translate.instant(geojsonType.id) + '').toLowerCase().replace(/ /g, '_') + '-' + fileDate + '-geojson.json');\n          this.spinner.hide('downloadgeojson');\n          this.dialogRef.close();\n        },\n        error: () => {\n          this.spinner.hide('downloadgeojson');\n          this.snackBar.open(marker('An error occured'));\n        }\n        });\n    } else {\n      this.request = (this.request as Aggregation);\n      if (geojsonType.source.startsWith('cluster')) {\n        this.request.interval.value = this.paramFormGroup.get('precision').value;\n      }\n      this.collaborativeService.resolveButNotFeatureCollection([projType.geoaggregate, [this.request]],\n        this.collaborativeService.collaborations, this.layerCollectionMap.get(geojsonType.id))\n        .subscribe({next: f => {\n          this.saveJson(f, (this.translate.instant(geojsonType.id) + '').toLowerCase().replace(/ /g, '_') + '-' + fileDate + '-geojson.json');\n          this.spinner.hide('downloadgeojson');\n          this.dialogRef.close();\n        },\n        error: () => {\n          this.spinner.hide('downloadgeojson');\n          this.snackBar.open(marker('An error occured'));\n        }\n        });\n    }\n  }\n\n  public exportShapefile(geojsonType) {\n    this.spinner.show('downloadshapefile');\n    const fileDate = Date.now();\n    if (geojsonType.source.startsWith('feature') && !geojsonType.source.startsWith('feature-metric')) {\n      this.request = (this.request as Search);\n      /** add chosen fields to include in the request */\n      if (!!this.selectedFields && this.selectedFields.length > 0) {\n        const include = [];\n        this.selectedFields.forEach(field => {\n          include.push(field.label);\n        });\n        /** incude param is comma separated field paths */\n        this.request.projection.includes = include.join(',');\n      }\n      /** add sort on chosen fields to the request */\n      if (!!this.selectedOrderField) {\n        this.request.page.sort = (this.sortDirection === 'desc' ? '-' : '') + this.selectedOrderField.label;\n      }\n      this.collaborativeService.resolveButNotShapefile([projType.shapesearch, this.request],\n        this.collaborativeService.collaborations, this.layerCollectionMap.get(geojsonType.id))\n        .subscribe({next: (data) => {\n          const blob = new Blob([data], {\n            type: 'application/zip'\n          });\n          const url = window.URL.createObjectURL(blob);\n          window.open(url);\n          this.spinner.hide('downloadshapefile');\n          this.dialogRef.close();\n        },\n        error: () => {\n          this.spinner.hide('downloadshapefile');\n          this.snackBar.open(marker('An error occured'));\n        }\n\n        });\n    } else {\n      this.request = (this.request as Aggregation);\n      if (geojsonType.source.startsWith('cluster')) {\n        this.request.interval.value = this.paramFormGroup.get('precision').value;\n      }\n      this.collaborativeService.resolveButNotShapefile([projType.shapeaggregate, [this.request]],\n        this.collaborativeService.collaborations, this.layerCollectionMap.get(geojsonType.id))\n        .subscribe({next: data => {\n          const blob = new Blob([data], {\n            type: 'application/zip'\n          });\n          const url = window.URL.createObjectURL(blob);\n          window.open(url);\n          this.spinner.hide('downloadshapefile');\n          this.dialogRef.close();\n        },\n        error: (err) => {\n          this.spinner.hide('downloadshapefile');\n          this.snackBar.open(marker('An error occured'));\n        }\n        });\n    }\n  }\n\n\n  public onSelectionChange(selectedOptionsList: SelectionModel<MatListOption>) {\n    this.selectedFields = new Array<ArlasSearchField>();\n    selectedOptionsList.selected.forEach(option => {\n      const field = option.getLabel().split('-');\n      this.selectedFields.push(new ArlasSearchField(field[0].trim(), field[1].trim()));\n    });\n  }\n\n  private getFieldProperties(fieldList: any, fieldName: string, parentPrefix?: string) {\n    if (fieldList[fieldName].type === 'OBJECT') {\n      const subFields = fieldList[fieldName].properties;\n      if (subFields) {\n        Object.keys(subFields).forEach(subFieldName => {\n          this.getFieldProperties(subFields, subFieldName, (parentPrefix ? parentPrefix : '') + fieldName + '.');\n        });\n      }\n    } else {\n      this.allFields.push({ label: (parentPrefix ? parentPrefix : '') + fieldName, type: fieldList[fieldName].type });\n    }\n  }\n\n  private saveJson(json: any, filename: string, separator?: string) {\n    const blob = new Blob([JSON.stringify(json, (key, value) => {\n      if (!!separator && value && typeof value === 'object' && !Array.isArray(value)) {\n        // convert keys to snake- or kebab-case (eventually other) according to the separator.\n        // In fact we cannot declare a property with a snake-cased name,\n        // (so in models interfaces properties are are camel case)\n        const replacement = {};\n        for (const k in value) {\n          if (Object.hasOwnProperty.call(value, k)) {\n            replacement[\n              k.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)\n                .map(x => x.toLowerCase())\n                .join(separator)\n            ] = value[k];\n          }\n        }\n        return replacement;\n      }\n      return value;\n    }, 2)], { type: 'application/json;charset=utf-8' });\n    FileSaver.saveAs(blob, filename);\n  }\n\n}\n","\n\n  <button mat-mini-fab (click)=\"openDialog()\" color=\"accent\" class=\"geojson-button\">\n    <mat-icon aria-label=\"Get Geojson link to yours current data\">{{icon}}</mat-icon>\n  </button>\n","<mat-horizontal-stepper [linear]=\"true\" (selectionChange)=\"changeStep($event)\" class=\"share-stepper\">\n  <mat-step [stepControl]=\"geojsonTypeGroup\">\n    <form [formGroup]=\"geojsonTypeGroup\">\n      <ng-template matStepLabel>{{'Geometry' | translate}}</ng-template>\n      <arlas-admonition-card [title]=\"'Important' | translate\">\n        {{'Downloads geographical data of the chosen layer' | translate}} <br>\n        {{'According to the chosen layer, the downloaded data is either aggregated in a geohash grid or a fetch of 10 000 of actual data records'  | translate}}\n      </arlas-admonition-card>\n      <mat-radio-group class=\"share-radio-group\" formControlName=\"geojsonType\">\n        <mat-radio-button *ngFor=\"let layer of sharableLayers\" [value]=\"{source: layer.source, id: layer.id}\" class=\"share-radio-button\">{{ layer?.visualisationName | translate}} - {{ layer.id | layerIdToName | translate}}</mat-radio-button>\n      </mat-radio-group>\n\n      <mat-divider class=\"share-stepper__divider\"></mat-divider>\n      <button mat-button matStepperNext class=\"share-stepper-button\">{{ 'Next' | translate}}</button>\n    </form>\n  </mat-step>\n  <mat-step [stepControl]=\"paramFormGroup\" *ngIf=\"!geojsonTypeGroup.get('geojsonType').value?.source?.startsWith('feature-metric')\">\n    <form [formGroup]=\"paramFormGroup\">\n      <ng-template matStepLabel>{{'Parameters' | translate}}</ng-template>\n      <div *ngIf=\"geojsonTypeGroup.get('geojsonType').value?.source?.startsWith('cluster')\">\n        <mat-form-field class=\"share-stepper__precision\">\n          <mat-select placeholder=\"{{'Desired precision' | translate}}\" formControlName=\"precision\" matInput required>\n            <mat-option *ngFor=\"let val of precisions\" [value]=\"val[0]\">\n              {{ val[0] }} - <span class=\"share-description\">({{val[1]}})</span>\n            </mat-option>\n          </mat-select>\n        </mat-form-field>\n      </div>\n      <div *ngIf=\"geojsonTypeGroup.get('geojsonType').value?.source?.startsWith('feature')\" class=\"fields-form\">\n        <div class=\"share-feature-block\">\n            <div style=\"flex:3\" class=\"share-title-list\">\n                <mat-label>{{'Available fields' | translate}}</mat-label>\n            </div>\n            <div style=\"flex:1;padding:0 7px;\">\n            </div>\n            <div style=\"flex:3\" class=\"share-title-list\">\n                <mat-label>{{'Selected fields' | translate}}</mat-label>\n            </div>\n        </div>\n        <div class=\"share-feature-block\">\n          <div style=\"max-height: 40vh;overflow:auto;flex:3\">\n            <mat-selection-list role=\"listbox\" formControlName=\"availableFields\" #selectedList (selectionChange)=\"onSelectionChange(selectedList.selectedOptions)\">\n              <mat-list-option [value]=\"field.label\" *ngFor=\"let field of allFields\">\n                <p matLine title=\"{{ field.label }} - {{field.type}}\">\n                  {{ field.label }} - <span class=\"share-description\">{{field.type}}</span>\n                </p>\n              </mat-list-option>\n            </mat-selection-list>\n          </div>\n          <div class=\"share-feature-button\">\n            <button mat-raised-button class=\"mat-accent fill text-sm share-button\" matTooltip=\"{{'Select All' | translate}}\" [matTooltipPosition]=\"'above'\" (click)=\"selectedList.selectAll();onSelectionChange(selectedList.selectedOptions)\">\n              &gt;&gt;\n            </button>\n            <br /><br />\n            <button mat-raised-button class=\"mat-primary fill text-sm share-button\" matTooltip=\"{{'Remove All' | translate}}\" (click)=\"selectedList.deselectAll();onSelectionChange(selectedList.selectedOptions)\">\n              &lt;&lt;\n            </button>\n          </div>\n\n          <div style=\"max-height:40vh;overflow:auto;flex:3\">\n            <mat-list role=\"list\">\n              <mat-list-item  *ngIf=\"selectedFields.length == 0\">{{'No item selected' | translate}}</mat-list-item>\n              <mat-list-item role=\"listitem\" *ngFor=\"let field of selectedFields\">\n                  <p matLine title=\"{{ field.label }} - {{field.type}}\">\n                    {{ field.label }} - <span class=\"share-description\">{{field.type}}</span>\n                  </p>\n              </mat-list-item>\n            </mat-list>\n          </div>\n        </div>\n\n        <div class=\"share-feature-block share-feature-block__options\">\n          <mat-form-field class=\"share-form-field\">\n            <mat-select placeholder=\"{{'Order by' | translate}}\" formControlName=\"orderField\" [(value)]=\"selectedOrderField\" panelClass=\"share-order-field\">\n              <mat-option [value]=\"\">{{'None' | translate}}</mat-option>\n              <mat-option *ngFor=\"let field of selectedFields | excludeType:excludedType\" [value]=\"field\">\n                {{ field.label }}\n              </mat-option>\n            </mat-select>\n            <mat-hint>{{'Types' | translate}} {{excludedTypeString}} {{'are excluded' | translate}}</mat-hint>\n          </mat-form-field>\n          <mat-radio-group class=\"share-radio-group\" formControlName=\"orderDirection\" [(ngModel)]=\"sortDirection\">\n            <mat-radio-button [value]=\"'asc'\" class=\"share-radio-button\">ASC</mat-radio-button>\n            <mat-radio-button [value]=\"'desc'\" class=\"share-radio-button\">DESC</mat-radio-button>\n          </mat-radio-group>\n        </div>\n      </div>\n      <mat-divider class=\"share-stepper__divider\"></mat-divider>\n      <button mat-button matStepperPrevious class=\"share-stepper-button\">{{ 'Back' | translate}}</button>\n      <button mat-button matStepperNext class=\"share-stepper-button\">{{ 'Next' | translate}}</button>\n    </form>\n  </mat-step>\n  <mat-step>\n    <ng-template matStepLabel>{{ 'Download' | translate}}</ng-template>\n    <ngx-spinner [name]=\"'downloadgeojson'\" bdOpacity=\"0.2\" bdColor=\"rgba(51,51,51,0.6)\" size=\"small\" color=\"#fff\"\n      type=\"ball-clip-rotate\" [fullScreen]=\"false\">\n      <p style=\"color: white\"> {{ 'Downloading Geojson file' | translate }} </p>\n    </ngx-spinner>\n    <ngx-spinner [name]=\"'downloadshapefile'\" bdOpacity=\"0.2\" bdColor=\"rgba(51,51,51,0.6)\" size=\"small\" color=\"#fff\"\n      type=\"ball-clip-rotate\" [fullScreen]=\"false\">\n      <p style=\"color: white\"> {{ 'Downloading Shapefile' | translate }} </p>\n    </ngx-spinner>\n    <div class=\"share-block\">\n      <button mat-stroked-button color=\"basic\" class=\"export-button\" matTooltip=\"{{'Click to download the chosen layer as a Geojson file' | translate}}\" (click)=\"exportGeojson(geojsonTypeGroup.get('geojsonType').value)\">\n        <mat-icon>get_app</mat-icon>\n        {{ 'Download Geojson' | translate}}\n      </button>\n\n      <button mat-stroked-button color=\"basic\" class=\"export-button\" matTooltip=\"{{'Click to download the chosen layer as a zipped Shapefile' | translate}}\" (click)=\"exportShapefile(geojsonTypeGroup.get('geojsonType').value)\" >\n        <mat-icon>get_app</mat-icon>\n        {{ 'Download Shapefile' | translate}}\n      </button>\n    </div>\n    <mat-divider class=\"share-stepper__divider\"></mat-divider>\n    <button mat-button matStepperPrevious class=\"share-stepper-button\">{{ 'Back' | translate}}</button>\n  </mat-step>\n</mat-horizontal-stepper>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\nimport { Filter } from 'arlas-api';\nimport { Configuration, FetchAPI, StatusApi, TagRefRequest, WriteApi } from 'arlas-tagger-api';\nimport { from, interval, Observable, Subject, Subscription } from 'rxjs';\nimport { GET_OPTIONS } from '../../tools/utils';\nimport { AuthentificationService } from '../authentification/authentification.service';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasSettingsService } from '../settings/arlas.settings.service';\nimport { ArlasConfigService } from '../startup/startup.service';\nimport { TaggerResponse } from './model';\n\n@Injectable()\nexport class ArlasTaggerWriteApi extends WriteApi {\n  public constructor(@Inject('CONF') conf: Configuration, @Inject('base_path') basePAth: string,\n    @Inject('fetch') fetch: FetchAPI) {\n    super(conf, basePAth, fetch);\n  }\n}\n\n@Injectable()\nexport class ArlasTaggerStatusApi extends StatusApi {\n  public constructor(@Inject('CONF') conf: Configuration, @Inject('base_path') basePAth: string,\n    @Inject('fetch') fetch: FetchAPI) {\n    super(conf, basePAth, fetch);\n  }\n}\n\n/** Constants used to fill up our data base. */\n@Injectable()\nexport class ArlasTagService implements OnDestroy {\n\n  public taggableFields: Array<any> = [];\n  public isProcessing = false;\n  public status: Subject<Map<string, boolean>> = new Subject<Map<string, boolean>>();\n  public processStatus: Map<string, TaggerResponse> = new Map<string, TaggerResponse>();\n  private taggerApi: ArlasTaggerWriteApi;\n  private statusApi: ArlasTaggerStatusApi;\n  private options;\n\n  private tagger: any;\n  private onGoingSubscription: Map<string, Subscription> = new Map<string, Subscription>();\n\n\n  public constructor(\n    @Inject(GET_OPTIONS) private getOptions,\n    private collaborativeSearchService: ArlasCollaborativesearchService,\n    private configService: ArlasConfigService,\n    private snackBar: MatSnackBar,\n    private authService: AuthentificationService,\n    private arlasSettingsService: ArlasSettingsService\n  ) {\n    // for now, the ARLAS-tagger url  and collection name are fetched from the config.\n    // we should keep doing it for now, otherwise we will have two sources (settings.yaml (it was env.js) & config.json) to configure\n    // the taggger, and this can lead to incoherences\n    this.setOptions(this.getOptions());\n    const configuration: Configuration = new Configuration();\n    this.tagger = this.configService.getValue('arlas.tagger');\n    const settings = this.arlasSettingsService.settings;\n    if (this.tagger && this.tagger.url) {\n      this.taggerApi = new ArlasTaggerWriteApi(configuration, this.tagger.url, window.fetch);\n      this.statusApi = new ArlasTaggerStatusApi(configuration, this.tagger.url, window.fetch);\n      const useAuthent = !!settings && !!settings.authentication && !!settings.authentication.use_authent;\n      if (useAuthent) {\n        this.authService.canActivateProtectedRoutes.subscribe(isActivable => {\n          if (isActivable) {\n            this.setOptions({\n              headers: {\n                Authorization: 'bearer ' + this.authService.accessToken\n              }\n            });\n          }\n        });\n      }\n    }\n  }\n\n  public addTag(path: string, value: string | number, propagateField?: string, propagateUrl?: string, operationName?: string) {\n    if (!operationName) {\n      operationName = 'TAG ' + Math.round(Date.now() / 1000);\n    }\n    const data = this.createPayload(operationName, path, value);\n    if (propagateField) {\n      data.propagation = this.createPropagationPayload(propagateField, propagateUrl);\n    }\n    this.postTagData(data);\n  }\n\n  public removeTag(path: string, value?: string | number, propagateField?: string, propagateUrl?: string, operationName?: string) {\n    if (!operationName) {\n      operationName = 'UNTAG ' + Math.round(Date.now() / 1000);\n    }\n    const data = this.createPayload(operationName, path, value);\n    if (propagateField) {\n      data.propagation = this.createPropagationPayload(propagateField, propagateUrl);\n    }\n    this.postTagData(data, 'untag');\n  }\n\n  public createPayload(label: string, path: string, value?: string | number): { search: any; tag?: any; label?: string; propagation?: any; } {\n\n    const filters = new Array<Filter>();\n    this.collaborativeSearchService.collaborations.forEach(element => {\n      if (!!element.filters) {\n        element.filters.forEach((filter, collection) => {\n          filters.push(filter[0]);\n\n        });\n      }\n    });\n    const filter = this.collaborativeSearchService.getFinalFilter(filters);\n\n    const data: { search: any; tag?: any; propagation?: any; label?: string; } = { search: {} };\n    data.search = { filter: filter };\n    const tag: { path: string; value?: string | number; } = { path: '' };\n    tag.path = path;\n    if (value) {\n      tag.value = value;\n    }\n    data.tag = tag;\n    data.label = label;\n    return data;\n  }\n\n  public createPropagationPayload(propagateField?: string, propagateUrl?: string) {\n\n    const propagation: { field: string; filter?: any; } = { field: '' };\n    propagation.field = propagateField;\n    if (propagateUrl) {\n      const dataModel = this.collaborativeSearchService.dataModelBuilder(decodeURI(propagateUrl));\n      const filters = new Array<Filter>();\n\n      Object.values(dataModel).forEach((element: any) => {\n        filters.push(element.filter);\n      });\n      propagation.filter = this.collaborativeSearchService.getFinalFilter(filters);\n    }\n    return propagation;\n  }\n\n  public postTagData(data: any, mode: string = 'tag') {\n\n    const snackConfig = new MatSnackBarConfig();\n    snackConfig.duration = 5000;\n    snackConfig.verticalPosition = 'top';\n\n    this.isProcessing = true;\n\n    if (mode === 'tag') {\n      from(this.taggerApi.tagPost(this.tagger.collection, data, false, this.options)).subscribe(\n        (response: TaggerResponse) => {\n          this.snackBar.open('Tag task running', '', snackConfig);\n          this.status.next(new Map<string, boolean>().set(mode, true));\n          const subscription = interval(5000).subscribe(() => {\n            this.followStatus(response);\n          });\n          this.onGoingSubscription.set(response.id, subscription);\n        },\n        error => {\n          this.snackBar.open('Error : the tag has not been added', '', snackConfig);\n          this.isProcessing = false;\n          this.collaborativeSearchService.collaborationErrorBus.next(error);\n\n          this.status.next(new Map<string, boolean>().set(mode, false));\n        },\n        () => {\n          this.isProcessing = false;\n        }\n      );\n    } else {\n      from(this.taggerApi.untagPost(this.tagger.collection, data, false, this.options)).subscribe(\n        (response: TaggerResponse) => {\n          this.snackBar.open('Untag task running', '', snackConfig);\n          this.status.next(new Map<string, boolean>().set(mode, true));\n          const subscription = interval(5000).subscribe(() => {\n            this.followStatus(response);\n          });\n          this.onGoingSubscription.set(response.id, subscription);\n        },\n        error => {\n          this.snackBar.open('Error : the tag has not been removed', '', snackConfig);\n          this.isProcessing = false;\n          this.collaborativeSearchService.collaborationErrorBus.next(error);\n\n          this.status.next(new Map<string, boolean>().set(mode, false));\n        },\n        () => {\n          this.isProcessing = false;\n        }\n      );\n    }\n  }\n\n  public followStatus(response: any) {\n    from(this.statusApi.taggingGet(this.tagger.collection, response.id, false, this.options)).subscribe(\n      (response: TaggerResponse) => {\n        this.processStatus.set(response.id, response);\n        if (response.progress === 100) {\n          this.onGoingSubscription.get(response.id).unsubscribe();\n        }\n      }\n    );\n  }\n\n  public list(): Observable<TagRefRequest[]> {\n    return from(this.statusApi.taggingGetList(this.tagger.collection, false, this.options));\n  }\n\n  public unfollowStatus(responseId: string) {\n    this.processStatus.delete(responseId);\n  }\n  public setOptions(options): void {\n    this.options = options;\n  }\n\n  public ngOnDestroy(): void {\n    this.onGoingSubscription.forEach((subscription, k) => {\n      subscription.unsubscribe();\n    });\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { Component, ElementRef, Input, OnInit, Output, Renderer2, ViewEncapsulation } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Aggregation, AggregationResponse, AggregationsRequest } from 'arlas-api';\nimport { TagRefRequest } from 'arlas-tagger-api';\nimport { from, Subject } from 'rxjs';\nimport { ArlasBookmarkService } from '../../services/bookmark/bookmark.service';\nimport { ArlasCollaborativesearchService } from '../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService } from '../../services/startup/startup.service';\nimport { ArlasTagService } from '../../services/tag/tag.service';\nimport { ConfirmModalComponent } from '../confirm-modal/confirm-modal.component';\n\n/**\n * This component allows to tag your selected data (documents). The tag value is set on taggable fields.\n * The list of taggable fields is available on the dialog`.\n * Note : This component is binded to ARLAS-wui configuration.\n */\n@Component({\n  selector: 'arlas-tag',\n  templateUrl: './tag.component.html',\n  styleUrls: ['./tag.component.css'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class TagComponent {\n  /**\n   * @Input : Angular\n   * @description Name of the icon (Material icons)\n   */\n  @Input() public icon = 'local_offer';\n  /**\n   * @Output : Angular\n   * @description A subject that emits the tag string\n   */\n  @Output() public tagEvent: Subject<string> = new Subject<string>();\n\n  public dialogRef: MatDialogRef<TagDialogComponent>;\n  public dialogManagementRef: MatDialogRef<TagManagementDialogComponent>;\n  public hoveredDiv = '';\n\n  public constructor(\n    public dialog: MatDialog,\n    public tagService: ArlasTagService\n  ) { }\n\n  public openDialog() {\n    this.dialogRef = this.dialog.open(TagDialogComponent, { data: null, panelClass: 'arlas-tag-dialog' });\n    this.dialogRef.componentInstance.tagEvent.subscribe(value => this.tagEvent.next(value));\n  }\n\n  public openManagement() {\n    this.dialogManagementRef = this.dialog.open(TagManagementDialogComponent, { data: null, panelClass: 'arlas-tag-dialog' });\n  }\n\n  public removeProgress(itemId) {\n    this.tagService.unfollowStatus(itemId);\n  }\n\n}\n\n@Component({\n  selector: 'arlas-tag-dialog',\n  templateUrl: './tag-dialog.component.html',\n  styleUrls: ['./tag-dialog.component.css'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class TagDialogComponent implements OnInit {\n  /**\n   * @Output : Angular\n   * @description A subject that emits the tag string\n   */\n  @Output() public tagEvent: Subject<string> = new Subject<string>();\n\n  private server: any;\n  public tagFormGroup: UntypedFormGroup;\n  public taggableFields: Array<any> = [];\n  public keywordFields: Array<any> = [];\n  public bookmarks: Array<any> = [];\n  public existingTags: Array<string> = [];\n\n  public confirmDialogRef: MatDialogRef<ConfirmModalComponent>;\n\n  public constructor(\n    private formBuilder: UntypedFormBuilder,\n    public tagService: ArlasTagService,\n    private configService: ArlasConfigService,\n    private collaborativeSearchService: ArlasCollaborativesearchService,\n    private dialog: MatDialog,\n    private bookmarkService: ArlasBookmarkService,\n    public dialogRef: MatDialogRef<TagDialogComponent>\n  ) {\n    this.server = this.configService.getValue('arlas.server');\n    this.tagService.status.subscribe(status => {\n      status.forEach((success, mode) => {\n        if (success) {\n          this.dialogRef.close();\n          this.tagEvent.next(mode);\n        }\n      });\n    });\n    this.bookmarkService.bookMarkMap.forEach((v, k) => {\n      this.bookmarks.push(v);\n    });\n  }\n\n  public ngOnInit() {\n    this.collaborativeSearchService.describe(this.server.collection.name).subscribe(\n      description => {\n        const fields = description.properties;\n        if (fields) {\n          Object.keys(fields).forEach(fieldName => {\n            this.getFieldProperties(fields, fieldName);\n          });\n        }\n      },\n      error => {\n        this.collaborativeSearchService.collaborationErrorBus.next(error);\n      });\n\n    this.tagFormGroup = this.formBuilder.group({\n      operationName: [''],\n      fieldToTag: ['', Validators.required],\n      valueOfTag: ['', Validators.required],\n      propagation: [''],\n      onField: [{ value: '', disabled: true }],\n      linkTo: [{ value: '', disabled: true }]\n    });\n  }\n\n  public fieldChange(event) {\n    this.existingTags = [];\n    const aggregation: Aggregation = {\n      type: Aggregation.TypeEnum.Term,\n      field: event.value,\n      size: '10'\n    };\n\n    const aggreationRequest: AggregationsRequest = {\n      aggregations: [aggregation]\n    };\n\n    from(this.collaborativeSearchService.getExploreApi().aggregatePost(this.server.collection.name, aggreationRequest))\n      .subscribe((response: AggregationResponse) => {\n        if (response.elements) {\n          response.elements.forEach(elem => {\n            this.existingTags.push(elem.key_as_string);\n          });\n        }\n      });\n  }\n\n  /**\n   * Adds a tag on a taggable field.\n   * @param path Taggable field path\n   * @param value Value of the tag\n   */\n  public addTag() {\n    this.tagService.addTag(\n      this.tagFormGroup.value.fieldToTag,\n      this.tagFormGroup.value.valueOfTag,\n      this.tagFormGroup.value.onField,\n      this.tagFormGroup.value.linkTo,\n      this.tagFormGroup.value.operationName\n    );\n  }\n\n  /**\n   * Removes a tag from a taggable field. If the tag value is not specified, all the tags of this field are removed\n   * @param path Taggable field path\n   * @param value Value of the tag\n   */\n  public removeTag() {\n    if (this.tagFormGroup.value.valueOfTag) {\n      this.tagService.removeTag(\n        this.tagFormGroup.value.fieldToTag,\n        this.tagFormGroup.value.valueOfTag,\n        this.tagFormGroup.value.onField,\n        this.tagFormGroup.value.linkTo\n      );\n    } else {\n      this.confirmDialogRef = this.dialog.open(ConfirmModalComponent);\n      this.confirmDialogRef.componentInstance.confirmHTLMMessage =\n        '<strong>Remove</strong> all tags from `' + this.tagFormGroup.value.fieldToTag + '` ?';\n      this.confirmDialogRef.afterClosed().subscribe(result => {\n        if (result) {\n          this.tagService.removeTag(this.tagFormGroup.value.fieldToTag, null);\n        }\n        this.confirmDialogRef = null;\n      });\n    }\n  }\n\n  public propagationChange(propagate: boolean) {\n    if (propagate) {\n      this.tagFormGroup.setControl('onField', new UntypedFormControl('', Validators.required));\n      this.tagFormGroup.setControl('linkTo', new UntypedFormControl(''));\n      this.tagFormGroup.controls['onField'].enable();\n      this.tagFormGroup.controls['linkTo'].enable();\n    } else {\n      this.tagFormGroup.setControl('onField', new UntypedFormControl(''));\n      this.tagFormGroup.setControl('linkTo', new UntypedFormControl(''));\n      this.tagFormGroup.controls['onField'].disable();\n      this.tagFormGroup.controls['linkTo'].disable();\n    }\n  }\n\n  private getFieldProperties(fieldList: any, fieldName: string, parentPrefix?: string) {\n    if (fieldList[fieldName].type === 'OBJECT') {\n      const subFields = fieldList[fieldName].properties;\n      if (subFields) {\n        Object.keys(subFields).forEach(subFieldName => {\n          this.getFieldProperties(subFields, subFieldName, (parentPrefix ? parentPrefix : '') + fieldName + '.');\n        });\n      }\n    } else {\n      if (fieldList[fieldName].taggable) {\n        this.taggableFields.push({ label: (parentPrefix ? parentPrefix : '') + fieldName, type: fieldList[fieldName].type });\n      } else if (fieldList[fieldName].type === 'KEYWORD') {\n        this.keywordFields.push({ label: (parentPrefix ? parentPrefix : '') + fieldName, type: fieldList[fieldName].type });\n      }\n    }\n  }\n}\n\n@Component({\n  selector: 'arlas-management-tag-dialog',\n  templateUrl: './tag-management-dialog.component.html',\n  styleUrls: ['./tag-management-dialog.component.css'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class TagManagementDialogComponent {\n  public tagsRef: TagRefRequest[] = new Array<TagRefRequest>();\n\n  public columnsToDisplay = ['checked', 'date', 'name', 'path', 'tagValue', 'propagation', 'action'];\n  public isLoading = true;\n  public selectedsTag: TagRefRequest[] = new Array<TagRefRequest>();\n\n  public constructor(\n    private tagService: ArlasTagService,\n    private elem: ElementRef,\n    private renderer: Renderer2,\n    public dialogRef: MatDialogRef<TagManagementDialogComponent>\n  ) {\n    this.tagService.list().subscribe(data => {\n      this.isLoading = false;\n      data.sort((a, b) => a.creation_time > b.creation_time ? 1 : -1);\n      this.tagsRef = data;\n    });\n  }\n\n  public selectTag(event: MatCheckboxChange, index: number, tag: TagRefRequest) {\n    this.elem.nativeElement.querySelectorAll('.tags-table-row').forEach((elem, i) => {\n      if (index === i) {\n        if (event.checked) {\n          this.selectedsTag.push(tag);\n          this.renderer.addClass(elem, 'active-tag');\n        } else {\n          this.selectedsTag.splice(this.selectedsTag.indexOf(tag), 1);\n          this.renderer.removeClass(elem, 'active-tag');\n        }\n      }\n    });\n  }\n\n  public replay() {\n    this.selectedsTag.forEach((tagRef: TagRefRequest) => {\n      const payload = {\n        search: tagRef.search,\n        tag: tagRef.tag,\n        label: tagRef.label,\n        propagation: tagRef.propagation\n      };\n      this.tagService.postTagData(payload, 'tag');\n    });\n    this.dialogRef.close();\n  }\n\n}\n","<div class=\"arlas-tag-box\">\n  <div *ngFor=\"let process of this.tagService.processStatus | keyvalue\" class=\"arlas-tag-notification\" (mouseenter)=\"hoveredDiv = process.value.id\" (mouseleave)=\"hoveredDiv = ''\">\n    <div class=\"arlas-tag-notification-content\" id=\"tag-progress-{{process.value.id}}\" [class.arlas-tag-active]=\"hoveredDiv === process.value.id ? true : false\"\n      >\n      <span>{{process.value.label}}</span>\n      <mat-icon class=\"arlas-tag-notification-icon-blue\" *ngIf=\"process.value.progress == 0\">watch_later</mat-icon>\n      <span *ngIf=\"process.value.progress > 0 && process.value.progress < 100\">{{process.value.progress | number:'1.0-0'}} %</span>\n      <mat-icon class=\"arlas-tag-notification-icon-green arlas-tag-hide\" *ngIf=\"process.value.progress == 100\">check_circle</mat-icon>\n      <mat-icon class=\"arlas-tag-notification-icon-grey arlas-tag-show\" *ngIf=\"process.value.progress == 100\" (click)=\"removeProgress(process.value.id)\">cancel</mat-icon>\n    </div>\n    <mat-progress-bar *ngIf=\"process.value.progress > 0 && process.value.progress < 100\" [mode]=\"'indeterminate'\" [color]=\"'accent'\"></mat-progress-bar>\n  </div>\n</div>\n","<div [formGroup]=\"tagFormGroup\" style=\"display:flex;flex-direction: column;justify-content: space-around;min-width:300px;\">\n  <mat-form-field>\n    <input matInput placeholder=\"{{ 'Operation name' | translate }}\" formControlName=\"operationName\" #operationName>\n  </mat-form-field>\n  <mat-form-field class=\"tag-form-field\">\n    <mat-select matInput placeholder=\"{{ 'Field to tag' | translate }}\" formControlName=\"fieldToTag\" panelClass=\"tag-fields\" #fieldtotag (selectionChange)=\"fieldChange($event)\">\n      <mat-option *ngFor=\"let field of taggableFields\" [value]=\"field.label\">\n        {{ field.label }} -\n        <span class=\"tag-description\">{{field.type}}</span>\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n  <mat-form-field>\n    <input matInput placeholder=\"{{ 'Value of tag' | translate }}\" formControlName=\"valueOfTag\" #valueoftag [matAutocomplete]=\"auto\">\n    <mat-autocomplete #auto=\"matAutocomplete\">\n      <mat-option *ngFor=\"let tag of existingTags\" [value]=\"tag\">\n        {{tag}}\n      </mat-option>\n    </mat-autocomplete>\n  </mat-form-field>\n\n  <mat-checkbox (change)=\"propagationChange(propagation.checked)\" formControlName=\"propagation\" #propagation>{{ 'With propagation' | translate }}</mat-checkbox>\n  <mat-form-field *ngIf=\"propagation.checked\">\n    <mat-select matInput placeholder=\"{{ 'On field' | translate }}\" formControlName=\"onField\" panelClass=\"tag-fields\" #onfield>\n      <mat-option *ngFor=\"let field of keywordFields\" [value]=\"field.label\">\n        {{ field.label }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n  <mat-form-field *ngIf=\"propagation.checked\">\n    <mat-select matInput placeholder=\"{{ 'Link to' | translate }}\" formControlName=\"linkTo\" panelClass=\"tag-fields\" #linkTo>\n      <mat-option *ngFor=\"let bookmark of bookmarks\" [value]=\"bookmark.url\">\n        {{ bookmark.name }}\n      </mat-option>\n    </mat-select>\n  </mat-form-field>\n\n  <div style=\"display:flex;flex-direction:row;justify-content:space-around;padding-top:10px;\">\n    <button mat-raised-button [disabled]=\"this.tagService.isProcessing || !tagFormGroup.valid \" color=\"primary\" (click)=\"addTag()\">{{ 'Add Tag' | translate }}</button>\n    <button mat-raised-button [disabled]=\"this.tagService.isProcessing || fieldtotag.empty || (propagation.checked && !tagFormGroup.valid)\" color=\"warn\" (click)=\"removeTag()\">{{ 'Remove Tag' | translate }}</button>\n  </div>\n  <mat-progress-bar *ngIf=\"this.tagService.isProcessing\" class=\"tag-progress\" [color]=\"'accent'\" [mode]=\"'indeterminate'\"></mat-progress-bar>\n</div>\n","<mat-table [dataSource]=\"tagsRef\" class=\"tags-table-items\">\n  <ng-container matColumnDef=\"checked\">\n    <mat-header-cell *matHeaderCellDef>#</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef; let i = index\">\n      <mat-checkbox (change)=\"selectTag($event, i, tagRef)\" value=\"{{tagRef.id}}\"> </mat-checkbox>\n    </mat-cell>\n  </ng-container>\n\n  <ng-container matColumnDef=\"date\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Date' | translate }}</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef\">{{tagRef.creationTime | date: 'dd/MM/yyyy HH:mm:ss'}}</mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"name\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Operation Name' | translate }}</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef\">{{tagRef.label}}</mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"path\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Field tagged' | translate }}</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef\">{{tagRef.tag.path}}</mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"tagValue\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Value of tag' | translate }}</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef\">{{tagRef.tag.value}}</mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"propagation\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Propagation field' | translate }}</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef\">{{tagRef.propagation?.field}}</mat-cell>\n  </ng-container>\n  <ng-container matColumnDef=\"action\">\n    <mat-header-cell *matHeaderCellDef>{{ 'Action' | translate }}</mat-header-cell>\n    <mat-cell *matCellDef=\"let tagRef\">{{tagRef.action}}</mat-cell>\n  </ng-container>\n\n  <mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></mat-header-row>\n  <mat-row class=\"tags-table-row\" *matRowDef=\"let myRowData; columns: columnsToDisplay\"></mat-row>\n</mat-table>\n\n<div class=\"tags_spinner\" *ngIf=\"isLoading\">\n  <mat-progress-spinner\n    color=\"primary\"\n    mode=\"indeterminate\"\n    [diameter]=\"50\">\n  </mat-progress-spinner>\n</div>\n\n<div style=\"display:flex;flex-direction:row;justify-content:space-around;padding-top:10px;\">\n  <button mat-raised-button [disabled]=\"this.selectedsTag.length === 0\" color=\"primary\" (click)=\"replay()\">{{ 'Replay' | translate }}</button>\n</div>\n\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit, Input, SimpleChanges, OnChanges } from '@angular/core';\nimport * as _moment from 'moment';\nimport { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from '@danielmoncada/angular-datetime-picker';\nimport { MomentDateTimeAdapter } from '@danielmoncada/angular-datetime-picker-moment-adapter';\n\nimport { HistogramContributor } from 'arlas-web-contributors';\nimport { ArlasStartupService } from '../../../services/startup/startup.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst moment = (_moment as any).default ? (_moment as any).default : _moment;\n\n/**\n * The component allows to set start/end values of a temporal selection on the timeline\n */\n@Component({\n  selector: 'arlas-tool-date-picker',\n  templateUrl: './date-picker.component.html',\n  styleUrls: ['./date-picker.component.scss'],\n  providers: [\n    { provide: DateTimeAdapter, useClass: MomentDateTimeAdapter, deps: [OWL_DATE_TIME_LOCALE] }\n  ]\n})\nexport class DatePickerComponent implements OnInit, OnChanges {\n\n  /**\n   * @Input : Angular\n   * @description Start value of the date picker. It must be date or a timestamp.\n   */\n  @Input() public startSelectedDate: Date | number;\n\n  /**\n   * @Input : Angular\n   * @description End value of the date picker. It must be date or a timestamp.\n   */\n  @Input() public endSelectedDate: Date | number;\n\n  /**\n   * @Input : Angular\n   * @description In this object, all the necessary inputs of HistogramComponent (ARLAS-web-components)\n   * must be set as well as the identifier of the contributor that fetches timeline data. The `HistogramContributor`\n   * should be declared before in the `contributorRegistry` of `ArlasStartupService`.\n   */\n  @Input() public timelineComponent: any;\n\n  public timelineContributor: HistogramContributor;\n\n  public startSelectedMoment: _moment.Moment;\n  public endSelectedMoment: _moment.Moment;\n\n  public constructor(\n    private arlasStartupService: ArlasStartupService,\n    public translate: TranslateService) {\n  }\n\n  public ngOnInit() {\n    if (this.timelineComponent) {\n      this.timelineContributor = <HistogramContributor>\n        this.arlasStartupService.contributorRegistry.get(this.timelineComponent.contributorId);\n      this.timelineContributor.updateData = true;\n\n      // Sometimes the Inputs are received before the OnInit hook and thus don't trigger onChanges\n      if (this.startSelectedDate) {\n        this.startSelectedMoment = this.convertDateToMoment(this.startSelectedDate);\n      }\n      if (this.endSelectedDate) {\n        this.endSelectedMoment = this.convertDateToMoment(this.endSelectedDate);\n      }\n    }\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes['startSelectedDate'] !== undefined) {\n      if (!!this.timelineContributor) {\n        this.startSelectedMoment = this.convertDateToMoment(changes['startSelectedDate'].currentValue);\n      }\n    }\n    if (changes['endSelectedDate'] !== undefined) {\n      if (!!this.timelineContributor) {\n        this.endSelectedMoment = this.convertDateToMoment((changes['endSelectedDate'].currentValue));\n      }\n    }\n  }\n\n  /**\n   * Applies a temporal filter on the timeline when a date is selected on the date picker\n   */\n  public setDate(): void {\n    const selectedIntervalsList = new Array();\n    this.timelineContributor.intervalListSelection\n      .forEach(intervalSelection => {\n        selectedIntervalsList.push(intervalSelection);\n      });\n    selectedIntervalsList\n      .push({\n        startvalue: this.fixUtc(this.startSelectedMoment).valueOf(),\n        endvalue: this.fixUtc(this.endSelectedMoment).valueOf()\n      });\n    this.timelineContributor.valueChanged(selectedIntervalsList, this.timelineContributor.getAllCollections());\n  }\n\n  public convertDateToMoment(date: Date | number) {\n    if (this.timelineContributor.useUtc) {\n      return moment.utc(date);\n    } else {\n      return moment(date);\n    }\n  }\n\n  /** Owl-datetime-picker produces a moment that is based on the local.\n   * Offsets the time by the UTC offset to receive a correct UTC time when updating the contributor. */\n  public fixUtc(date: _moment.Moment) {\n    if (this.timelineContributor.useUtc) {\n      const localUTCSOffset = date.utcOffset();\n      return date.add(localUTCSOffset, 'minutes');\n    }\n    return date;\n  }\n}\n","<label class=\"arlas-date-picker-label-from\">\n  {{'Datepicker.rangeFromLabel' | translate}}\n  <input class=\"arlas-date-picker-input-from\" [(ngModel)]=\"startSelectedMoment\" [owlDateTimeTrigger]=\"startDt\" [owlDateTime]=\"startDt\"\n    (dateTimeChange)=\"setDate()\" [max]=\"endSelectedMoment\">\n  <owl-date-time #startDt showSecondsTimer=true></owl-date-time>\n</label>\n<label class=\"arlas-date-picker-label-to\">\n  {{'Datepicker.rangeToLabel' | translate}}\n  <input class=\"arlas-date-picker-input-to\" [(ngModel)]=\"endSelectedMoment\" [owlDateTimeTrigger]=\"endDt\" [owlDateTime]=\"endDt\"\n    (dateTimeChange)=\"setDate()\" [min]=\"startSelectedMoment\">\n  <owl-date-time #endDt showSecondsTimer=true></owl-date-time>\n</label>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { utcFormat, timeFormat } from 'd3-time-format';\n\n@Pipe({\n  name: 'getTimeLabel'\n})\nexport class GetTimeLabelPipe implements PipeTransform {\n\n  public transform(label: string, format: string, translate: TranslateService, useUtc: boolean): any {\n    if (label) {\n      const startEndValues = label.split('to');\n      if (startEndValues.length > 1) {\n        const start = new Date(+startEndValues[0]);\n        const end = new Date(+startEndValues[1]);\n        if (!format) {\n          format = '%d/%m/%Y %H:%M';\n        }\n        if (useUtc) {\n          return translate.instant('From') + ' ' + (utcFormat(format)(start) + ' '\n            + translate.instant('to') + ' ' + utcFormat(format)(end));\n        } else {\n          return translate.instant('From') + ' ' + (timeFormat(format)(start) + ' '\n            + translate.instant('to') + ' ' + timeFormat(format)(end));\n        }\n      } else {\n        return translate.instant(label);\n      }\n    } else {\n      return label;\n    }\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { HistogramContributor } from 'arlas-web-contributors';\nimport { SelectedOutputValues, StringifiedTimeShortcut } from 'arlas-web-contributors/models/models';\nimport { OperationEnum } from 'arlas-web-core';\nimport { filter } from 'rxjs/operators';\nimport { ArlasCollaborativesearchService } from '../../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasStartupService } from '../../../services/startup/startup.service';\n\n/**\n * This component contains shortcut labels that allow to apply predefined temporal filters on a timeline\n * (Last year, Last month, Today, etc ...).\n * It also displays the start and end values of the current selection on the timeline. And if enabled, a datepicker is allowed on those\n * start and end values.\n * This component is used internally in `TimelineComponent`\n */\n@Component({\n  selector: 'arlas-timeline-shortcut',\n  templateUrl: './timeline-shortcut.component.html',\n  styleUrls: ['./timeline-shortcut.component.scss']\n})\nexport class TimelineShortcutComponent implements OnInit {\n  /**\n  * @Input : Angular\n  * @description In this object, all the necessary inputs of HistogramComponent (ARLAS-web-components)\n  * must be set as well as the identifier of the contributor that fetches timeline data. The `HistogramContributor`\n  * should be declared before in the `contributorRegistry` of `ArlasStartupService`\n  */\n  @Input() public timelineComponent: any;\n  /**\n   * @Input : Angular\n   * @description Optional input. Sets the format of start/end date values of the timeline.\n   */\n  @Input() public dateFormat: string;\n  /**\n   * @Input : Angular\n   * @description Whether the date picker is enabled\n   */\n  @Input() public activeDatePicker = false;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display the timelines' histogram\n   */\n  @Input() public isDisplayHistogram = true;\n\n  /**\n   * @Output : Angular\n   * @description Emits when the value of isDisplayHistogram changes\n   */\n  @Output() public isDisplayHistogramChange = new EventEmitter();\n\n  /**\n   * @Output : Angular\n   * @description Emits when the timeline collaboration is removed\n   */\n  @Output() public removeCollaboration = new EventEmitter<void>();\n\n  public timelineContributor: HistogramContributor;\n  public timeShortcuts: Array<StringifiedTimeShortcut>;\n  public timeShortcutsMap: Map<string, Array<StringifiedTimeShortcut>>;\n  public showRemoveIcon = false;\n  public showShortcuts = false;\n  public HIDE_SHOW = 'Show';\n  public isShortcutSelected = false;\n  public timeZone = 'UTC';\n\n  public constructor(private arlasCollaborativesearchService: ArlasCollaborativesearchService, private arlasStartupService: ArlasStartupService,\n    public translate: TranslateService) {\n    this.arlasCollaborativesearchService.collaborationBus.pipe(filter(c => ((this.timelineComponent\n      && c.id === this.timelineComponent.contributorId) || c.all)))\n      .subscribe(data => {\n        if (this.timelineContributor && this.timelineContributor.timeLabel !== undefined\n          && this.timelineContributor.timeLabel.indexOf('to') === -1) {\n          this.isShortcutSelected = true;\n        } else {\n          this.isShortcutSelected = false;\n        }\n      });\n\n  }\n  public ngOnInit() {\n    if (this.timelineComponent) {\n      this.timelineContributor = <HistogramContributor>this.arlasStartupService.contributorRegistry\n        .get(this.timelineComponent.contributorId);\n      this.timelineContributor.updateData = true;\n      this.timeShortcuts = this.timelineContributor.timeShortcuts;\n      this.timeShortcutsMap = this.groupBy(this.timeShortcuts, shortcut => shortcut.type);\n      this.setRemoveIconVisibility();\n      if (!this.timelineContributor.useUtc) {\n        this.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n      }\n    }\n  }\n\n  /**\n   * Applies a temporal filter on timeline according to the chosen shortcut.\n   * @param shortCut\n   */\n  public setShortcut(shortCut: StringifiedTimeShortcut): void {\n    const selectedIntervalsList = new Array<SelectedOutputValues>();\n    if (this.timelineContributor) {\n      this.timelineContributor.intervalListSelection.forEach(intervalSelection => {\n        selectedIntervalsList.push(intervalSelection);\n      });\n      selectedIntervalsList.push({ startvalue: shortCut.from, endvalue: shortCut.to });\n      this.timelineContributor.valueChanged(selectedIntervalsList, this.timelineContributor.getAllCollections());\n    }\n  }\n\n  /**\n   * Shows/hides the `div` containing the shortcuts list\n   */\n  public showSortcuts(): void {\n    if (this.timeShortcuts && this.timeShortcuts.length > 0) {\n      this.showShortcuts = !this.showShortcuts;\n      if (this.showShortcuts) {\n        this.HIDE_SHOW = 'Hide';\n      } else {\n        this.HIDE_SHOW = 'Show';\n      }\n    }\n  }\n\n  /**\n   * Removes all temporal filters of the timeline\n   */\n  public removeTimelineCollaboration(): void {\n    this.showRemoveIcon = false;\n    this.isShortcutSelected = false;\n    this.removeCollaboration.next();\n  }\n\n  public toggleTimeline() {\n    this.isDisplayHistogram = !this.isDisplayHistogram;\n    this.isDisplayHistogramChange.next(this.isDisplayHistogram);\n  }\n\n  /**\n   * Shows or hides the icon that allows to clear all temporal filter. This icon is displayed when there filters on the timeline.\n   */\n  private setRemoveIconVisibility(): void {\n    this.arlasCollaborativesearchService.collaborationBus.pipe(filter(c => (c.id === this.timelineComponent.contributorId || c.all)))\n      .subscribe(c => {\n        if (c.operation === OperationEnum.remove) {\n          this.showRemoveIcon = false;\n        } else if (c.operation === OperationEnum.add &&\n          this.arlasCollaborativesearchService.collaborations.has(this.timelineComponent.contributorId)) {\n          this.showRemoveIcon = true;\n        }\n      });\n  }\n\n  private groupBy(list, keyGetter) {\n    const map = new Map();\n    list.forEach((item) => {\n      const key = keyGetter(item);\n      const collection = map.get(key);\n      if (!collection) {\n        map.set(key, [item]);\n      } else {\n        collection.push(item);\n      }\n    });\n    return map;\n  }\n}\n","<div class=\"arlas-time-shortcuts--container\">\n  <div *ngIf=\"showShortcuts\" class=\"arlas-time-shortcuts__list--container\">\n    <ul class=\"arlas-time-shortcuts__list\" *ngFor=\"let shortcutType of timeShortcutsMap | keyvalue\">\n      <li class=\"arlas-time-shortcut\" *ngFor=\"let shortCut of shortcutType.value\" (click)=\"setShortcut(shortCut)\">{{shortCut.label | translate}}</li>\n    </ul>\n  </div>\n  <div class=\"arlas-time--tools\">\n    <mat-basic-chip class=\"shortcut-button\">\n      <mat-icon id=\"shortcut-btn\" class=\"shortcut-button__icon\" [class.cursor]=\"timeShortcuts?.length > 0\" (click)=\"showSortcuts()\"\n        matTooltip=\"{{HIDE_SHOW + ' time shortcuts' | translate}}\" matTooltipPosition=\"above\">access_time</mat-icon>\n      <div class=\"arlas-datepicker-container\">\n        <arlas-tool-date-picker *ngIf=\"activeDatePicker\" class=\"shortcut-button__label\"\n          [startSelectedDate]=\"timelineContributor?.intervalSelection?.startvalue\"\n          [endSelectedDate]=\"timelineContributor?.intervalSelection?.endvalue\"\n          [timelineComponent]=\"timelineComponent\">\n        </arlas-tool-date-picker>\n        <div class=\"shortcut-button__label\" *ngIf=\"!activeDatePicker\">\n          {{timelineContributor?.timeLabel | getTimeLabel: dateFormat:translate:timelineContributor?.useUtc}}\n        </div>\n        <div class=\"time-zone\" matTooltip=\"{{'Time zone' | translate}} {{timeZone}}\" matTooltipPosition=\"above\">\n          <mat-icon class=\"time-zone-icon\" >language</mat-icon>\n        </div>\n      </div>\n      <div *ngIf=\"showRemoveIcon\" class=\"shortcut-remove-filter\" (click)=\"removeTimelineCollaboration()\"\n        matTooltip=\"{{'Remove time filter' | translate}}\" matTooltipPosition=\"above\">\n        <mat-icon class=\"shortcut-remove-filter-icon\" >clear</mat-icon>\n      </div>\n    </mat-basic-chip>\n    <div class=\"arlas-timeline-toggle\" (click)=\"toggleTimeline()\">\n      <mat-icon *ngIf=\"!isDisplayHistogram\" [matTooltip]=\"'Show timeline' | translate\" matTooltipPosition=\"above\">keyboard_arrow_up</mat-icon>\n      <mat-icon *ngIf=\"isDisplayHistogram\" [matTooltip]=\"'Hide timeline' | translate\" matTooltipPosition=\"above\">keyboard_arrow_down</mat-icon>\n    </div>\n  </div>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\nimport { ChartType, DataType, HistogramTooltip, Position } from 'arlas-d3';\nimport { ArlasColorService, HistogramComponent } from 'arlas-web-components';\nimport { DetailedHistogramContributor, HistogramContributor } from 'arlas-web-contributors';\nimport { SelectedOutputValues } from 'arlas-web-contributors/models/models';\nimport { OperationEnum } from 'arlas-web-core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ArlasCollaborativesearchService } from '../../../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasCollectionService } from '../../../services/collection/arlas-collection.service';\nimport { ArlasOverlayService } from '../../../services/overlays/overlay.service';\nimport { ArlasStartupService } from '../../../services/startup/startup.service';\nimport { ArlasOverlayRef } from '../../../tools/utils';\nimport { CollectionLegend, TimelineConfiguration } from './timeline.utils';\n\n\n/**\n * This component contains\n * - A main timeline histogram that plots the count (or other metric) of data over time\n * - A detailed timeline histogram that plots the current selection on the main timeline (optional)\n * - A datepicker (optional)\n * - Shortcut labels that allow to apply predefined temporal filters (Last year, Last month, Today, etc ...)\n */\n@Component({\n  selector: 'arlas-timeline',\n  templateUrl: './timeline.component.html',\n  styleUrls: ['./timeline.component.scss']\n})\nexport class TimelineComponent implements OnInit, OnDestroy {\n\n  /**\n   * @Input : Angular\n   * @description In this object, all the necessary inputs of HistogramComponent (ARLAS-web-components)\n   * must be set as well as the identifier of the contributor that fetches timeline data. The `HistogramContributor`\n   * should be declared before in the `contributorRegistry` of `ArlasStartupService`\n   */\n  @Input() public timelineComponent: TimelineConfiguration;\n  /**\n   * @Input : Angular\n   * @description Optional input. If not set, the detailed timeline is deactivated.\n   * Same as the precedent input, In this object, all the necessary inputs of HistogramComponent (ARLAS-web-components)\n   * must be set as well as the identifier of the detailed contributor that fetches data within the current selection.\n   * The `DetailedHistogramContributor` should be declared before in the `contributorRegistry` of `ArlasStartupService`\n   */\n  @Input() public detailedTimelineComponent: TimelineConfiguration;\n  /**\n   * @Input : Angular\n   * @description Whether the date picker is enabled\n   */\n  @Input() public activeDatePicker = false;\n\n  /**\n   * @Input : Angular\n   * @description Whether to display the timelines' histogram\n   */\n  @Input() public isDisplayHistogram = true;\n\n  /**\n   * @Input : Angular\n   * @description Whether or not the spinner is displayed when loading data\n   */\n  @Input() public showSpinner = false;\n\n  /**\n   * @Input : Angular\n   * @description Color palette of the spinner when loading data\n   */\n  @Input() public colorSpinner = 'primary';\n\n  /**\n   * @Input : Angular\n   * @description Diameter of the spinner when loading data\n   */\n  @Input() public diameterSpinner = 100;\n\n  /**\n   * @Input : Angular\n   * @description Stroke of the spinner when loading data\n   */\n  @Input() public strokeWidthSpinner = 5;\n\n  /**\n   * @Output : Angular\n   * @description Emits when the value of isDisplayHistogram changes\n   */\n  @Output() public isDisplayHistogramChange: EventEmitter<boolean> = new EventEmitter();\n\n  @ViewChild('timeline', { static: false }) public timelineHistogramComponent: HistogramComponent;\n  @ViewChild('detailedtimeline', { static: false }) public detailedTimelineHistogramComponent: HistogramComponent;\n\n  public showDetailedTimeline = false;\n  public detailedTimelineContributor: DetailedHistogramContributor;\n  public timelineContributor: HistogramContributor;\n  public detailedTimelineIntervalSelection: SelectedOutputValues;\n  public timelineData = [];\n  public detailedTimelineData = [];\n  private isDetailedIntervalBrushed = false;\n  private applicationFirstLoad = false;\n  private timelineIsFiltered = false;\n  public timelineOverlayRef: ArlasOverlayRef;\n  public timelineLegend: CollectionLegend[] = [];\n  public mainCollection: string;\n\n  private _onDestroy$ = new Subject<boolean>();\n\n  public constructor(\n    protected arlasCollaborativesearchService: ArlasCollaborativesearchService,\n    private arlasStartupService: ArlasStartupService,\n    private arlasOverlayService: ArlasOverlayService,\n    private arlasColorService: ArlasColorService,\n    private collectionService: ArlasCollectionService) {\n  }\n\n  public ngOnInit() {\n    if (this.timelineComponent) {\n      this.timelineContributor = <HistogramContributor>this.arlasStartupService.contributorRegistry\n        .get(this.timelineComponent.contributorId);\n      this.timelineContributor.updateData = true;\n      this.mainCollection = this.timelineContributor.collection;\n      this.resetHistogramsInputs(this.timelineComponent.input);\n      const displayName = this.collectionService.getDisplayName(this.mainCollection) !== this.mainCollection ?\n        this.collectionService.getDisplayName(this.mainCollection) : this.collectionService.getUnit(this.mainCollection);\n      this.timelineLegend.push({\n        collection: this.mainCollection,\n        display_name: displayName,\n        color: this.arlasColorService.getColor(this.mainCollection),\n        active: true,\n        main: true\n      });\n      if (!!this.timelineContributor.additionalCollections) {\n        this.timelineContributor.additionalCollections.forEach(ac => {\n          const displayName = this.collectionService.getDisplayName(ac.collectionName) !== ac.collectionName ?\n            this.collectionService.getDisplayName(ac.collectionName) : this.collectionService.getUnit(ac.collectionName);\n          this.timelineLegend.push({\n            collection: ac.collectionName,\n            display_name: displayName,\n            color: this.arlasColorService.getColor(ac.collectionName),\n            active: true,\n            main: (ac.collectionName === this.mainCollection)\n          });\n        });\n      }\n\n      this.timelineContributor.chartDataEvent\n        .pipe(takeUntil(this._onDestroy$))\n        .subscribe(chartData => {\n          this.timelineData = chartData.filter(cd => {\n            const collectionLegend = this.timelineLegend.find(t => t.collection === cd.chartId);\n            return !!collectionLegend && collectionLegend.active;\n          });\n\n          // Set timeline contributor's data to reflect selection of legend\n          this.timelineContributor.setSelection(this.timelineData,\n            this.arlasCollaborativesearchService.collaborations.get(this.timelineContributor.identifier));\n        });\n\n      if (this.detailedTimelineComponent) {\n        this.detailedTimelineComponent.input.chartHeight = 76;\n        this.resetHistogramsInputs(this.detailedTimelineComponent.input);\n        this.detailedTimelineContributor = <DetailedHistogramContributor>this.arlasStartupService.contributorRegistry\n          .get(this.detailedTimelineComponent.contributorId);\n        this.detailedTimelineContributor.updateData = false;\n\n        this.showDetailedTimelineOnCollaborationEnd();\n      }\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n\n  /**\n   * Recalculates the new data of detailed timeline and resets its own current selection.\n   * @param selections List containing only the current selection of detailed timeline\n   */\n  public onDetailedIntervalBrushed(selections: SelectedOutputValues[]): void {\n    this.isDetailedIntervalBrushed = true;\n    this.detailedTimelineIntervalSelection = { startvalue: selections[0].startvalue, endvalue: selections[0].endvalue };\n    this.timelineContributor.valueChanged(this.timelineContributor.intervalListSelection.concat(selections),\n      this.timelineContributor.getAllCollections());\n  }\n\n  /**\n   * Runs when the selection is brushed on main timeline.\n   * @param selections List containing only the current selection of detailed timeline\n   */\n  public onTimelineIntervalBrushed(selections: SelectedOutputValues[]): void {\n    // Once we bruch the main timeline, we want the detailed one to be able to pick up collaborations again\n    if (!!this.detailedTimelineContributor) {\n      this.detailedTimelineContributor.updateData = true;\n    }\n    this.timelineContributor.valueChanged(selections, this.timelineContributor.getAllCollections());\n  }\n\n  /**\n   * Runs when the detailed timeline is plotted.\n   * Sets current selection of detailed timeline after it is plotted\n   * Applies the current selection of detailed timeline on the main timeline\n   */\n  public afterDetailedDataPlotted(e) {\n    if (this.isDetailedIntervalBrushed) {  // If detailed timeline is replotted after moving its own brush.\n      // Reset current selection of detailed timeline after it is plotted\n      this.detailedTimelineIntervalSelection = {\n        startvalue: this.detailedTimelineContributor.currentSelectedInterval.startvalue,\n        endvalue: this.detailedTimelineContributor.currentSelectedInterval.endvalue\n      };\n      // Apply the current selection of detailed timeline on the main timeline\n      this.timelineContributor.intervalSelection = {\n        startvalue: this.detailedTimelineContributor.currentSelectedInterval.startvalue,\n        endvalue: this.detailedTimelineContributor.currentSelectedInterval.endvalue\n      };\n    } else { // If detailed timeline is replotted after moving the brush of the main timeline or when the app is loaded.\n      const selection = this.detailedTimelineContributor.currentSelectedInterval;\n      if (selection) {\n        this.detailedTimelineIntervalSelection = { startvalue: selection.startvalue, endvalue: selection.endvalue };\n      } else {\n        this.applicationFirstLoad = true;\n      }\n    }\n    this.isDetailedIntervalBrushed = false;\n  }\n\n  public showHistogramTooltip(tooltip: HistogramTooltip, e: ElementRef, xOffset: number, yOffset: number, right: boolean) {\n    if (!!this.timelineOverlayRef) {\n      this.timelineOverlayRef.close();\n    }\n    if (!!tooltip && tooltip.shown) {\n      this.timelineOverlayRef = this.arlasOverlayService.openHistogramTooltip({ data: tooltip }, e, xOffset, yOffset, right);\n    }\n  }\n\n  public hideHistogramTooltip() {\n    if (!!this.timelineOverlayRef) {\n      this.timelineOverlayRef.close();\n    }\n  }\n\n  public emitTooltip(tooltip: HistogramTooltip, e: ElementRef) {\n    const yOffset = this.timelineLegend && this.timelineLegend.length > 1 ? -140 : -110;\n    let xOffset = tooltip.xPosition;\n    let right = false;\n    if (!!tooltip && tooltip.shown && tooltip.xPosition > tooltip.chartWidth / 2) {\n      xOffset = -tooltip.chartWidth + tooltip.xPosition;\n      right = true;\n    }\n    this.showHistogramTooltip(tooltip, e, xOffset, yOffset, right);\n  }\n\n  public hideShowCollection(collectionLegend: CollectionLegend): void {\n    collectionLegend.active = !collectionLegend.active;\n    const activeCollections = new Set(this.timelineLegend.filter(tl => tl.active).map(tl => tl.collection));\n    this.timelineContributor.collections = this.timelineContributor.getAllCollections()\n      .filter(c => activeCollections.has(c.collectionName));\n    if (this.timelineContributor.collections.length === 0) {\n      this.timelineData = this.timelineContributor.chartData = [];\n      this.detailedTimelineData = this.detailedTimelineContributor.chartData = [];\n      this.hideDetailedTimeline();\n    } else {\n      this.timelineContributor.updateFromCollaboration({\n        id: '',\n        all: false,\n        operation: OperationEnum.add\n      });\n      if (this.detailedTimelineContributor) {\n        this.detailedTimelineContributor.collections = this.timelineContributor.collections;\n        this.detailedTimelineContributor.updateFromCollaboration({\n          id: '',\n          all: false,\n          operation: OperationEnum.add\n        });\n      }\n    }\n  }\n\n  /**\n   * At the end of the collaboration of the Timeline Contributor, hides the timeline if the collaboration removed the filter.\n   * If it added one, then asks the Detailed Timeline Contributor to update its data, to then check if the detailed timeline should display.\n   */\n  private showDetailedTimelineOnCollaborationEnd(): void {\n    this.detailedTimelineContributor.chartDataEvent\n      .pipe(takeUntil(this._onDestroy$))\n      .subscribe(chartData => {\n        this.detailedTimelineData = chartData.filter(cd => {\n          const collectionLegend = this.timelineLegend.find(t => t.collection === cd.chartId);\n          return !!collectionLegend && collectionLegend.active;\n        });\n        this.hideShowDetailedTimeline();\n      });\n\n    this.timelineContributor.endCollaborationEvent\n      .pipe(takeUntil(this._onDestroy$))\n      .subscribe(c => {\n        if (c.operation === OperationEnum.remove) {\n          this.timelineIsFiltered = false;\n          this.hideDetailedTimeline();\n        } else if (c.operation === OperationEnum.add) {\n          this.timelineIsFiltered = this.arlasCollaborativesearchService.\n            collaborations.has(this.timelineComponent.contributorId);\n          if (this.timelineIsFiltered) {\n            this.detailedTimelineContributor.updateData = true;\n            this.detailedTimelineContributor.updateFromCollaboration(c);\n          }\n        }\n      });\n  }\n\n  /**\n   * On the event sent by the timeline-tools, remove the timeline collaboration and hide the detailed timeline\n   */\n  protected onRemoveCollaboration() {\n    this.arlasCollaborativesearchService.removeFilter(this.timelineComponent.contributorId);\n    this.timelineIsFiltered = false;\n    this.hideDetailedTimeline();\n  }\n\n  public toggleTimeline() {\n    this.isDisplayHistogram = !this.isDisplayHistogram;\n    this.isDisplayHistogramChange.next(this.isDisplayHistogram);\n    // Disable the update of both normal and detailed timeline if not open\n    this.timelineContributor.updateData = this.isDisplayHistogram;\n    this.detailedTimelineContributor.updateData = this.showDetailedTimeline && this.isDisplayHistogram;\n    if (this.isDisplayHistogram) {\n      this.timelineContributor.updateFromCollaboration({\n        id: this.timelineContributor.linkedContributorId,\n        operation: OperationEnum.add,\n        all: false\n      });\n      if (this.showDetailedTimeline) {\n        this.detailedTimelineContributor.updateFromCollaboration({\n          id: this.detailedTimelineContributor.linkedContributorId,\n          operation: OperationEnum.add,\n          all: false\n        });\n      }\n    }\n  }\n\n  private hideShowDetailedTimeline() {\n    let timelineRange = this.timelineContributor.range;\n    if (!!this.timelineContributor && this.timelineContributor.chartData?.length > 1) {\n      const d = this.timelineContributor.chartData;\n      const l = d.length;\n      timelineRange = (+d[l - 1].key) - (+d[0].key);\n    }\n    let detailedTimelineRange = this.detailedTimelineContributor.range;\n    if (!!this.detailedTimelineContributor && this.detailedTimelineContributor.chartData?.length > 1) {\n      const d = this.detailedTimelineContributor.chartData;\n      const l = d.length;\n      detailedTimelineRange = (+d[l - 1].key) - (+d[0].key);\n    }\n    // In case if the timeline is hidden\n    if (!!this.timelineHistogramComponent) {\n      if (timelineRange !== undefined && detailedTimelineRange !== undefined) {\n        const intervalSelection = (+this.timelineContributor.intervalSelection.endvalue -\n          +this.timelineContributor.intervalSelection.startvalue);\n        const intervalSelectionCondition = intervalSelection <= 0.2 * timelineRange;\n        this.showDetailedTimeline = (detailedTimelineRange <= 0.2 * timelineRange) && intervalSelectionCondition;\n        this.detailedTimelineContributor.updateData = this.showDetailedTimeline;\n        this.timelineHistogramComponent.histogram.histogramParams.chartHeight = (this.showDetailedTimeline) ?\n          45 : this.timelineComponent.input.chartHeight;\n        this.timelineHistogramComponent.histogram.histogramParams.yTicks = (this.showDetailedTimeline) ?\n          1 : this.timelineComponent.input.yTicks;\n        this.timelineHistogramComponent.histogram.histogramParams.yLabels = (this.showDetailedTimeline) ?\n          1 : this.timelineComponent.input.yLabels;\n        this.timelineHistogramComponent.histogram.histogramParams.showHorizontalLines = (this.showDetailedTimeline) ?\n          false : this.timelineComponent.input.showHorizontalLines;\n        this.timelineHistogramComponent.resizeHistogram();\n        if (this.applicationFirstLoad && this.detailedTimelineContributor.currentSelectedInterval) {\n          // Sets current selection of detailed timeline\n          const select = this.detailedTimelineContributor.currentSelectedInterval;\n          this.detailedTimelineIntervalSelection = { startvalue: select.startvalue, endvalue: select.endvalue };\n          this.applicationFirstLoad = false;\n        }\n        if (this.showDetailedTimeline && !!this.detailedTimelineHistogramComponent) {\n          this.detailedTimelineHistogramComponent.resizeHistogram();\n        }\n      } else {\n        this.hideDetailedTimeline();\n      }\n    }\n  }\n\n  private resetHistogramsInputs(inputs: any) {\n    Object.keys(inputs).forEach(key => {\n      if (key === 'chartType' && isNaN(inputs[key])) {\n        inputs[key] = ChartType[inputs[key]];\n      } else if (key === 'dataType' && isNaN(inputs[key])) {\n        inputs[key] = DataType[inputs[key]];\n      } else if (key === 'xAxisPosition' && isNaN(inputs[key])) {\n        inputs[key] = Position[inputs[key]];\n      } else if (key === 'descriptionPosition' && isNaN(inputs[key])) {\n        inputs = Position[inputs[key]];\n      }\n    });\n  }\n\n  private hideDetailedTimeline() {\n    this.showDetailedTimeline = false;\n    if (!!this.detailedTimelineContributor) {\n      this.detailedTimelineContributor.updateData = false;\n    }\n    if (!!this.timelineHistogramComponent) {\n      this.timelineHistogramComponent.histogram.histogramParams.chartHeight = this.timelineComponent.input.chartHeight;\n      this.timelineHistogramComponent.resizeHistogram();\n    }\n  }\n}\n","<arlas-timeline-shortcut class=\"arlas-timeline--timeshortcuts\" [activeDatePicker]=\"activeDatePicker\"\n    [timelineComponent]=\"timelineComponent\" [dateFormat]=\"timelineComponent?.dateFormat\"\n    [isDisplayHistogram]=\"isDisplayHistogram\" (isDisplayHistogramChange)=\"toggleTimeline()\"\n    (removeCollaboration)=\"onRemoveCollaboration()\"></arlas-timeline-shortcut>\n\n<div class=\"arlas-timeline--container\" *ngIf=\"isDisplayHistogram\" #arlasTimeline>\n  <div class=\"arlas-timeline--legend\" *ngIf=\"!!timelineLegend && timelineLegend.length > 1\">\n    <div *ngFor=\"let collectionLegend of timelineLegend\" class=\"arlas-timeline--legend-container\"\n      (click)=\"hideShowCollection(collectionLegend)\">\n      <div class=\"arlas-timeline--legend-chip\"\n        [style.backgroundColor]=\"collectionLegend.active ? collectionLegend.color : '#dadada'\"></div>\n      <div class=\"arlas-timeline--legend-collection\" [style.color]=\"collectionLegend.active ? '#444' : '#bbb'\">\n        {{ collectionLegend.display_name | translate }}</div>\n    </div>\n  </div>\n  <div *ngIf=\"detailedTimelineComponent\" class=\"show-detailedtimeline-{{'' + showDetailedTimeline}}\" (mouseleave)=\"hideHistogramTooltip()\">\n    <arlas-histogram #detailedtimeline [data]=\"detailedTimelineData\" [mainChartId]=\"mainCollection\"\n      [intervalSelection]=\"detailedTimelineIntervalSelection\" (dataPlottedEvent)=\"afterDetailedDataPlotted($event)\"\n      (valuesListChangedEvent)=\"onDetailedIntervalBrushed($event)\" [id]=\"detailedTimelineComponent?.input?.id\"\n      [displayOnlyIntervalsWithData]=true [dataType]=\"detailedTimelineComponent?.input?.dataType\"\n      [dataUnit]=\"detailedTimelineComponent?.input?.dataUnit\"\n      [valuesDateFormat]=\"detailedTimelineComponent?.input?.valuesDateFormat\"\n      [isHistogramSelectable]=\"detailedTimelineComponent?.input?.isHistogramSelectable === undefined ? true : detailedTimelineComponent?.input?.isHistogramSelectable \"\n      [multiselectable]=\"detailedTimelineComponent?.input?.multiselectable\"\n      [topOffsetRemoveInterval]=\"detailedTimelineComponent?.input?.topOffsetRemoveInterval\"\n      [leftOffsetRemoveInterval]=\"detailedTimelineComponent?.input?.leftOffsetRemoveInterval\"\n      [brushHandlesHeightWeight]=\"!!detailedTimelineComponent?.input?.brushHandlesHeightWeight ? detailedTimelineComponent?.input?.brushHandlesHeightWeight : 0.8 \"\n      [chartType]=\"detailedTimelineComponent?.input?.chartType\"\n      [chartTitle]=\"detailedTimelineComponent?.input?.chartTitle\"\n      [chartWidth]=\"!!detailedTimelineComponent?.input?.chartWidth ? detailedTimelineComponent?.input?.chartWidth : null \"\n      [chartHeight]=\"!!detailedTimelineComponent?.input?.chartHeight ? detailedTimelineComponent?.input?.chartHeight : 128\"\n      [customizedCssClass]=\"detailedTimelineComponent?.input?.customizedCssClass\"\n      [xAxisPosition]=\"detailedTimelineComponent?.input?.xAxisPosition\"\n      [descriptionPosition]=\"detailedTimelineComponent?.input?.descriptionPosition\"\n      [xTicks]=\"detailedTimelineComponent?.input?.xTicks\" [yTicks]=\"detailedTimelineComponent?.input?.yTicks\"\n      [xLabels]=\"detailedTimelineComponent?.input?.xLabels\" [yLabels]=\"detailedTimelineComponent?.input?.yLabels\"\n      [showXTicks]=\"detailedTimelineComponent?.input?.showXTicks\"\n      [showYTicks]=\"detailedTimelineComponent?.input?.showYTicks\"\n      [showXLabels]=\"detailedTimelineComponent?.input?.showXLabels\"\n      [showYLabels]=\"detailedTimelineComponent?.input?.showYLabels\"\n      [ticksDateFormat]=\"detailedTimelineComponent?.input?.ticksDateFormat\"\n      [isSmoothedCurve]=\"detailedTimelineComponent?.input?.isSmoothedCurve\"\n      [barWeight]=\"detailedTimelineComponent?.input?.barWeight\"\n      [paletteColors]=\"detailedTimelineComponent?.input?.paletteColors\"\n      [applyOffsetOnAreaChart]=\"detailedTimelineComponent?.input?.applyOffsetOnAreaChart\"\n      [displayOnlyIntervalsWithData]=\"detailedTimelineComponent?.input?.displayOnlyIntervalsWithData\"\n      [yAxisStartsFromZero]=\"detailedTimelineComponent?.input?.yAxisStartsFromZero\"\n      [showStripes]=\"detailedTimelineComponent?.input?.showStripes\"\n      [chartXLabel]=\"detailedTimelineComponent?.input?.chartXLabel\"\n      [shortYLabels]=\"detailedTimelineComponent?.input?.shortYLabels\" [xUnit]=\"detailedTimelineComponent?.input?.xUnit\"\n      [yUnit]=\"detailedTimelineComponent?.input?.yUnit\" [useUtc]=\"detailedTimelineContributor?.useUtc\"\n      (tooltipEvent)=\"emitTooltip($event,arlasTimeline)\"></arlas-histogram>\n  </div>\n  <div *ngIf=\"timelineComponent\" (mouseleave)=\"hideHistogramTooltip()\">\n    <arlas-histogram #timeline [intervalListSelection]=\"timelineContributor?.intervalListSelection\"\n      [intervalSelection]=\"timelineContributor?.intervalSelection\" [data]=\"timelineData\"\n      (valuesListChangedEvent)=\"onTimelineIntervalBrushed($event)\" [mainChartId]=\"mainCollection\"\n      [id]=\"timelineComponent?.input?.id\" [dataType]=\"timelineComponent?.input?.dataType\"\n      [dataUnit]=\"timelineComponent?.input?.dataUnit\" [valuesDateFormat]=\"timelineComponent?.input?.valuesDateFormat\"\n      [isHistogramSelectable]=\"timelineComponent?.input?.isHistogramSelectable === undefined ? true : timelineComponent?.input?.isHistogramSelectable \"\n      [multiselectable]=\"timelineComponent?.input?.multiselectable\"\n      [topOffsetRemoveInterval]=\"timelineComponent?.input?.topOffsetRemoveInterval\"\n      [leftOffsetRemoveInterval]=\"timelineComponent?.input?.leftOffsetRemoveInterval\"\n      [brushHandlesHeightWeight]=\"!!timelineComponent?.input?.brushHandlesHeightWeight ? timelineComponent?.input?.brushHandlesHeightWeight : 0.8 \"\n      [chartType]=\"timelineComponent?.input?.chartType\" [chartTitle]=\"timelineComponent?.input?.chartTitle\"\n      [chartWidth]=\"!!timelineComponent?.input?.chartWidth ? timelineComponent?.input?.chartWidth : null \"\n      [chartHeight]=\"!!timelineComponent?.input?.chartHeight ? timelineComponent?.input?.chartHeight : 128\"\n      [customizedCssClass]=\"timelineComponent?.input?.customizedCssClass\"\n      [xAxisPosition]=\"timelineComponent?.input?.xAxisPosition\"\n      [descriptionPosition]=\"timelineComponent?.input?.descriptionPosition\" [xTicks]=\"timelineComponent?.input?.xTicks\"\n      [yTicks]=\"timelineComponent?.input?.yTicks\" [xLabels]=\"timelineComponent?.input?.xLabels\"\n      [yLabels]=\"timelineComponent?.input?.yLabels\" [showXTicks]=\"timelineComponent?.input?.showXTicks\"\n      [showYTicks]=\"timelineComponent?.input?.showYTicks\" [showXLabels]=\"timelineComponent?.input?.showXLabels\"\n      [showYLabels]=\"timelineComponent?.input?.showYLabels\"\n      [ticksDateFormat]=\"timelineComponent?.input?.ticksDateFormat\"\n      [isSmoothedCurve]=\"timelineComponent?.input?.isSmoothedCurve\" [barWeight]=\"timelineComponent?.input?.barWeight\"\n      [paletteColors]=\"timelineComponent?.input?.paletteColors\"\n      [applyOffsetOnAreaChart]=\"timelineComponent?.input?.applyOffsetOnAreaChart\"\n      [displayOnlyIntervalsWithData]=\"timelineComponent?.input?.displayOnlyIntervalsWithData\"\n      [yAxisStartsFromZero]=\"timelineComponent?.input?.yAxisStartsFromZero\"\n      [showStripes]=\"timelineComponent?.input?.showStripes\" [chartXLabel]=\"timelineComponent?.input?.chartXLabel\"\n      [shortYLabels]=\"timelineComponent?.input?.shortYLabels\" [xUnit]=\"timelineComponent?.input?.xUnit\"\n      [yUnit]=\"timelineComponent?.input?.yUnit\" [useUtc]=\"timelineContributor?.useUtc\"\n      (tooltipEvent)=\"emitTooltip($event,arlasTimeline)\"></arlas-histogram>\n  </div>\n  <div *ngIf=\"timelineData.length === 0\" class=\"timeline-empty\">\n    <mat-icon class=\"icon\">event_busy</mat-icon>\n    {{ 'No data available.' | translate }}\n  </div>\n  <arlas-tool-progress-spinner *ngIf=\"showSpinner\" [strokeWidth]=\"strokeWidthSpinner\"\n    [color]=\"colorSpinner\" [diameter]=\"diameterSpinner\"\n    [hidden]=\"!((timelineComponent?.contributorId | contributorUpdating:arlasCollaborativesearchService.totalSubscribe)\n      || (showDetailedTimeline && detailedTimelineComponent?.contributorId | contributorUpdating:arlasCollaborativesearchService.totalSubscribe))\">\n  </arlas-tool-progress-spinner>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Aggregation } from 'arlas-api';\nimport { ColorGeneratorLoader } from 'arlas-web-components';\nimport { projType } from 'arlas-web-core';\nimport { Subject } from 'rxjs';\nimport tinycolor from 'tinycolor2';\nimport { ArlasCollaborativesearchService } from '../services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService } from '../services/startup/startup.service';\n\n/**\n * This service allows to generate a color for a given term.\n * - colors associated to terms in `keysToColors` are considered first\n * - colors associated to terms from aggregations specified in `colorsAggregations` are considered second\n * - if no color is associated to a term, the color is generated with a determinist method.\n * - for generated colors, the saturation scale is tightened to the highest values with `colorsSaturationWeight`\n * If an external `externalKeysToColors` list is given to the service `getColor` method, it is used insted of `keysToColors`\n * If an external `externalColorsSaturationWeight` list is given to the service `getColor` method,\n * it is used insted of `colorsSaturationWeight`\n */\nexport class ArlasColorGeneratorLoader extends ColorGeneratorLoader {\n\n  public keysToColors: Array<[string, string]> = new Array<[string, string]>();\n  public colorsSaturationWeight: number;\n  public keysToColorsMap: Map<string, string> = new Map<string, string>();\n  public colorAggregations: Array<[Aggregation, Aggregation]>;\n  private changekeysToColors = new Subject<void>();\n  public changekeysToColors$ = this.changekeysToColors.asObservable();\n  public constructor(\n    private configService: ArlasConfigService,\n    private collaborativesearchService: ArlasCollaborativesearchService) {\n    super();\n    const webConfig = this.configService.getValue('arlas.web');\n    if (webConfig && webConfig.colorGenerator) {\n      this.keysToColors = webConfig.colorGenerator.keysToColors;\n      this.keysToColors.forEach(item => {\n        this.keysToColorsMap.set(item[0], item[1]);\n      });\n      this.colorsSaturationWeight = webConfig.colorGenerator.colorsSaturationWeight;\n      this.colorAggregations = webConfig.colorGenerator.colorAggregations;\n    }\n    if (this.colorAggregations) {\n      this.setColorsFromAggregations();\n    }\n    if (this.colorsSaturationWeight === undefined || this.colorsSaturationWeight === null) {\n      this.colorsSaturationWeight = 0.5;\n    }\n    this.changekeysToColors.next();\n  }\n\n\n  public getColor(key: string, externalKeysToColors?: Array<[string, string]>, externalColorsSaturationWeight?: number): string {\n    let colorHex = null;\n    const keysToColors = externalKeysToColors ? externalKeysToColors : this.keysToColors;\n    const saturationWeight = (externalColorsSaturationWeight !== undefined && externalColorsSaturationWeight !== null) ?\n      externalColorsSaturationWeight : this.colorsSaturationWeight;\n    if (keysToColors) {\n      for (let i = 0; i < keysToColors.length; i++) {\n        const keyToColor = keysToColors[i];\n        if (keyToColor[0] === key) {\n          colorHex = keyToColor[1];\n          break;\n        }\n      }\n      if (!colorHex) {\n        colorHex = this.getHexColor(key, saturationWeight);\n      }\n    } else {\n      colorHex = this.getHexColor(key, saturationWeight);\n    }\n    return colorHex;\n  }\n\n  public getTextColor(color: string): string {\n    return tinycolor(color).isDark() ? '#ffffff' : '#000000';\n  }\n\n  /**\n   * updates the color of the given keyword if the keyword exists already. Otherwise it adds the new keyword and the corresponding color\n   * @param keyword\n   * @param color\n   */\n  public updateKeywordColor(keyword: string, color: string): void {\n    const existingColor = this.keysToColorsMap.get(keyword);\n    if (!existingColor) {\n      this.keysToColorsMap.set(keyword, color);\n      this.keysToColors.push([keyword, color]);\n    } else {\n      this.keysToColorsMap.set(keyword, color);\n      /** rebuilt list from scratch */\n      this.keysToColors = [];\n      this.keysToColorsMap.forEach((c, k) => {\n        this.keysToColors.push([k, c]);\n      });\n    }\n    this.changekeysToColors.next();\n  }\n\n  /**\n   * Set the keyToColors list. Updates the keysToColorsMap in order to be up to date with the list\n   */\n  public setKeysToColors(keysToColors: Array<[string, string]>): void {\n    this.keysToColors = keysToColors;\n    this.keysToColorsMap = new Map<string, string>();\n    this.keysToColors.forEach(item => {\n      this.keysToColorsMap.set(item[0], item[1]);\n    });\n    this.changekeysToColors.next();\n  }\n\n  private getHexColor(key: string, saturationWeight: number): string {\n    const text = key.toString() + ':' + key.toString().split('').reverse().join('') + ':' + key.toString();\n    // string to int\n    let hash = 0;\n    for (let i = 0; i < text.length; i++) {\n      hash = text.charCodeAt(i) + ((hash << 5) - hash);\n    }\n    // int to rgb\n    let hex = (hash & 0x00FFFFFF).toString(16).toUpperCase();\n    hex = '00000'.substring(0, 6 - hex.length) + hex;\n    const color = tinycolor.mix(hex, hex);\n    color.lighten(5);\n    const saturation = color.toHsv().s;\n    if (saturation < (1 - saturationWeight) * 100) {\n      const range = (1 - saturationWeight) * 100 - saturation;\n      color.saturate(range);\n    }\n    color.brighten(10);\n    return color.toHexString();\n  }\n\n  private setColorsFromAggregations(): void {\n    this.keysToColorsMap = new Map<string, string>();\n    this.keysToColors.forEach(item => {\n      this.keysToColorsMap.set(item[0], item[1]);\n    });\n    if (this.colorAggregations) {\n      this.colorAggregations.forEach(aggregations => {\n        this.collaborativesearchService.resolveAggregation([projType.aggregate, aggregations], null,\n          this.collaborativesearchService.defaultCollection)\n          .subscribe(agg => {\n            const firstAggregationElements = agg.elements;\n            firstAggregationElements.forEach(element => {\n              if (!this.keysToColorsMap.has(element.key) && element.elements && element.elements.length > 0) {\n                this.keysToColorsMap.set(element.key, element.elements[0].key);\n                this.keysToColors.push([element.key, element.elements[0].key]);\n              }\n            });\n          });\n      });\n    }\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { CollectionReferenceDescription, Configuration } from 'arlas-api';\nimport { from, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { getFieldProperties } from '../../tools/utils';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService, ArlasExploreApi } from '../startup/startup.service';\n\n\n@Injectable()\nexport class ArlasConfigurationDescriptor {\n\n  public fetchOptions = {\n    credentials: 'include'\n  };\n\n  public constructor(\n    private collaborativesearchService: ArlasCollaborativesearchService,\n    private configService: ArlasConfigService,\n  ) { }\n\n  /**\n   * @description Returns an Observable that contains the list of all collections\n   * declared in ARLAS-server (that is configurated in env.js ( serverUrl )\n   */\n  public getAllCollections(): Observable<Array<string>> {\n    return <Observable<Array<string>>>from(this.collaborativesearchService.list(false)).pipe(\n      map(\n        (collections: Array<CollectionReferenceDescription>) => collections.map(\n          (collection: CollectionReferenceDescription) => collection.collection_name\n        )\n          .filter(collection => collection !== 'metacollection')\n      )\n    );\n  }\n\n  /**\n   *\n   * @param types\n   * @description Returns an Observable that contains a list of the fields which types are in `types` param.\n   * If no `types` are specified, then all the fields are returned.\n   */\n  public getFields(types?: Array<string>): Observable<Array<{ label: string; type: string; }>> {\n    const configuration: Configuration = new Configuration();\n    const arlasExploreApi: ArlasExploreApi = new ArlasExploreApi(\n      configuration,\n      this.configService.getValue('arlas.server.url'),\n      window.fetch\n    );\n    this.collaborativesearchService.setExploreApi(arlasExploreApi);\n    return this.collaborativesearchService.describe(this.configService.getValue('arlas.server.collection.name')).pipe(\n      filter(description => description.properties !== undefined),\n      map(description => getFieldProperties(description.properties)),\n      map(fields => types ? fields.filter(field => types.find(type => type === field.type) !== undefined)\n        : fields)\n    );\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MapSettingsService, GeometrySelectModel, OperationSelectModel, GeoQueryOperator } from 'arlas-map';\nimport { ArlasStartupService, ArlasConfigService } from '../startup/startup.service';\nimport { MapContributor } from 'arlas-web-contributors';\nimport { Expression } from 'arlas-api';\nimport { Contributor } from 'arlas-web-core';\n\n@Injectable()\nexport class ArlasMapSettings implements MapSettingsService {\n\n  public mapContributors: MapContributor[] = [];\n\n  public constructor(public startUpService: ArlasStartupService) {\n    this.mapContributors = Array.from(this.startUpService.contributorRegistry.values())\n      .filter((c: Contributor) => c instanceof MapContributor)\n      .map(c => c as MapContributor);\n  }\n\n  public getGeoQueries(): Map<string, [GeometrySelectModel[], OperationSelectModel[], string]> {\n    const geoQueriesMap = new Map<string, [GeometrySelectModel[], OperationSelectModel[], string]>();\n    this.mapContributors.forEach(mc => {\n      const displayCollectionName = !!this.startUpService.collectionsMap.get(mc.collection).display_names?.collection ?\n        this.startUpService.collectionsMap.get(mc.collection).display_names?.collection : mc.collection;\n      geoQueriesMap.set(mc.collection, [this.getFilterGeometries(mc), this.getOperations(mc) , displayCollectionName]);\n    });\n    return geoQueriesMap;\n  }\n\n  private getFilterGeometries(mapContributor: MapContributor): Array<GeometrySelectModel> {\n    const filterGeometries = new Array<GeometrySelectModel>();\n    if (mapContributor) {\n      const geoFields = mapContributor.geoPointFields.concat(mapContributor.geoShapeFields);\n      if (geoFields) {\n        geoFields.forEach(geoField => {\n          filterGeometries.push({\n            path: geoField,\n            selected: geoField === mapContributor.geoQueryField\n          });\n        });\n      }\n    }\n    return filterGeometries;\n  }\n\n  private getOperations(mapContributor: MapContributor): Array<OperationSelectModel> {\n    if (mapContributor) {\n      return [\n        {\n          operation: GeoQueryOperator.WITHIN,\n          selected: Expression.OpEnum.Within === mapContributor.geoQueryOperation\n        },\n        {\n          operation: GeoQueryOperator.NOT_WITHIN,\n          selected: Expression.OpEnum.Notwithin === mapContributor.geoQueryOperation\n        },\n        {\n          operation: GeoQueryOperator.INTERSECTS,\n          selected: Expression.OpEnum.Intersects === mapContributor.geoQueryOperation\n        },\n        {\n          operation: GeoQueryOperator.NOT_INTERSECTS,\n          selected: Expression.OpEnum.Notintersects === mapContributor.geoQueryOperation\n        }\n      ];\n    }\n    return [];\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ComputationRequest, ComputationResponse } from 'arlas-api';\nimport { AbstractArlasMapGL, ArlasLngLatBounds } from 'arlas-map';\nimport { projType } from 'arlas-web-core';\nimport { MapService } from '../../tools/utils';\nimport { ArlasCollaborativesearchService } from '../collaborative-search/arlas.collaborative-search.service';\n\n/**\n * This service provides map methods on ARLAS data\n */\n@Injectable()\nexport class ArlasMapService implements MapService {\n\n  public map: AbstractArlasMapGL;\n\n  public constructor(private readonly collaborativeSearchService: ArlasCollaborativesearchService) {\n  }\n\n  /**\n   * @description zooms to the data extent. If 'map' parameter is not defined, then this function uses the 'map' attribute\n   * @param geoPointField geo-point field used to get the bounding box of the data\n   * @param map Map instance\n   * @param paddingPercentage a percentage of the extent's height and width\n   * that is added as a padding to bbox of data (between 0 and 1). It allows to have some context around data\n   */\n  public zoomToData(collection: string, geoPointField: string, map: AbstractArlasMapGL, paddingPercentage?: number) {\n    const computationRequest: ComputationRequest = {\n      metric: ComputationRequest.MetricEnum.GEOBBOX,\n      field: geoPointField\n    };\n    let mapInstance = map;\n    if (map === null || map === undefined) {\n      mapInstance = this.map;\n    }\n    this.collaborativeSearchService.resolveButNotComputation([projType.compute, computationRequest],\n      this.collaborativeSearchService.collaborations, collection)\n      .subscribe((cr: ComputationResponse) => {\n        if (cr?.geometry) {\n          mapInstance.fitBounds(mapInstance.geometryToBounds(cr.geometry, paddingPercentage) as ArlasLngLatBounds);\n        }\n      });\n  }\n\n  /**\n   *\n   * @param map Map instance\n   */\n  public setMap(map: AbstractArlasMapGL) {\n    this.map = map;\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { HttpClient } from '@angular/common/http';\nexport abstract class WalkthroughLoader {\n\n  public abstract loader(): Promise<any>;\n\n}\n\nexport class BasicWalkthroughLoader extends WalkthroughLoader {\n  public constructor(private http: HttpClient) {\n    super();\n  }\n  public loader(): Promise<any> {\n    return this.http\n      .get('/asset/tour/tour_en.json?' + Date.now())\n      .toPromise();\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n/*\n * Hopscotch is used under Apache License 2.0 : https://github.com/linkedin/hopscotch/blob/master/LICENSE\n */\n\nimport { Injectable } from '@angular/core';\nimport hopscotch from 'hopscotch';\nimport {  WalkthroughLoader } from './walkthrough.utils';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ArlasWalkthroughService {\n\n  public hopscotch: any;\n  public tourData: any;\n  public isActivable = true;\n\n  public constructor(\n    private walkthrougLoader: WalkthroughLoader,\n    private translateService: TranslateService\n\n  ) {\n    this.hopscotch = hopscotch;\n  }\n\n  public load(): void {\n    this.walkthrougLoader.loader()\n      .then(response => {\n        this.tourData = response;\n        if (!this.tourData.steps || this.tourData.steps.length <= 0) {\n          this.isActivable = false;\n        } else {\n          if (this.tourData.onStart) {\n            this.tourData.onStart = new Function(this.tourData.onStart).bind(this);\n          }\n          if (this.tourData.onEnd) {\n            this.tourData.onEnd = new Function(this.tourData.onEnd).bind(this);\n          }\n          if (this.tourData.onStart) {\n            this.tourData.onClose = new Function(this.tourData.onClose).bind(this);\n          }\n          this.tourData.steps.forEach(step => {\n            if (step.onNext) {\n              step.onNext = new Function(step.onNext).bind(this);\n            }\n            if (step.onPrev) {\n              step.onPrev = new Function(step.onPrev).bind(this);\n            }\n            if (step.onShow) {\n              step.onShow = new Function(step.onShow).bind(this);\n            }\n          });\n          this.tourData.showPrevButton = true;\n          this.tourData.i18n = {\n            nextBtn: this.translateService.instant('tour.nextBtn'),\n            prevBtn: this.translateService.instant('tour.prevBtn'),\n            doneBtn: this.translateService.instant('tour.doneBtn'),\n            skipBtn: this.translateService.instant('tour.skipBtn'),\n            closeTooltip: this.translateService.instant('tour.closeTooltip')\n          };\n          this.startTour();\n        }\n      })\n      .catch(error => {\n        console.error(error);\n        this.isActivable = false;\n      });\n  }\n\n  /**\n   *\n   * @param tour\n   */\n  public setTour(tour: { id: string; steps: any[]; }) {\n    this.tourData = tour;\n  }\n\n  /**\n   * Actually starts the tour.\n   * @param stepNum Optional : specifies what step to start at\n   */\n  public startTour(stepNum?: number) {\n    if (localStorage.getItem(this.tourData.id) !== 'end') {\n      if (!localStorage.getItem(this.tourData.id)) {\n        this.hopscotch.startTour(this.tourData);\n      } else if (stepNum) {\n        this.hopscotch.startTour(this.tourData, stepNum);\n        localStorage.setItem(this.tourData.id, stepNum.toString());\n      } else {\n        this.hopscotch.startTour(this.tourData, localStorage.getItem(this.tourData.id));\n      }\n      this.hopscotch.listen('next', () => {\n        localStorage.setItem(this.tourData.id, this.hopscotch.getCurrStepNum());\n      });\n      this.hopscotch.listen('end', () => {\n        localStorage.setItem(this.tourData.id, 'end');\n        this.hopscotch.removeCallbacks();\n      });\n      this.hopscotch.listen('close', () => {\n        localStorage.setItem(this.tourData.id, 'end');\n        this.hopscotch.removeCallbacks();\n      });\n    }\n  }\n\n  /**\n   * Skips to a given step in the tour\n   * @param index\n   */\n  public showStep(index) {\n    this.hopscotch.showStep(index);\n  }\n\n  /**\n   * Goes back one step in the tour\n   */\n  public prevStep() {\n    this.hopscotch.prevStep();\n  }\n\n  /**\n   * Goes forward one step in the tour\n   */\n  public nextStep() {\n    this.hopscotch.nextStep();\n  }\n\n  /**\n   * Ends the current tour.\n   * If clearCookie is set to false, the tour state is preserved.\n   * Otherwise, if clearCookie is set to true or is not provided, the tour state is cleared\n   * @param clearCookie\n   */\n  public endTour(clearCookie?: boolean) {\n    this.hopscotch.endTour(clearCookie);\n  }\n\n  /**\n   * Sets options for running the tour\n   * @param options : see https://linkedin.github.io/hopscotch/#setting-tour-options\n   */\n  public configure(options: any) {\n    this.hopscotch.configure(options);\n  }\n\n  /**\n   * Returns the currently running tour\n   */\n  public getCurrTour() {\n    return this.hopscotch.getCurrTour();\n  }\n\n  /**\n   * Returns the current zero-based step number\n   */\n  public getCurrStepNum() {\n    return this.hopscotch.getCurrStepNum();\n  }\n\n  /**\n   * Adds a callback for one of the event types.\n   * @param eventName Valid event types are: *start*, *end*, *next*, *prev*, *show*, *close*, *error*\n   * @param callback\n   */\n  public listen(eventName: string, callback: () => void) {\n    this.hopscotch.listen(eventName, callback);\n  }\n\n  /**\n   * Removes a callback for one of the event types\n   */\n  public unlisten(eventName: string, callback: () => void) {\n    hopscotch.unlisten(eventName, callback);\n  }\n\n  /**\n   * Remove all callbacks for hopscotch events\n   */\n  public removeCallbacks() {\n    hopscotch.removeCallbacks();\n  }\n\n  /**\n   * Clear localStorage for the given tour\n   * @param tour\n   */\n  public resetTour() {\n    localStorage.removeItem(this.tourData.id);\n    // Hopscotch stores the tour step in the session storage\n    this.endTour(true);\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { ArlasWalkthroughService } from './walkthrough.service';\nimport { BasicWalkthroughLoader, WalkthroughLoader } from './walkthrough.utils';\nimport { HttpClient } from '@angular/common/http';\n\nexport interface WalkthroughModuleConfig {\n  loader?: Provider;\n}\n\n@NgModule({\n\n})\nexport class ArlasWalkthroughModule {\n\n  /**\n   * Use this method in your root module to provide the ColorGeneratorLoader\n   */\n  public static forRoot(config: WalkthroughModuleConfig = {}): ModuleWithProviders<ArlasWalkthroughModule> {\n    return {\n      ngModule: ArlasWalkthroughModule,\n      providers: [\n        config.loader || { provide: WalkthroughLoader, useClass: BasicWalkthroughLoader, deps: [HttpClient] },\n        ArlasWalkthroughService\n      ]\n    };\n  }\n\n  public static forChild(config: WalkthroughModuleConfig = {}): ModuleWithProviders<ArlasWalkthroughModule> {\n    return {\n      ngModule: ArlasWalkthroughModule,\n      providers: [\n        config.loader || { provide: WalkthroughLoader, useClass: BasicWalkthroughLoader, deps: [HttpClient] },\n        ArlasWalkthroughService\n      ]\n    };\n  }\n\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { BBox } from 'geojson';\n\nexport interface Process {\n  id?: string;\n  version?: string;\n  title?: string;\n  description?: string;\n  inputs?: ProcessInputs;\n  additionalParameters?: {\n    parameters: any[];\n  };\n}\n\nexport interface ProcessInputs {\n  [key: string]: ProcessInput;\n}\n\nexport interface ProcessProjection {\n  label: string;\n  value: string;\n  bbox: BBox;\n}\n\n\nexport interface ProcessInput {\n  schema: {\n    type: string;\n    enum?: string[] | ProcessProjection[];\n    format?: string;\n    items?: {\n      type: string;\n      enum?: string[];\n    };\n    required?: boolean;\n  };\n}\n\nexport interface ProcessOutput {\n  processID: 'download' | 'ingest' | 'directory_ingest' | 'enrich' | 'dc3build';\n  type: string;\n  jobID: string;\n  status: ProcessStatus;\n  message: string;\n  created: number;\n  started: number;\n  finished: number;\n  updated: number;\n  progress: number;\n  links: any;\n  resourceID: string;\n}\n\nexport enum ProcessStatus {\n  accepted = 'accepted',\n  running = 'running',\n  successful = 'successful',\n  failed = 'failed',\n  dismissed = 'dismissed'\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Subject, Subscription, takeUntil, timer } from 'rxjs';\nimport { ProcessOutput, ProcessStatus } from '../../tools/process.interface';\nimport { ProcessService } from '../../services/process/process.service';\n\n/** Base data communicated to an AIAS process dialog window */\nexport interface AiasProcessDialogData {\n  nbProducts: number;\n  itemDetail:  Map<string, any>;\n  ids: string[] | null;\n  collection: string;\n}\n\n/** Data for the AIAS Download */\nexport interface AiasDownloadDialogData extends AiasProcessDialogData {\n  wktAoi: string | null;\n}\n\n/** Data for the AIAS Enrich */\nexport type AiasEnrichDialogData = AiasProcessDialogData;\n\nexport abstract class AiasProcess {\n  public processStarted = false;\n  public isProcessing = false;\n  public hasError = false;\n\n  public statusSub!: Subscription;\n  public unsubscribeStatus = new Subject<boolean>();\n  public statusResult: ProcessOutput = null;\n\n  public constructor(\n    protected processService: ProcessService,\n    protected data: AiasProcessDialogData,\n    private processName: string\n  ) { }\n\n  protected abstract preparePayload(): any;\n\n  public submit(): void {\n    this.isProcessing = true;\n    this.processStarted = true;\n    this.hasError = false;\n\n    const payload = this.preparePayload();\n\n    this.processService.process(this.processName, this.data.ids, payload, this.data.collection).subscribe({\n      next: (result) => {\n        this.statusResult = result;\n\n        // Convert time to milliseconds\n        result.created *= 1000;\n        result.started *= 1000;\n        result.finished *= 1000;\n        result.updated *= 1000;\n\n        const executionObservable = timer(0, 5000);\n        this.statusSub = executionObservable.pipe(takeUntil(this.unsubscribeStatus)).subscribe(() => {\n          this.getStatus(result.jobID);\n        });\n      },\n      error: (err) => {\n        this.isProcessing = false;\n        this.hasError = true;\n        console.error(err);\n      }\n    });\n  }\n\n  private getStatus(jobId: string) {\n    this.processService.getJobStatus(this.processName, jobId).subscribe({\n      next: (job) => {\n        this.statusResult = job;\n        if (job.status !== ProcessStatus.accepted && job.status !== ProcessStatus.running) {\n          this.unsubscribeStatus.next(true);\n          this.isProcessing = false;\n        }\n      },\n      error: (err) => {\n        this.unsubscribeStatus.next(true);\n        this.hasError = true;\n        this.isProcessing = false;\n      }\n    });\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ProcessOutput } from '../../../tools/process.interface';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DatePipe, NgIf } from '@angular/common';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n  selector: 'arlas-aias-result',\n  templateUrl: './aias-result.component.html',\n  styleUrls: ['./aias-result.component.scss'],\n  standalone: true,\n  imports: [\n    TranslateModule,\n    DatePipe,\n    MatProgressBarModule,\n    MatDialogModule,\n    MatButtonModule,\n    NgIf\n  ]\n})\nexport class AiasResultComponent implements OnInit {\n\n  @Input() public isProcessing = false;\n\n  @Input() public statusResult: ProcessOutput;\n\n  @Input() public hasError = false;\n\n  @Input() public processName = '';\n\n  @Input() public processAction = '';\n\n  public constructor() { }\n\n  public ngOnInit(): void {\n  }\n\n}\n","<div class=\"process-result\">\n    <mat-progress-bar *ngIf=\"isProcessing\" [mode]=\"'indeterminate'\"></mat-progress-bar>\n    <div *ngIf=\"isProcessing && !!statusResult?.status\" class=\"processing\">\n      <div>{{ processAction | translate }}</div>\n      <div class=\"status status-{{statusResult?.status}}\">{{ statusResult?.status | translate }}</div>\n    </div>\n\n    <div class=\"detail\" *ngIf=\"!isProcessing && !hasError\">\n      <div>\n        <div class=\"prop\">\n          <div class=\"label\">{{ 'Start date' | translate }}:</div>\n          <div class=\"value\">{{ (statusResult?.started ?? '--') | date:'medium' }}</div>\n        </div>\n        <div class=\"prop\">\n          <div class=\"label\">{{ 'End date' | translate }}:</div>\n          <div class=\"value\">{{ (statusResult?.finished ?? '--') | date:'medium' }}</div>\n        </div>\n      </div>\n      <div class=\"status status-{{statusResult?.status}}\">{{ statusResult?.status | translate }}</div>\n    </div>\n\n    <div class=\"error\" *ngIf=\"hasError\">\n      {{ 'processing error occured' | translate:{processingName: (processName | translate)} }}\n    </div>\n\n    <div *ngIf=\"statusResult?.message\" class=\"message\" [class.error]=\"hasError\">\n      {{ statusResult.message | translate }}\n    </div>\n\n    <div class=\"close\">\n      <button mat-dialog-close=\"true\" mat-button>{{ 'Close dialog' | translate }}</button>\n    </div>\n  </div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\nimport { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport bboxPolygon from '@turf/bbox-polygon';\nimport booleanIntersects from '@turf/boolean-intersects';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ProcessService } from '../../../services/process/process.service';\nimport { ProcessInputs, ProcessProjection } from '../../../tools/process.interface';\nimport { AiasDownloadDialogData, AiasProcess } from '../aias-process';\n\nexport const DOWNLOAD_PROCESS_NAME = marker('download');\n\n@Component({\n  selector: 'arlas-aias-download',\n  templateUrl: './aias-download.component.html',\n  styleUrls: ['./aias-download.component.scss', '../aias-process.scss'],\n  providers: [{\n    provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }\n  }]\n})\nexport class AiasDownloadComponent extends AiasProcess implements OnInit, OnDestroy {\n\n  public formGroup: FormGroup = new FormGroup({\n    raw_archive: new FormControl<boolean>(true),\n    crop_wkt: new FormControl<boolean>(false),\n    target_projection: new FormControl<string>(marker('native')),\n    target_format: new FormControl<string>('native')\n  });\n\n  public pictureFormats: Array<string> = [\n    marker('native'),\n    marker('Geotiff'),\n    marker('Jpeg2000')\n  ];\n  public projections: ProcessProjection[] = [];\n\n  public hasAoi = false;\n  public displayAoiForms = false;\n  public displayFormatFrom = false;\n  public displayProjectionFrom = false;\n\n  public tooltipDelay = 2000;\n\n  private _onDestroy$ = new Subject();\n\n  public constructor(\n    protected processService: ProcessService,\n    @Inject(MAT_DIALOG_DATA) protected data: AiasDownloadDialogData\n  ) {\n    super(processService, data, DOWNLOAD_PROCESS_NAME);\n  }\n\n  public ngOnInit(): void {\n    if (this.data.nbProducts === 1){\n      const processConfigFileInput = this.processService.getProcessInputs();\n      this._initPictureFormatList();\n      this._initProjectionList(processConfigFileInput);\n    }\n    this.hasAoi = this.data.wktAoi !== undefined && this.data.wktAoi !== null && this.data.wktAoi !== '';\n    this._listenFormsChanges();\n  }\n\n  public ngOnDestroy(): void {\n    if (!!this.statusSub) {\n      this.statusSub.unsubscribe();\n    }\n    this._onDestroy$.next(true);\n    this._onDestroy$.complete();\n  }\n\n  private _initPictureFormatList(): void{\n    const assetFormatKey = 'properties.main_asset_format';\n    const assetFormatIsValid = this.data.itemDetail && this.data.itemDetail.has(assetFormatKey)\n      && !!this.data.itemDetail.get(assetFormatKey);\n    if (assetFormatIsValid) {\n      const assetFormat = this.data.itemDetail.get(assetFormatKey).toUpperCase();\n      if (assetFormat === 'JPEG2000') {\n        this.pictureFormats = ['Jpeg2000'];\n        this.formGroup.get('target_format').setValue('Jpeg2000');\n      } else if (assetFormat === 'GEOTIFF') {\n        this.pictureFormats = this.pictureFormats.filter(format => format.toUpperCase() !== 'GEOTIFF');\n      }\n    }\n\n    const itemFormatKey = 'properties.item_format';\n    const itemFormatIsValid = this.data.itemDetail && this.data.itemDetail.has(itemFormatKey)\n      && !!this.data.itemDetail.get(itemFormatKey);\n    if (itemFormatIsValid) {\n      const itemFormat = this.data.itemDetail.get(itemFormatKey).toUpperCase();\n      if (itemFormat === 'SAFE') {\n        this.pictureFormats.push(marker('ZARR'));\n      }\n    }\n  }\n\n  private _initProjectionList(projection: ProcessInputs): void {\n    const inputKey = 'target_projection';\n    if (projection[inputKey]) {\n      this.projections = (<ProcessProjection[]>projection[inputKey].schema.enum).filter(projection => {\n        const geoJson = this.data.itemDetail.get('geometry');\n        if(!projection.bbox || !geoJson) {\n          return false;\n        }\n        const feature1 = bboxPolygon(projection.bbox);\n        return booleanIntersects(feature1, geoJson);\n      });\n    }\n    const native: ProcessProjection = {bbox: undefined, label: 'native', value: marker('native')};\n    this.projections.unshift(native);\n  }\n\n  private _listenFormsChanges(): void{\n    this.formGroup.get('raw_archive')\n      .valueChanges\n      .pipe(takeUntil(this._onDestroy$))\n      .subscribe(checked => {\n        this.displayAoiForms = !checked && this.hasAoi;\n        this.displayFormatFrom = !checked &&  this.hasOneItemToDownload();\n        this.displayProjectionFrom = !checked &&  this.hasOneItemToDownload();\n        this.formGroup.get('crop_wkt').setValue(false);\n        if(checked){\n          this.formGroup.get('target_format').setValue('native');\n          this.formGroup.get('target_projection').setValue('native');\n        }\n      });\n\n    this.formGroup.get('crop_wkt')\n      .valueChanges\n      .pipe(takeUntil(this._onDestroy$))\n      .subscribe(checked => {\n        this.displayFormatFrom = !this.downloadAllElements() &&  this.hasOneItemToDownload();\n        this.displayProjectionFrom =  !this.downloadAllElements() && !checked &&  this.hasOneItemToDownload();\n        if(checked){\n          this.formGroup.get('target_projection').setValue('native');\n        }\n      });\n  }\n\n  public hasOneItemToDownload(): boolean{\n    return this.data.nbProducts === 1;\n  }\n\n  public downloadAllElements(): boolean {\n    return this.formGroup.get('raw_archive').value;\n  }\n\n  protected preparePayload() {\n    const payload = this.formGroup.value;\n    payload['crop_wkt'] = '';\n    if(this.formGroup.get('crop_wkt').value === true && this.hasAoi){\n      payload['crop_wkt'] = this.data.wktAoi;\n    }\n\n    return payload;\n  }\n}\n","<div mat-dialog-title>\n  {{ 'Download' | translate }}\n  <div class=\"sub-title\"\n    [translate]=\"(data.nbProducts >= 2) ? 'Download more products' : 'Download one product'\" [translateParams]=\"{value: data.nbProducts}\">\n  </div>\n</div>\n<div mat-dialog-content>\n  <mat-stepper [linear]=\"true\">\n    <mat-step [stepControl]=\"formGroup\" [editable]=\"!processStarted\" label=\"{{'Parameters' | translate}}\"\n              state=\"params\">\n      <div class=\"step\">\n        <form [formGroup]=\"formGroup\" class=\"form\">\n          <section class=\"field\">\n            <mat-form-field class=\"field\" appearance=\"outline\">\n              <mat-label>{{ 'Download type' | translate }}</mat-label>\n              <mat-select [formControlName]=\"'raw_archive'\" class=\"data-cy-target_format\">\n                <mat-option [value]=\"true\">{{ (data.nbProducts >= 2) ? ('Download archives' | translate) : ('Download archive' | translate)  }}</mat-option>\n                <mat-option [value]=\"false\">{{ (data.nbProducts >= 2) ? ('Download images' | translate) : ('Download image' | translate)  }}</mat-option>\n              </mat-select>\n              <mat-hint *ngIf=\"formGroup.get('raw_archive').value\" class=\"warning-text\">\n                <mat-icon>warning</mat-icon>\n                <span>{{ 'No cropping possible' | translate }}</span>\n              </mat-hint>\n            </mat-form-field>\n          </section>\n          <section *ngIf=\"displayAoiForms\" class=\"field\">\n            <mat-checkbox [formControlName]=\"'crop_wkt'\">{{ 'Crop using the geographical filter' | translate }}\n            </mat-checkbox>\n          </section>\n          <mat-form-field *ngIf=\"displayProjectionFrom\" class=\"field\" appearance=\"outline\"\n                          matTooltip=\"{{'Coordinate system for the downloaded products' | translate}}\"\n                          [matTooltipShowDelay]=\"tooltipDelay\"\n                          [matTooltipPosition]=\"'before'\">\n            <mat-label>{{ 'Coordinate system' | translate }}</mat-label>\n            <mat-select [formControlName]=\"'target_projection'\" class=\"data-cy-target_projection\">\n              <mat-option *ngFor=\"let opt of projections\" [value]=\"opt?.value\">{{ opt?.label  | translate }}\n              </mat-option>\n            </mat-select>\n            <mat-hint [align]=\"'end'\">{{ 'Coordinate system for the downloaded products' | translate }}</mat-hint>\n          </mat-form-field>\n\n          <mat-form-field *ngIf=\"displayFormatFrom\" class=\"field\" appearance=\"outline\"\n                          matTooltip=\"{{'Format of downloaded products' | translate}}\"\n                          [matTooltipShowDelay]=\"tooltipDelay\"\n                          [matTooltipPosition]=\"'before'\">\n            <mat-label>{{ 'Format' | translate }}</mat-label>\n            <mat-select [formControlName]=\"'target_format'\" class=\"data-cy-target_format\">\n              <mat-option *ngFor=\"let opt of pictureFormats\" [value]=\"opt\">{{ opt | translate }}</mat-option>\n            </mat-select>\n            <mat-hint [align]=\"'end'\">{{ 'Format of downloaded products' | translate }}</mat-hint>\n          </mat-form-field>\n        </form>\n        <div class=\"buttons\">\n          <button mat-flat-button mat-dialog-close>{{ 'Cancel' | translate }}</button>\n          <button [color]=\"'primary'\" matStepperNext mat-flat-button [disabled]=\"!formGroup.valid\">\n            {{ 'Next' | translate }}\n          </button>\n        </div>\n      </div>\n    </mat-step>\n    <mat-step label=\"{{'Summary' | translate}}\" class=\"step\" state=\"summary\">\n      <div class=\"step\">\n        <div class=\"summary\">\n          <div class=\"infos\">\n            <span\n              [translate]=\"(data.nbProducts >= 2) ? 'You are about to download more products' : 'You are about to download one product'\"\n              [translateParams]=\"{value: data.nbProducts}\"\n            ></span>\n            <span class=\"infos-subtitle\">{{ 'Summary of parameters' | translate }} :</span>\n          </div>\n\n          <div class=\"params\">\n            <span class=\"label\">{{ 'Download type' | translate }} :</span>\n            <span class=\"value\">{{ (formGroup.get('raw_archive').value) ? ('Archive' | translate) : ('Image' | translate) }}</span>\n          </div>\n\n          <div class=\"params\" *ngIf=\"formGroup.get('target_projection').value\">\n            <span class=\"label\">{{ 'Coordinate system for the downloaded products' | translate }} :</span>\n            <span class=\"value\">{{ formGroup.get('target_projection').value | translate }}</span>\n          </div>\n\n          <div class=\"params\" *ngIf=\"formGroup.get('target_format').value\">\n            <span class=\"label\">{{ 'Format of the products to download' | translate }} :</span>\n            <span class=\"value\">{{ formGroup.get('target_format').value | translate }}</span>\n          </div>\n          <div class=\"params\" *ngIf=\"formGroup.get('crop_wkt').value\">\n            <span class=\"label\">{{ 'Crop using the geographical filter'| translate }} :</span>\n            <span class=\"value\" *ngIf=\"formGroup.get('crop_wkt').value\">{{ 'yes' | translate }}</span>\n            <span class=\"value\" *ngIf=\"!formGroup.get('crop_wkt').value\">{{ 'no' | translate }}</span>\n          </div>\n        </div>\n        <div class=\"buttons\" *ngIf=\"!isProcessing && !processStarted\">\n          <button mat-flat-button mat-button matStepperPrevious>{{ 'Previous' | translate }}</button>\n          <button [color]=\"'primary'\" [disabled]=\"isProcessing || !formGroup.valid \" matStepperNext mat-flat-button\n                  (click)=\"submit()\">\n            {{ 'Download' | translate }}\n          </button>\n        </div>\n      </div>\n    </mat-step>\n\n    <!-- Icon overrides. -->\n    <ng-template matStepperIcon=\"params\">\n      <mat-icon>settings</mat-icon>\n    </ng-template>\n    <ng-template matStepperIcon=\"summary\">\n      <mat-icon>summarize</mat-icon>\n    </ng-template>\n    <ng-template matStepperIcon=\"edit\">\n      <mat-icon>check</mat-icon>\n    </ng-template>\n  </mat-stepper>\n\n  <arlas-aias-result *ngIf=\"processStarted\" [isProcessing]=\"isProcessing\"\n    [statusResult]=\"statusResult\" [hasError]=\"hasError\"\n    [processName]=\"'Download' | marker\" [processAction]=\"'Downloading...' | marker\"></arlas-aias-result>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { ProcessService } from '../../../services/process/process.service';\nimport { AiasEnrichDialogData, AiasProcess } from '../aias-process';\n\nexport const ENRICH_PROCESS_NAME = marker('enrich');\n\n@Component({\n  selector: 'arlas-aias-enrich',\n  templateUrl: './aias-enrich.component.html',\n  styleUrls: ['./aias-enrich.component.scss', '../aias-process.scss'],\n  providers: [{\n    provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }\n  }]\n})\nexport class AiasEnrichComponent extends AiasProcess implements OnInit {\n\n  public enrichments: Array<string> = [\n    marker('cog')\n  ];\n\n  public formGroup = new FormGroup({\n    asset_type: new FormControl<string>(this.enrichments[0])\n  });\n\n  public constructor(\n    protected processService: ProcessService,\n    @Inject(MAT_DIALOG_DATA) protected data: AiasEnrichDialogData\n  ) {\n    super(processService, data, ENRICH_PROCESS_NAME);\n  }\n\n  public ngOnInit(): void {\n    this._initEnrichmentsList();\n  }\n\n  private _initEnrichmentsList(): void {\n    const itemFormatKey = 'properties.item_format';\n    const itemFormatIsValid = this.data.itemDetail && this.data.itemDetail.has(itemFormatKey)\n      && !!this.data.itemDetail.get(itemFormatKey);\n    if (itemFormatIsValid) {\n      const itemFormat = this.data.itemDetail.get(itemFormatKey).toUpperCase();\n      if (itemFormat === 'SAFE') {\n        this.enrichments = [marker('cog')];\n      }\n    }\n  }\n\n  protected preparePayload() {\n    return this.formGroup.value;\n  }\n}\n","<div mat-dialog-title>\n  {{ 'Enrich' | translate }}\n  <div class=\"sub-title\">\n    {{ 'Enrich products' | translate}}\n  </div>\n</div>\n\n<div mat-dialog-content>\n    <mat-stepper [linear]=\"true\">\n        <mat-step [stepControl]=\"formGroup\" [editable]=\"!processStarted\"\n            [label]=\"'Parameters' | translate\" state=\"params\">\n            <div class=\"step\">\n                <form [formGroup]=\"formGroup\" class=\"form\">\n                    <section class=\"field\">\n                        <mat-form-field class=\"field\" appearance=\"outline\">\n                          <mat-label>{{ 'Enrichment type' | translate }}</mat-label>\n                          <mat-select [formControlName]=\"'asset_type'\">\n                            <mat-option *ngFor=\"let e of enrichments\" [value]=\"e\">\n                                {{ e | translate }}</mat-option>\n                          </mat-select>\n                        </mat-form-field>\n                    </section>\n                </form>\n\n                <div class=\"buttons\">\n                    <button mat-flat-button mat-dialog-close>{{ 'Cancel' | translate }}</button>\n                    <button [color]=\"'primary'\" matStepperNext mat-flat-button [disabled]=\"!formGroup.valid\">\n                      {{ 'Next' | translate }}\n                    </button>\n                </div>\n            </div>\n        </mat-step>\n\n        <mat-step label=\"{{'Summary' | translate}}\" class=\"step\" state=\"summary\">\n            <div class=\"step\">\n                <div class=\"summary\">\n                    <div class=\"infos\">\n                        <span>{{ data.nbProducts >= 2\n                            ? ('You are about to enrich multiple products' | translate:{value: data.nbProducts})\n                            : ('You are about to enrich one product' | translate) }}</span>\n                        <span class=\"infos-subtitle\">{{ 'Summary of parameters' | translate }} :</span>\n                    </div>\n\n                    <div class=\"params\">\n                        <span class=\"label\">{{ 'Enrichment type' | translate }} :</span>\n                        <span class=\"value\">{{ formGroup.get('asset_type').value | translate }}</span>\n                    </div>\n                </div>\n                <div class=\"buttons\" *ngIf=\"!isProcessing && !processStarted\">\n                    <button mat-flat-button mat-button matStepperPrevious>{{ 'Previous' | translate }}</button>\n                    <button [color]=\"'primary'\" [disabled]=\"isProcessing || !formGroup.valid \" matStepperNext mat-flat-button\n                            (click)=\"submit()\">\n                        {{ 'Enrich' | translate }}\n                    </button>\n                </div>\n            </div>\n        </mat-step>\n\n        <!-- Icon overrides -->\n        <ng-template matStepperIcon=\"params\">\n            <mat-icon>settings</mat-icon>\n        </ng-template>\n        <ng-template matStepperIcon=\"summary\">\n            <mat-icon>summarize</mat-icon>\n        </ng-template>\n        <ng-template matStepperIcon=\"edit\">\n            <mat-icon>check</mat-icon>\n        </ng-template>\n    </mat-stepper>\n\n  <arlas-aias-result *ngIf=\"processStarted\" [isProcessing]=\"isProcessing\"\n    [statusResult]=\"statusResult\" [hasError]=\"hasError\"\n    [processName]=\"'Enrich' | marker\" [processAction]=\"'Enriching...' | marker\"></arlas-aias-result>\n</div>","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport en from 'arlas-web-components/assets/i18n/en.json';\nimport es from 'arlas-web-components/assets/i18n/es.json';\nimport fr from 'arlas-web-components/assets/i18n/fr.json';\nimport enMap from 'arlas-map/assets/i18n/en.json';\nimport esMap from 'arlas-map/assets/i18n/es.json';\nimport frMap from 'arlas-map/assets/i18n/fr.json';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport class CustomTranslateLoader implements TranslateLoader {\n\n  public constructor(private readonly http: HttpClient) { }\n\n  public getTranslation(lang: string): Observable<any> {\n    const apiAddress = 'assets/i18n/' + lang + '.json?' + Date.now();\n    return new Observable(observer => {\n      this.http.get(apiAddress).subscribe(\n        res => {\n          let merged = res;\n          // Properties in res will overwrite those in fr.\n          if (lang === 'fr') {\n            merged = { ...fr, ...frMap, ...res };\n          } else if (lang === 'en') {\n            merged = { ...en, ...enMap, ...res };\n          } else if (lang === 'es') {\n            merged = { ...es, ...esMap, ...res };\n          }\n          observer.next(merged);\n          observer.complete();\n        },\n        error => {\n          // failed to retrieve requested language file, use default\n          observer.complete(); // => Default language is already loaded\n        }\n      );\n    });\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\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 { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\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 { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatStepperModule } from '@angular/material/stepper';\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 { MarkerModule } from '@colsen1991/ngx-translate-extract-marker/extras';\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';\nimport { OwlMomentDateTimeModule } from '@danielmoncada/angular-datetime-picker-moment-adapter';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { ArlasMapModule, } from 'arlas-map';\nimport {\n  BaseCollectionService,\n  CalendarTimelineModule,\n  CollectionModule,\n  ColorGeneratorLoader,\n  ColorGeneratorModule,\n  DonutModule,\n  FormatNumberModule,\n  GetCollectionDisplayModule,\n  GetCollectionUnitModule,\n  GetFieldDisplayModule,\n  HistogramModule,\n  MetricModule,\n  MetricsTableModule,\n  PowerbarsModule,\n  ResultsModule\n} from 'arlas-web-components';\nimport { MarkdownModule } from 'ngx-markdown';\nimport { NgxSpinnerModule } from 'ngx-spinner';\nimport { AdmonitionCardComponent } from './components/admonition-card/admonition-card.component';\nimport { AiasDownloadComponent } from './components/aias/aias-download/aias-download.component';\nimport { AiasEnrichComponent } from './components/aias/aias-enrich/aias-enrich.component';\nimport { AiasResultComponent } from './components/aias/aias-result/aias-result.component';\nimport { AnalyticsBoardComponent } from './components/analytics/analytics-board/analytics-board.component';\nimport { AnalyticsMenuComponent } from './components/analytics/analytics-menu/analytics-menu.component';\nimport { AoiComponent } from './components/aoi/aoi.component';\nimport { BookmarkMenuComponent } from './components/bookmark-menu/bookmark-menu.component';\nimport { BookmarkAddDialogComponent } from './components/bookmark/bookmark-add-dialog.component';\nimport { BookmarkComponent } from './components/bookmark/bookmark.component';\nimport {\n  CalendarTimelineTooltipOverlayComponent\n} from './components/calendar-timeline-tooltip-overlay/calendar-timeline-tooltip-overlay.component';\nimport { CalendarTimelineToolComponent } from './components/calendar-timeline/calendar-timeline.component';\nimport { ActionModalModule } from './components/config-manager/action-modal/action-modal.module';\nimport { ConfigMenuModule } from './components/config-manager/config-menu/config-menu.module';\nimport { ConfirmModalComponent } from './components/confirm-modal/confirm-modal.component';\nimport { DeniedAccessDialogComponent } from './components/denied-access-dialog/denied-access-dialog.component';\nimport { DonutTooltipOverlayComponent } from './components/donut-tooltip-overlay/donut-tooltip-overlay.component';\nimport { DownloadComponent, DownloadDialogComponent } from './components/download/download.component';\nimport { ExtendComponent } from './components/extend/extend.component';\nimport { FilterShortcutChipComponent } from './components/filter-shortcut/chip/chip.component';\nimport { FilterShortcutComponent } from './components/filter-shortcut/filter-shortcut.component';\nimport {\n  ShortcutFiltersHandlerComponent\n} from './components/filter-shortcut/filters-handler/filters-handler.component';\nimport {\n  FiltersComponent,\n  GetCollaborationIconPipe,\n  GetColorFilterPipe,\n  GetContributorLabelPipe,\n  GetGlobalColorFilterPipe,\n  IsCollabOnCollectionPipe\n} from './components/filters/filters.component';\nimport {\n  HistogramTooltipOverlayComponent\n} from './components/histogram-tooltip-overlay/histogram-tooltip-overlay.component';\nimport { HistogramWidgetComponent } from './components/histogram-widget/histogram-widget.component';\nimport { LanguageSwitcherComponent } from './components/language-switcher/language-switcher.component';\nimport {\n  PermissionsCreatorDialogComponent\n} from './components/permissions-creator/permissions-creator-dialog/permissions-creator-dialog.component';\nimport { PermissionsCreatorComponent } from './components/permissions-creator/permissions-creator.component';\nimport { ProgressSpinnerComponent } from './components/progress-spinner/progress-spinner.component';\nimport { ReconnectDialogComponent } from './components/reconnect-dialog/reconnect-dialog.component';\nimport { SearchComponent, SearchDialogComponent } from './components/search/search.component';\nimport { ExcludeTypePipe } from './components/share/exclude-type.pipe';\nimport { ShareComponent, ShareDialogComponent } from './components/share/share.component';\nimport { DatePickerComponent } from './components/timeline/date-picker/date-picker.component';\nimport { TimelineShortcutComponent } from './components/timeline/timeline-shortcut/timeline-shortcut.component';\nimport { TimelineComponent } from './components/timeline/timeline/timeline.component';\nimport { AboutComponent, AboutDialogComponent } from './components/top-menu/about/about.component';\nimport { LinkComponent } from './components/top-menu/links/link/link.component';\nimport { LinksComponent } from './components/top-menu/links/links.component';\nimport { TopMenuComponent } from './components/top-menu/top-menu.component';\nimport { UserInfosComponent } from './components/user-infos/user-infos.component';\nimport { WidgetComponent } from './components/widget/widget.component';\nimport { ContributorUpdatingPipe } from './pipes/contributor-updating.pipe';\nimport { GetTimeLabelPipe } from './pipes/get-time-label.pipe';\nimport { ArlasCollaborativesearchService } from './services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasCollectionService } from './services/collection/arlas-collection.service';\nimport { ArlasOverlayService } from './services/overlays/overlay.service';\nimport { ArlasConfigService, ArlasStartupService } from './services/startup/startup.service';\nimport { ArlasWalkthroughModule } from './services/walkthrough/walkthrough.module';\nimport { ArlasColorGeneratorLoader } from './tools/color-generator-loader';\nimport { CustomTranslateLoader } from './tools/Translation/custom-translate-loader';\n\n\n@NgModule({\n  exports: [\n    AnalyticsBoardComponent,\n    AnalyticsMenuComponent,\n    AoiComponent,\n    BookmarkComponent,\n    BookmarkAddDialogComponent,\n    BookmarkMenuComponent,\n    CalendarTimelineToolComponent,\n    ConfirmModalComponent,\n    DatePickerComponent,\n    DownloadComponent,\n    DownloadDialogComponent,\n    ExcludeTypePipe,\n    ExtendComponent,\n    FiltersComponent,\n    GetTimeLabelPipe,\n    LanguageSwitcherComponent,\n    LinkComponent,\n    PermissionsCreatorComponent,\n    PermissionsCreatorDialogComponent,\n    SearchComponent,\n    SearchDialogComponent,\n    ShareComponent,\n    ShareDialogComponent,\n    TimelineComponent,\n    TimelineShortcutComponent,\n    HistogramWidgetComponent,\n    ProgressSpinnerComponent,\n    UserInfosComponent,\n    ReconnectDialogComponent,\n    DeniedAccessDialogComponent,\n    HistogramTooltipOverlayComponent,\n    CalendarTimelineTooltipOverlayComponent,\n    DonutTooltipOverlayComponent,\n    WidgetComponent,\n    FilterShortcutComponent,\n    FilterShortcutChipComponent,\n    ShortcutFiltersHandlerComponent,\n    TopMenuComponent,\n    AboutComponent,\n    AboutDialogComponent,\n    LinksComponent,\n    LinkComponent\n  ],\n  declarations: [\n    AnalyticsBoardComponent,\n    AnalyticsMenuComponent,\n    AoiComponent,\n    LinksComponent,\n    BookmarkComponent,\n    BookmarkAddDialogComponent,\n    BookmarkMenuComponent,\n    CalendarTimelineToolComponent,\n    ConfirmModalComponent,\n    DatePickerComponent,\n    DownloadComponent,\n    DownloadDialogComponent,\n    ExcludeTypePipe,\n    ExtendComponent,\n    FiltersComponent,\n    GetTimeLabelPipe,\n    GetColorFilterPipe,\n    GetGlobalColorFilterPipe,\n    GetCollaborationIconPipe,\n    IsCollabOnCollectionPipe,\n    GetContributorLabelPipe,\n    LinkComponent,\n    LanguageSwitcherComponent,\n    LinkComponent,\n    PermissionsCreatorComponent,\n    PermissionsCreatorDialogComponent,\n    SearchComponent,\n    SearchDialogComponent,\n    ShareComponent,\n    ShareDialogComponent,\n    TimelineComponent,\n    TimelineShortcutComponent,\n    HistogramWidgetComponent,\n    ProgressSpinnerComponent,\n    UserInfosComponent,\n    ReconnectDialogComponent,\n    DeniedAccessDialogComponent,\n    HistogramTooltipOverlayComponent,\n    CalendarTimelineTooltipOverlayComponent,\n    DonutTooltipOverlayComponent,\n    WidgetComponent,\n    FilterShortcutComponent,\n    FilterShortcutChipComponent,\n    ShortcutFiltersHandlerComponent,\n    TopMenuComponent,\n    AboutComponent,\n    AboutDialogComponent,\n    AiasDownloadComponent,\n    ContributorUpdatingPipe,\n    AiasEnrichComponent\n  ],\n  imports: [\n    ActionModalModule,\n    CommonModule,\n    DonutModule,\n    CalendarTimelineModule,\n    DragDropModule,\n    FormsModule,\n    HistogramModule,\n    MetricModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatCardModule,\n    MatCheckboxModule,\n    MatChipsModule,\n    MatDialogModule,\n    MatExpansionModule,\n    MatIconModule,\n    MatInputModule,\n    MatListModule,\n    MatProgressBarModule,\n    MatRadioModule,\n    MatFormFieldModule,\n    MatPaginatorModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatSelectModule,\n    MetricsTableModule,\n    MatSnackBarModule,\n    MatStepperModule,\n    MatTableModule,\n    MatDividerModule,\n    MatTabsModule,\n    MatTooltipModule,\n    MatToolbarModule,\n    MatMenuModule,\n    OwlDateTimeModule,\n    OwlNativeDateTimeModule,\n    OwlMomentDateTimeModule,\n    PowerbarsModule,\n    ReactiveFormsModule,\n    ResultsModule,\n    ConfigMenuModule,\n    ScrollingModule,\n    FormatNumberModule,\n    NgxSpinnerModule,\n    ArlasMapModule,\n    CollectionModule.forRoot({\n      loader: {\n        deps: [\n          ArlasCollaborativesearchService,\n          ArlasConfigService,\n          ArlasStartupService\n        ],\n        provide: BaseCollectionService,\n        useClass: ArlasCollectionService\n      }\n    }),\n    ColorGeneratorModule.forRoot({\n      loader: {\n        provide: ColorGeneratorLoader,\n        useClass: ArlasColorGeneratorLoader,\n        deps: [ArlasConfigService, ArlasCollaborativesearchService]\n      }\n    }),\n    TranslateModule.forRoot({\n      loader: {\n        provide: TranslateLoader,\n        useClass: CustomTranslateLoader,\n        deps: [HttpClient]\n      }\n    }),\n    ArlasWalkthroughModule.forRoot(),\n    MarkdownModule.forRoot(),\n    GetCollectionUnitModule,\n    GetCollectionDisplayModule,\n    GetFieldDisplayModule,\n    AdmonitionCardComponent,\n    MarkerModule,\n    AiasResultComponent\n  ],\n  providers: [\n    ArlasOverlayService,\n    ArlasCollectionService,\n    provideHttpClient(withInterceptorsFromDi())\n  ]})\nexport class ArlasToolkitSharedModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { forwardRef, Injectable, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\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 { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { TagComponent, TagDialogComponent, TagManagementDialogComponent } from './components/tag/tag.component';\nimport { ArlasTagService } from './services/tag/tag.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CustomTranslateLoader implements TranslateLoader {\n\n  public constructor(private http: HttpClient) { }\n\n  public getTranslation(lang: string): Observable<any> {\n    const apiAddress = 'assets/i18n/' + lang + '.json?' + Date.now();\n    return Observable.create(observer => {\n      this.http.get(apiAddress).subscribe(\n        res => {\n          observer.next(res);\n          observer.complete();\n        },\n        error => {\n          // failed to retrieve requested language file, use default\n          observer.complete(); // => Default language is already loaded\n        }\n      );\n    });\n  }\n}\n\n@NgModule({\n  declarations: [\n    TagComponent,\n    TagDialogComponent,\n    TagManagementDialogComponent\n  ],\n  imports: [\n    BrowserModule,\n    BrowserAnimationsModule,\n    CommonModule,\n    FormsModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatDialogModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    MatOptionModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatRadioModule,\n    MatSelectModule,\n    MatSnackBarModule,\n    MatTableModule,\n    MatTooltipModule,\n    ReactiveFormsModule,\n    TranslateModule.forRoot({\n      loader: {\n        provide: TranslateLoader,\n        useClass: CustomTranslateLoader,\n        deps: [HttpClient]\n      }\n    })\n  ],\n  exports: [\n    TagComponent\n  ],\n  providers: [\n    forwardRef(() => ArlasTagService)\n  ],\n  bootstrap: []\n})\nexport class ArlasTaggerModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { LoginData } from 'arlas-iam-api';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\nimport { finalize } from 'rxjs';\nimport { NOT_CONFIGURED } from '../../tools/utils';\nimport { ErrorService } from '../../services/error/error.service';\n\n@Component({\n  selector: 'arlas-login',\n  templateUrl: './login.component.html',\n  styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent implements OnInit {\n\n  public showPassword = false;\n  public loginForm: FormGroup;\n  public isLoading = false;\n  public showPage = false;\n  public displayNoAccount = false;\n\n  public constructor(\n    private formBuilder: FormBuilder,\n    private iamService: ArlasIamService,\n    private settingsService: ArlasSettingsService,\n    private errorService: ErrorService,\n    private router: Router\n  ) {}\n\n\n  public ngOnInit(): void {\n    this.errorService.closeAll();\n    const authSettings = this.settingsService.getAuthentSettings();\n    this.displayNoAccount = authSettings.sign_up_enabled;\n    this.showPage = false;\n    this.iamService.refresh().pipe(finalize(() => this.showPage = true)).subscribe({\n      next: (loginData: LoginData) => {\n        this.iamService.user = loginData.user;\n        this.iamService.setHeadersFromAccesstoken(loginData.access_token);\n        this.iamService.notifyTokenRefresh(loginData);\n        localStorage.removeItem('arlas-logout-event');\n        if (!!this.iamService.reloadState) {\n          this.iamService.consumeReloadState();\n        } else {\n          if (!!authSettings && authSettings.redirect_uri && authSettings.redirect_uri !== NOT_CONFIGURED) {\n            window.open(authSettings.redirect_uri, '_self');\n          } else {\n            this.router.navigate(['/']);\n          }\n        }\n      },\n      error: () => {\n        this.iamService.logoutWithoutRedirection$().pipe(\n          finalize(() => this.errorService.closeAll())\n        ).subscribe();\n\n      }\n    });\n\n    this.loginForm = this.formBuilder.group({\n      email: ['', Validators.required],\n      password: ['', [Validators.required]]\n    });\n  }\n\n  public onSubmit(): void {\n    this.isLoading = true;\n    this.iamService.login(this.loginForm.get('email').value, this.loginForm.get('password').value).subscribe({\n      next: loginData => {\n        this.iamService.user = loginData.user;\n        this.iamService.setHeadersFromAccesstoken(loginData.access_token);\n        this.iamService.notifyTokenRefresh(loginData);\n        this.iamService.startRefreshTokenTimer(loginData);\n        localStorage.removeItem('arlas-logout-event');\n        const authSettings = this.settingsService.getAuthentSettings();\n        if (!!this.iamService.reloadState) {\n          this.iamService.consumeReloadState();\n        } else {\n          if (!!authSettings && authSettings.redirect_uri && authSettings.redirect_uri !== NOT_CONFIGURED) {\n            window.open(authSettings.redirect_uri, '_self');\n          } else {\n            this.router.navigate(['/']);\n          }\n        }\n        this.isLoading = false;\n      },\n      error: () => {\n        this.errorService.closeAll();\n        this.iamService.logoutWithoutRedirection$().pipe(\n          finalize(() => {\n            this.loginForm.setErrors({\n              wrong: true\n            });\n            this.isLoading = false;\n          })\n        ).subscribe();\n\n      }\n    }\n\n    );\n  }\n\n}\n","<div class=\"container\" *ngIf=\"showPage; else connecting\">\n  <div class=\"login-form text-center\" style=\"align-items: center;\">\n    <div>\n      <div class=\"title\">\n        <h2>ARLAS - {{'Sign in' | translate}}</h2>\n      </div>\n      <div>\n        <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSubmit()\">\n          <div class=\"form-content\">\n            <mat-form-field appearance=\"outline\">\n              <mat-label>{{'Email' | translate}}</mat-label>\n              <input matInput type=\"email\" name=\"email\" formControlName=\"email\">\n              <mat-icon matPrefix>mail_outline</mat-icon>\n              <mat-error *ngIf=\"loginForm.hasError('required', 'email')\">\n                {{'Email is required' | translate}}\n              </mat-error>\n            </mat-form-field>\n            <mat-form-field appearance=\"outline\">\n              <mat-label>{{ 'Password' | translate}}</mat-label>\n              <input matInput type=\"{{ showPassword ? 'text' : 'password' }}\" formControlName=\"password\">\n              <mat-icon matPrefix>vpn_key</mat-icon>\n              <mat-icon (click)=\"showPassword = !showPassword\" style=\"cursor: pointer;\" matSuffix>{{showPassword ?\n                'visibility' : 'visibility_off'}}</mat-icon>\n              <mat-error *ngIf=\"loginForm.hasError('required', 'password')\">\n                {{ 'Please enter your password' | translate}}\n              </mat-error>\n            </mat-form-field>\n            <div class=\"forgot\">\n              <a routerLink=\"/password_forgot\">{{ 'Forgot password?' | translate}}</a>\n            </div>\n          </div>\n          <div class=\"error\" *ngIf=\"loginForm.getError('wrong')\">\n            {{ 'Login or password invalid' | translate}}\n          </div>\n          <div class=\"buttons\">\n            <button type=\"submit\" class=\"login-button\" [class.spinner]=\"isLoading\" [disabled]=\"this.loginForm.invalid || isLoading\" mat-flat-button\n              color=\"primary\">{{ 'Login' | translate}}</button>\n\n          </div>\n          <div *ngIf=\"displayNoAccount\" class=\"no-account\">\n            {{'No Account?' | translate}}\n            <button mat-button type=\"button\" [routerLink]=\"'/register'\">{{ 'Sign up' | translate}}</button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</div>\n<ng-template #connecting>\n  <div class=\"empty_mode\">\n    <img class=\"gif\" src=\"assets/spinner.gif\">\n  </div>\n</ng-template>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, FormGroupDirective, Validators } from '@angular/forms';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\n\n@Component({\n  selector: 'arlas-tool-register',\n  templateUrl: './register.component.html',\n  styleUrls: ['./register.component.css']\n})\nexport class RegisterComponent implements OnInit {\n\n  public signUpForm: FormGroup;\n  public validated = false;\n  public displayForm = true;\n  public allowRegister = false;\n\n  public constructor(\n    private formBuilder: FormBuilder,\n    private iamService: ArlasIamService,\n    private settingsService: ArlasSettingsService,\n\n  ) { }\n\n  public ngOnInit(): void {\n    const authSettings = this.settingsService.getAuthentSettings();\n    this.allowRegister = authSettings.sign_up_enabled;\n    if (this.allowRegister) {\n      this.signUpForm = this.formBuilder.group({\n        email: ['', [Validators.required, Validators.email, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\\\\.[a-z]{2,4}$')]]\n      });\n    }\n  }\n\n  public onSubmit(formDirective: FormGroupDirective) {\n    this.validated = false;\n    this.iamService.signUp(this.signUpForm.get('email').value).subscribe({\n      next: () => {\n        formDirective.resetForm();\n        this.signUpForm.reset();\n        this.displayForm = false;\n        this.validated = true;\n      },\n      error: err => {\n        this.signUpForm.setErrors({\n          alreadyExist: true\n        });\n      }\n    });\n  }\n\n}\n","<div class=\"container\">\n  <div class=\"sign-up-form text-center\" style=\"align-items: center;\">\n    <div>\n      <div class=\"title\">\n        <h2>ARLAS - {{'Sign up' | translate}}</h2>\n      </div>\n      <div *ngIf=\"allowRegister; else notAllowed\">\n        <div class=\"subtitle\">\n          {{'It\\'s quick and easy !' | translate}}\n          <br />\n          {{'Just enter your email' | translate}}\n        </div>\n        <form [formGroup]=\"signUpForm\" (ngSubmit)=\"onSubmit(formDirective)\" #formDirective=\"ngForm\">\n          <div class=\"form-content\" *ngIf=\"displayForm\">\n            <mat-form-field appearance=\"outline\">\n              <mat-label>{{'Email' | translate}}</mat-label>\n              <input matInput type=\"email\" formControlName=\"email\">\n              <mat-error *ngIf=\"signUpForm.hasError('required', 'email')\">\n                {{'Email is required' | translate}}\n              </mat-error>\n              <mat-error *ngIf=\"signUpForm.hasError('pattern', 'email')\">\n                {{'Email must be a valid email address' | translate}}\n              </mat-error>\n            </mat-form-field>\n            <div class=\"terms\">\n              {{'By creating an account, you agree to the' | translate}} <br /> <a href=\"https://www.arlas.io/terms\" target=\"_blank\">{{'Terms of Service' | translate}}</a>\n            </div>\n          </div>\n          <div class=\"error\" *ngIf=\"signUpForm.getError('alreadyExist')\">\n            {{ 'User already exists' | translate}}\n          </div>\n          <div class=\"validate\" *ngIf=\"validated\">\n            {{'Registration validated, you will receive an email to validate your account' | translate}}\n          </div>\n          <div class=\"buttons\" *ngIf=\"displayForm\">\n            <button type=\"submit\" class=\"sign-up-button\" [disabled]=\"this.signUpForm.invalid\" mat-flat-button\n              color=\"primary\">{{ 'Sign up' | translate}}</button>\n\n          </div>\n          <div class=\"account\">\n            {{'Already have an account?' | translate}}\n            <button mat-button type=\"button\" [routerLink]=\"'/login'\">{{ 'Log In' | translate}}</button>\n          </div>\n        </form>\n      </div>\n      <ng-template #notAllowed>\n        <div class=\"not-allowed\">\n          {{'Registration is not enabled' | translate}}\n        </div>\n      </ng-template>\n    </div>\n\n  </div>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Location } from '@angular/common';\nimport { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { interval } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { ArlasCollaborativesearchService } from './services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigService, ArlasStartupService } from './services/startup/startup.service';\nimport { ArlasWalkthroughService } from './services/walkthrough/walkthrough.service';\nimport { CONFIG_ID_QUERY_PARAM } from './tools/utils';\nimport { ErrorService } from './services/error/error.service';\n\n@Component({\n  selector: 'arlas-tool-root',\n  templateUrl: './toolkit.component.html',\n  providers: [Location],\n  styleUrls: ['./toolkit.component.scss']\n})\nexport class ToolkitComponent implements AfterViewInit, OnInit, OnDestroy {\n\n  public analytics: Array<any>;\n  public languages: string[];\n  public analyticsOpen = false;\n  public target: string;\n\n  public constructor(\n    private readonly configService: ArlasConfigService,\n    private readonly arlasStartupService: ArlasStartupService,\n    private readonly collaborativeService: ArlasCollaborativesearchService,\n    private readonly activatedRoute: ActivatedRoute,\n    private readonly router: Router,\n    private readonly location: Location,\n    private readonly walkthroughService: ArlasWalkthroughService,\n    private readonly errorService: ErrorService\n  ) {\n    // update url when filter are set\n    const queryParams: Params = {...this.activatedRoute.snapshot.queryParams};\n    if (!this.arlasStartupService.emptyMode) {\n      this.collaborativeService.collaborationBus.subscribe(collaborationEvent => {\n        queryParams['filter'] = this.collaborativeService.urlBuilder().split('filter=')[1];\n        if (this.activatedRoute.snapshot.queryParams['lg']) {\n          queryParams['lg'] = this.activatedRoute.snapshot.queryParams['lg'];\n        }\n        if (this.activatedRoute.snapshot.queryParams['extend']) {\n          queryParams['extend'] = this.activatedRoute.snapshot.queryParams['extend'];\n        }\n        if (this.activatedRoute.snapshot.queryParams[CONFIG_ID_QUERY_PARAM]) {\n          queryParams[CONFIG_ID_QUERY_PARAM] = this.activatedRoute.snapshot.queryParams[CONFIG_ID_QUERY_PARAM];\n        }\n        if (this.activatedRoute.snapshot.queryParams['vs']) {\n          queryParams['vs'] = this.activatedRoute.snapshot.queryParams['vs'];\n        }\n        /** at = analytic-tab */\n        if (this.activatedRoute.snapshot.queryParams['at']) {\n          queryParams['at'] = this.activatedRoute.snapshot.queryParams['at'];\n        }\n        /** rt = resultlist-tab */\n        if (this.activatedRoute.snapshot.queryParams['rt']) {\n          queryParams['rt'] = this.activatedRoute.snapshot.queryParams['rt'];\n        }\n        /** ao = analytic-open */\n        if (this.activatedRoute.snapshot.queryParams['ao']) {\n          queryParams['ao'] = this.activatedRoute.snapshot.queryParams['ao'];\n        }\n        /** ro = resultlist-open */\n        if (this.activatedRoute.snapshot.queryParams['ro']) {\n          queryParams['ro'] = this.activatedRoute.snapshot.queryParams['ro'];\n        }\n        this.router.navigate([], { queryParams: queryParams, relativeTo: this.activatedRoute });\n        this.collaborativeService.ongoingSubscribe.subscribe(nb => {\n          if (collaborationEvent.id === 'url') {\n            if (!this.collaborativeService.endOfUrlCollaboration) {\n              this.collaborativeService.endOfUrlCollaboration = this.collaborativeService.totalSubscribe === 0;\n            }\n          }\n        });\n        if (collaborationEvent.id !== 'url') {\n          this.collaborativeService.endOfUrlCollaboration = true;\n        }\n      });\n    }\n\n    this.errorService.listenToArlasCollaborativeErrors();\n  }\n\n  public ngOnInit(): void {\n    // update app when user click on back/next browser button\n    this.location.subscribe(x => {\n      if (!this.arlasStartupService.emptyMode) {\n        let dataModel = {};\n        x.url.split('&').forEach(param => {\n          if (param.split('filter=')[1]) {\n            dataModel = this.collaborativeService.dataModelBuilder(decodeURI(param.split('filter=')[1]), true);\n          }\n        });\n        this.collaborativeService.setCollaborations(dataModel);\n      }\n    });\n  }\n\n  public ngAfterViewInit(): void {\n    if (this.configService.getConfig() && this.configService.getConfig()['error'] !== undefined) {\n      this.configService.confErrorBus.next(this.configService.getConfig()['error']);\n    } else if (this.arlasStartupService.shouldRunApp) {\n      interval(400).pipe(take(1)).subscribe(() => {\n        const filter = this.activatedRoute.snapshot.queryParams['filter'];\n        if (filter) {\n          const dataModel = this.collaborativeService.dataModelBuilder(filter, true);\n          this.collaborativeService.setCollaborations(dataModel);\n        } else {\n          this.collaborativeService.setCollaborations({});\n        }\n      });\n    }\n    this.walkthroughService.load();\n  }\n\n  public ngOnDestroy(): void {\n    this.errorService.unlistenToArlasCollaborativeErrors();\n  }\n}\n","\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, FormGroupDirective, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { ConfirmedValidator } from '../../tools/utils';\nimport { ArlasSettingsService } from '../../services/settings/arlas.settings.service';\nimport { NOT_CONFIGURED } from '../../tools/utils';\n\n@Component({\n  selector: 'arlas-verify',\n  templateUrl: './verify.component.html',\n  styleUrls: ['./verify.component.css']\n})\nexport class VerifyComponent implements OnInit {\n\n  public validateForm: FormGroup;\n  public validated = false;\n  public displayForm = true;\n\n  public userId = null;\n  public token = null;\n\n  public constructor(\n    private formBuilder: FormBuilder,\n    private iamService: ArlasIamService,\n    private route: ActivatedRoute,\n    private settingsService: ArlasSettingsService\n  ) { }\n\n  public ngOnInit(): void {\n    this.validateForm = this.formBuilder.group({\n      password: ['', [Validators.required]],\n      confirm_password: ['', [Validators.required]]\n    }, {\n      validator: ConfirmedValidator('password', 'confirm_password')\n    });\n\n    this.route.paramMap.subscribe(params => {\n      this.userId = params.get('id');\n      this.token = params.get('token');\n    });\n  }\n\n  public onSubmit(formDirective: FormGroupDirective): void {\n    this.validated = false;\n    this.iamService.verify(this.userId, this.token, this.validateForm.get('password').value).subscribe({\n      next: (e) => {\n        formDirective.resetForm();\n        this.validateForm.reset();\n        this.validated = true;\n        const authSettings = this.settingsService.getAuthentSettings();\n        this.displayForm  = false;\n        if (!!authSettings && authSettings.login_url && authSettings.login_url !== NOT_CONFIGURED) {\n          window.open(authSettings.login_url, '_self');\n        }\n      },\n      error: err => {\n        err.json().then(e => {\n          if (e.message === 'User already verified.'){\n            this.validateForm.setErrors({\n              alreadyVerified: true\n            });\n          } else if (e.message === 'User not found.'){\n            this.validateForm.setErrors({\n              unknownUser: true\n            });\n          } else {\n            this.validateForm.setErrors({\n              serviceError: true\n            });\n          }\n        });\n      }\n    });\n  }\n}\n","<div class=\"container\">\n  <div class=\"validate-form text-center\" style=\"align-items: center;\">\n    <div>\n      <div class=\"title\">\n        <h2>ARLAS - {{'Verify your email' | translate}}</h2>\n      </div>\n      <div>\n\n        <form [formGroup]=\"validateForm\" (ngSubmit)=\"onSubmit(formDirective)\" #formDirective=\"ngForm\">\n          <div class=\"form-content\" *ngIf=\"displayForm\">\n            <span class=\"form-text-detail\">{{'To validate your email, please set your password:' | translate}}</span>\n            <mat-form-field appearance=\"outline\">\n              <mat-label>{{'Password' | translate}}</mat-label>\n              <input matInput type=\"password\" formControlName=\"password\">\n            </mat-form-field>\n            <mat-form-field appearance=\"outline\">\n              <mat-label>{{'Confirm password' | translate}}</mat-label>\n              <input matInput type=\"password\" formControlName=\"confirm_password\">\n            </mat-form-field>\n            <mat-error\n              *ngIf=\"validateForm.get('confirm_password').touched\n            && validateForm.get('confirm_password').invalid && validateForm.hasError('confirmedValidator', 'confirm_password')\"\n              class=\"confirm-error\">\n              {{'Password and Confirm Password must be match' | translate}}\n            </mat-error>\n          </div>\n          <div class=\"validate\" *ngIf=\"validated\">\n            {{'Your account is now active.' | translate}}\n          </div>\n          <div class=\"error\" *ngIf=\"validateForm.getError('unknownUser')\">\n            {{ 'Unknown user' | translate}}\n          </div>\n          <div class=\"error\" *ngIf=\"validateForm.getError('alreadyVerified')\">\n            {{ 'User already verified' | translate}}\n          </div>\n          <div class=\"error\" *ngIf=\"validateForm.getError('serviceError')\">\n            {{ 'An error occured' | translate}}\n          </div>\n          <div class=\"buttons\" *ngIf=\"displayForm\">\n            <button type=\"submit\" class=\"validate-button\" [disabled]=\"this.validateForm.invalid\" mat-flat-button\n              color=\"primary\">{{ 'Validate' | translate}}</button>\n\n          </div>\n          <div class=\"account\">\n            {{'Already have an account?' | translate}}\n            <button mat-button type=\"button\" [routerLink]=\"'/login'\">{{ 'Log In' | translate}}</button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\nimport { ConfirmedValidator } from '../../tools/utils';\n\n@Component({\n  selector: 'arlas-tool-reset',\n  templateUrl: './reset.component.html',\n  styleUrls: ['./reset.component.css']\n})\nexport class ResetComponent implements OnInit {\n\n  public resetForm: FormGroup;\n  public validated = false;\n\n  public userId = null;\n  public token = null;\n\n  public constructor(\n    private formBuilder: FormBuilder,\n    private iamService: ArlasIamService,\n    private route: ActivatedRoute,\n  ) { }\n\n  public ngOnInit(): void {\n    this.resetForm = this.formBuilder.group({\n      password: ['', [Validators.required]],\n      confirm_password: ['', [Validators.required]]\n    }, {\n      validator: ConfirmedValidator('password', 'confirm_password')\n    });\n\n    this.route.paramMap.subscribe(params => {\n      this.userId = params.get('id');\n      this.token = params.get('token');\n    });\n  }\n\n  public onSubmit(): void {\n    this.validated = false;\n    this.iamService.reset(this.userId, this.token, this.resetForm.get('password').value).subscribe({\n      next: (data) => {\n        this.validated = true;\n      },\n      error: err => {\n        console.error(err);\n      }\n    });\n  }\n}\n","<div class=\"container\">\n  <div class=\"reset-form text-center\" style=\"align-items: center;\">\n    <div>\n      <div class=\"title\">\n        <h2>ARLAS - {{'Reset password' | translate}}</h2>\n      </div>\n      <div>\n        <form [formGroup]=\"resetForm\" (ngSubmit)=\"onSubmit()\">\n          <div class=\"form-content\">\n            <ng-container *ngIf=\"!validated\">\n              <mat-form-field appearance=\"outline\">\n                <mat-label>{{'Password' | translate}}</mat-label>\n                <input matInput type=\"password\" formControlName=\"password\">\n              </mat-form-field>\n              <mat-form-field appearance=\"outline\">\n                <mat-label>{{'Confirm password' | translate}}</mat-label>\n                <input matInput type=\"password\" formControlName=\"confirm_password\">\n              </mat-form-field>\n            </ng-container>\n\n\n          </div>\n          <div class=\"validate\" *ngIf=\"validated\">\n            {{'Your password has been changed.' | translate}}\n          </div>\n          <div class=\"buttons\" *ngIf=\"!validated\">\n            <button  type=\"submit\" class=\"reset-button\" [disabled]=\"this.resetForm.invalid\" mat-flat-button\n              color=\"primary\">{{ 'Change' | translate}}</button>\n\n          </div>\n          <div class=\"account\">\n            {{'Already have an account?' | translate}}\n            <button mat-button type=\"button\" [routerLink]=\"'/login'\">{{ 'Log In' | translate}}</button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators, FormGroupDirective } from '@angular/forms';\nimport { ArlasIamService } from '../../services/arlas-iam/arlas-iam.service';\n\n@Component({\n  selector: 'arlas-tool-forgot',\n  templateUrl: './forgot.component.html',\n  styleUrls: ['./forgot.component.css']\n})\nexport class ForgotComponent implements OnInit {\n\n  public forgotForm: FormGroup;\n  public validated = false;\n  public displayForm = true;\n\n  public constructor(\n    private formBuilder: FormBuilder,\n    private iamService: ArlasIamService\n  ) { }\n\n  public ngOnInit(): void {\n    this.forgotForm = this.formBuilder.group({\n      email: ['', [Validators.required, Validators.email, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\\\\.[a-z]{2,4}$')]]\n    });\n  }\n\n  public onSubmit(formDirective: FormGroupDirective) {\n    this.validated = false;\n    this.iamService.forgot(this.forgotForm.get('email').value).subscribe({\n      next: () => {\n        this.validated = true;\n        formDirective.resetForm();\n        this.forgotForm.reset();\n        this.displayForm  = false;\n      },\n      error: err => {\n        // API respond with error (but the resquest is OK)\n        this.validated = true;\n      }\n    });\n  }\n\n}\n","<div class=\"container\">\n  <div class=\"sign-up-form text-center\" style=\"align-items: center;\">\n    <div>\n      <div class=\"title\">\n        <h2>ARLAS - {{'Reset password' | translate}}</h2>\n      </div>\n      <div>\n        <form [formGroup]=\"forgotForm\" (ngSubmit)=\"onSubmit(formDirective)\" #formDirective=\"ngForm\">\n          <div class=\"form-content\" *ngIf=\"displayForm\">\n            <mat-form-field appearance=\"outline\">\n              <mat-label>{{'Email' | translate}}</mat-label>\n              <input matInput type=\"email\" formControlName=\"email\">\n              <mat-icon matPrefix>mail_outline</mat-icon>\n              <mat-error *ngIf=\"forgotForm.hasError('required', 'email')\">\n                {{'Email is required' | translate}}\n              </mat-error>\n              <mat-error *ngIf=\"forgotForm.hasError('pattern', 'email')\">\n                {{'Email must be a valid email address' | translate}}\n              </mat-error>\n            </mat-form-field>\n\n          </div>\n          <div class=\"validate\" *ngIf=\"validated\">\n            {{'If you have an account, you will receive an email shortly' | translate}}\n          </div>\n          <div class=\"buttons\" *ngIf=\"displayForm\">\n            <button type=\"submit\" class=\"sign-up-button\" [disabled]=\"this.forgotForm.invalid\" mat-flat-button\n              color=\"primary\">{{ 'Send password reset email' | translate}}</button>\n\n          </div>\n          <div class=\"account\">\n            {{'Already have an account?' | translate}}\n            <button mat-button type=\"button\" [routerLink]=\"'/login'\">{{ 'Log In' | translate}}</button>\n          </div>\n        </form>\n      </div>\n    </div>\n  </div>\n</div>\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LoginComponent } from './components/login/login.component';\nimport { RegisterComponent } from './components/register/register.component';\nimport { ToolkitComponent } from './toolkit.component';\nimport { VerifyComponent } from './components/verify/verify.component';\nimport { ResetComponent } from './components/reset/reset.component';\nimport { ForgotComponent } from './components/forgot/forgot.component';\n\nexport const routes: Routes = [\n  { path: '', component: ToolkitComponent },\n  { path: 'callback', redirectTo: '' },\n  { path: 'login', component: LoginComponent },\n  { path: 'register', component: RegisterComponent },\n  { path: 'verify/:id/user/:token', component: VerifyComponent },\n  { path: 'password_forgot', component: ForgotComponent },\n  { path: 'reset/:id/user/:token', component: ResetComponent },\n];\n\n@NgModule({\n  imports: [RouterModule.forRoot(routes)],\n  exports: [RouterModule]\n})\nexport class ToolkitRoutingModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { OwlDateTimeIntl } from '@danielmoncada/angular-datetime-picker';\n\n// here is the default text string\nexport class ArlasTranslateIntl extends OwlDateTimeIntl {\n\n  /** A label for the up second button (used by screen readers).  */\n  public upSecondLabel = this.translateService.instant('Datepicker.upSecondLabel');\n\n  /** A label for the down second button (used by screen readers).  */\n  public downSecondLabel = this.translateService.instant('Datepicker.downSecondLabel');\n\n  /** A label for the up minute button (used by screen readers).  */\n  public upMinuteLabel = this.translateService.instant('Datepicker.upMinuteLabel');\n\n  /** A label for the down minute button (used by screen readers).  */\n  public downMinuteLabel = this.translateService.instant('Datepicker.downMinuteLabel');\n\n  /** A label for the up hour button (used by screen readers).  */\n  public upHourLabel = this.translateService.instant('Datepicker.upHourLabel');\n\n  /** A label for the down hour button (used by screen readers).  */\n  public downHourLabel = this.translateService.instant('Datepicker.downHourLabel');\n\n  /** A label for the previous month button (used by screen readers). */\n  public prevMonthLabel = this.translateService.instant('Datepicker.prevMonthLabel');\n\n  /** A label for the next month button (used by screen readers). */\n  public nextMonthLabel = this.translateService.instant('Datepicker.nextMonthLabel');\n\n  /** A label for the previous year button (used by screen readers). */\n  public prevYearLabel = this.translateService.instant('Datepicker.prevYearLabel');\n\n  /** A label for the next year button (used by screen readers). */\n  public nextYearLabel = this.translateService.instant('Datepicker.nextYearLabel');\n\n  /** A label for the previous multi-year button (used by screen readers). */\n  public prevMultiYearLabel = this.translateService.instant('Datepicker.prevMultiYearLabel');\n\n  /** A label for the next multi-year button (used by screen readers). */\n  public nextMultiYearLabel = this.translateService.instant('Datepicker.nextMultiYearLabel');\n\n  /** A label for the 'switch to month view' button (used by screen readers). */\n  public switchToMonthViewLabel = this.translateService.instant('Datepicker.switchToMonthViewLabel');\n\n  /** A label for the 'switch to year view' button (used by screen readers). */\n  public switchToMultiYearViewLabel = this.translateService.instant('Datepicker.switchToMultiYearViewLabel');\n\n  /** A label for the cancel button */\n  public cancelBtnLabel = this.translateService.instant('Datepicker.cancelBtnLabel');\n\n  /** A label for the set button */\n  public setBtnLabel = this.translateService.instant('Datepicker.setBtnLabel');\n\n  /** A label for the range 'from' in picker info */\n  public rangeFromLabel = this.translateService.instant('Datepicker.rangeFromLabel');\n\n  /** A label for the range 'to' in picker info */\n  public rangeToLabel = this.translateService.instant('Datepicker.rangeToLabel');\n\n  /** A label for the hour12 button (AM) */\n  public hour12AMLabel = this.translateService.instant('Datepicker.hour12AMLabel');\n\n  /** A label for the hour12 button (PM) */\n  public hour12PMLabel = this.translateService.instant('Datepicker.hour12PMLabel');\n\n  public constructor(private translateService: TranslateService) {\n    super();\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { of } from 'rxjs/internal/observable/of';\nimport { map } from 'rxjs/internal/operators/map';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { ArlasIamService } from './arlas-iam.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AuthGuardIamService {\n\n  public constructor(\n    private router: Router,\n    private arlasIamService: ArlasIamService,\n  ) { }\n\n  public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n    if (!!this.arlasIamService.user) {\n      // If arlasIamService has a user no need to try to refresh\n      // Usefull to not call refresh too many times in app navigation\n      return of(true);\n    } else {\n      return this.arlasIamService.refresh().pipe(map(loginData => {\n        if (!!loginData) {\n          this.arlasIamService.setHeadersFromAccesstoken(loginData.access_token);\n          return true;\n        } else {\n          return false;\n        }\n      }),\n      catchError(() => this.arlasIamService.logoutWithoutRedirection$().pipe(mergeMap(() => {\n        this.router.navigate(['/login']);\n        return of(false);\n      }))));\n    }\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\n\nexport class PaginatorI18n implements MatPaginatorIntl {\n\n  public changes: Subject<void>;\n  public itemsPerPageLabel: string;\n  public nextPageLabel: string;\n  public previousPageLabel: string;\n  public firstPageLabel: string;\n  public lastPageLabel: string;\n\n  public constructor(\n    private translate: TranslateService\n  ) {\n    this.changes = new Subject();\n    this.initLabels();\n    this.translate.onLangChange.subscribe({\n      next: () => {\n        this.initLabels();\n      }\n    });\n  }\n\n  public initLabels() {\n    this.itemsPerPageLabel = this.translate.instant('ITEMS_PER_PAGE_LABEL');\n    this.nextPageLabel = this.translate.instant('NEXT_PAGE_LABEL');\n    this.previousPageLabel = this.translate.instant('PREVIOUS_PAGE_LABEL');\n    this.firstPageLabel = this.translate.instant('FIRST_PAGE_LABEL');\n    this.lastPageLabel = this.translate.instant('LAST_PAGE_LABEL');\n    this.changes.next();\n  }\n\n  public getRangeLabel(page: number, pageSize: number, length: number): string {\n    if (length === 0 || pageSize === 0) {\n      return this.translate.instant('RANGE_PAGE_LABEL_1', { length });\n    }\n    length = Math.max(length, 0);\n    const startIndex = page * pageSize;\n    // If the start index exceeds the list length, do not try and fix the end index to the end.\n    const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\n    return this.translate.instant('RANGE_PAGE_LABEL_2', { startIndex: startIndex + 1, endIndex, length });\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { APP_INITIALIZER, forwardRef, NgModule } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { OWL_DATE_TIME_LOCALE, OwlDateTimeIntl } from '@danielmoncada/angular-datetime-picker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { OAuthModule, ValidationHandler } from 'angular-oauth2-oidc';\nimport { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\nimport { ShortenNumberPipe } from 'arlas-web-components';\nimport { DeviceDetectorService } from 'ngx-device-detector';\nimport { ArlasTranslateIntl } from './components/timeline/date-picker/ArlasTranslateIntl';\nimport { ArlasAoiService } from './services/aoi/aoi.service';\nimport { ArlasIamService } from './services/arlas-iam/arlas-iam.service';\nimport { AuthGuardIamService } from './services/arlas-iam/auth-guard-iam.service';\nimport { AuthentificationService } from './services/authentification/authentification.service';\nimport { ArlasBookmarkService } from './services/bookmark/bookmark.service';\nimport { ArlasCollaborativesearchService } from './services/collaborative-search/arlas.collaborative-search.service';\nimport { ArlasConfigurationDescriptor } from './services/configuration-descriptor/configurationDescriptor.service';\nimport { ErrorService } from './services/error/error.service';\nimport { ArlasExportCsvService } from './services/export-csv/export-csv.service';\nimport { ArlasExtendService } from './services/extend/extend.service';\nimport { ArlasMapSettings } from './services/map-settings/map-settings.service';\nimport { ArlasMapService } from './services/map/map.service';\nimport { PermissionService } from './services/permission/permission.service';\nimport { PersistenceService } from './services/persistence/persistence.service';\nimport { ArlasSettingsService } from './services/settings/arlas.settings.service';\nimport { ArlasConfigService, ArlasStartupService, CONFIG_UPDATER, FETCH_OPTIONS } from './services/startup/startup.service';\nimport { ArlasWalkthroughService } from './services/walkthrough/walkthrough.service';\nimport { ArlasToolkitSharedModule } from './shared.module';\nimport { ToolkitRoutingModule } from './toolkit-routing.module';\nimport { ToolkitComponent } from './toolkit.component';\nimport { PaginatorI18n } from './tools/paginatori18n';\nimport { GET_OPTIONS } from './tools/utils';\n\n\nexport function startupServiceFactory(startupService: ArlasStartupService) {\n  const load = () => startupService.load();\n  return load;\n}\n\nexport function settingsServiceFactory(settings: ArlasSettingsService) {\n  return settings;\n}\n\nexport function configServiceFactory(config: ArlasConfigService) {\n  return config;\n}\n\nexport function auhtentServiceFactory(service: AuthentificationService) {\n  return service;\n}\n\nexport function iamServiceFactory(service: ArlasIamService) {\n  return service;\n}\n\nexport function localDatePickerFactory(translate: TranslateService) {\n  return translate.currentLang;\n}\n\nexport function configUpdaterFactory(x): any {\n  return (x) => x[0];\n}\n\nexport function getOptionsFactory(settingsService: ArlasSettingsService, arlasAuthService: AuthentificationService,\n  arlasIamService: ArlasIamService): any {\n  const getOptions = () => {\n    let token = null;\n    const authSettings = settingsService.getAuthentSettings();\n    let authentMode = !!authSettings ? authSettings.auth_mode : undefined;\n    const isAuthentActivated = !!authSettings && !!authSettings.use_authent;\n    if (isAuthentActivated && !authentMode) {\n      authentMode = 'openid';\n    }\n    if (isAuthentActivated) {\n      if (!!authentMode && authentMode === 'iam') {\n        token = arlasIamService.getAccessToken();\n      } else {\n        token = !!arlasAuthService.accessToken ? arlasAuthService.accessToken : null;\n      }\n      if (token !== null) {\n        const headers = {\n          Authorization: 'Bearer ' + token\n        };\n        if (authentMode === 'iam') {\n          const org = arlasIamService.getOrganisation();\n          if (!!org) {\n            headers['arlas-org-filter'] = org;\n          }\n        }\n        return { headers };\n      } else {\n        return {};\n      }\n    } else {\n      return {};\n    }\n  };\n  return getOptions;\n}\n\nexport const MY_CUSTOM_FORMATS = {\n  parseInput: 'lll',\n  fullPickerInput: 'll LTS',\n  datePickerInput: 'lll',\n  timePickerInput: 'lll',\n  monthYearLabel: 'MMM YYYY',\n  dateA11yLabel: 'lll',\n  monthYearA11yLabel: 'MMMM YYYY',\n};\n\n@NgModule({\n  imports: [\n    ToolkitRoutingModule,\n    ArlasToolkitSharedModule,\n    BrowserModule,\n    BrowserAnimationsModule,\n    OAuthModule.forRoot()\n  ],\n  exports: [ToolkitComponent],\n  declarations: [ToolkitComponent],\n  providers: [\n    DeviceDetectorService,\n    {\n      provide: FETCH_OPTIONS, useValue: {\n        referrerPolicy: 'origin'\n      }\n    },\n    {\n      provide: CONFIG_UPDATER,\n      useFactory: configUpdaterFactory\n    },\n    { provide: MAT_DIALOG_DATA, useValue: {} },\n    { provide: MatDialogRef, useValue: {} },\n    forwardRef(() => ArlasAoiService),\n    forwardRef(() => ArlasBookmarkService),\n    forwardRef(() => ArlasSettingsService),\n    forwardRef(() => ArlasConfigService),\n    forwardRef(() => ArlasCollaborativesearchService),\n    forwardRef(() => AuthentificationService),\n    forwardRef(() => ArlasIamService),\n    forwardRef(() => ArlasStartupService),\n    forwardRef(() => ArlasMapSettings),\n    forwardRef(() => ArlasMapService),\n    forwardRef(() => ArlasConfigurationDescriptor),\n    forwardRef(() => ArlasExtendService),\n    forwardRef(() => ArlasWalkthroughService),\n    forwardRef(() => ArlasExportCsvService),\n    forwardRef(() => PersistenceService),\n    forwardRef(() => PermissionService),\n    forwardRef(() => ErrorService),\n    {\n      provide: APP_INITIALIZER,\n      useFactory: startupServiceFactory,\n      deps: [ArlasStartupService],\n      multi: true\n    },\n    {\n      provide: 'ArlasSettingsService',\n      useFactory: settingsServiceFactory,\n      deps: [ArlasSettingsService],\n      multi: true\n    },\n    {\n      provide: 'ArlasConfigService',\n      useFactory: configServiceFactory,\n      deps: [ArlasConfigService],\n      multi: true\n    },\n    {\n      provide: 'AuthentificationService',\n      useFactory: auhtentServiceFactory,\n      deps: [AuthentificationService],\n      multi: true\n    },\n    {\n      provide: OWL_DATE_TIME_LOCALE,\n      useFactory: localDatePickerFactory,\n      deps: [TranslateService]\n    },\n    { provide: OwlDateTimeIntl, useClass: ArlasTranslateIntl, deps: [TranslateService] },\n    {\n      provide: ValidationHandler,\n      useClass: JwksValidationHandler\n    },\n    {\n      provide: GET_OPTIONS,\n      useFactory: getOptionsFactory,\n      deps: [ArlasSettingsService, AuthentificationService, ArlasIamService]\n    },\n    {\n      provide: MatPaginatorIntl,\n      deps: [TranslateService],\n      useClass: PaginatorI18n\n    },\n    ShortenNumberPipe,\n    AuthGuardIamService,\n    ArlasIamService\n  ],\n  bootstrap: [ToolkitComponent]\n})\nexport class ArlasToolKitModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { PROTECTED_IMAGE_HEADER } from 'arlas-web-components';\nimport { Observable } from 'rxjs';\nimport { ArlasIamService } from '../services/arlas-iam/arlas-iam.service';\nimport { AuthentificationService } from '../services/authentification/authentification.service';\nimport { ArlasSettingsService } from '../services/settings/arlas.settings.service';\n\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n\n  public constructor(\n    private authenticationService: AuthentificationService,\n    private iamService: ArlasIamService,\n    private settingsService: ArlasSettingsService\n  ) { }\n\n  public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    // Intercepts quicklook requests to add token\n    if (!request.headers.has(PROTECTED_IMAGE_HEADER) || request.headers.get(PROTECTED_IMAGE_HEADER) !== 'true') {\n      return next.handle(request);\n    }\n    request = request.clone({\n      headers: request.headers.delete(PROTECTED_IMAGE_HEADER)\n    });\n\n    const authSettings = this.settingsService.getAuthentSettings();\n    let authentMode = !!authSettings ? authSettings.auth_mode : undefined;\n    if (!!authSettings && !!authSettings.use_authent && !authentMode) {\n      authentMode = 'openid';\n    }\n\n    // add authorization header with accessToken to Http request if logged\n    if (authentMode === 'openid') {\n      const hasValidAccessToken = this.authenticationService.hasValidAccessToken();\n      if (hasValidAccessToken) {\n        request = request.clone({\n          setHeaders: {\n            Authorization: `Bearer ${this.authenticationService.accessToken}`,\n          }\n        });\n      }\n    } else if (authentMode === 'iam') {\n      const token = this.iamService.getAccessToken();\n      if (!!token) {\n        let headers = new HttpHeaders({\n          'Authorization': `Bearer ${token}`\n        });\n        const org = this.iamService.getOrganisation();\n        if (org !== null && org !== undefined) {\n          headers = new HttpHeaders({\n            'Authorization': `Bearer ${token}`,\n            'arlas-org-filter': org\n          });\n        }\n        request = request.clone({headers});\n      }\n    }\n    return next.handle(request);\n  }\n}\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { RouterModule } from '@angular/router';\nimport { ChangePasswordComponent } from './components/change-password/change-password.component';\nimport { ForgotComponent } from './components/forgot/forgot.component';\nimport { LoginComponent } from './components/login/login.component';\nimport { RegisterComponent } from './components/register/register.component';\nimport { ResetComponent } from './components/reset/reset.component';\nimport { VerifyComponent } from './components/verify/verify.component';\nimport { CustomTranslateLoader } from './tools/Translation/custom-translate-loader';\n\n\n@NgModule({\n  declarations: [\n    LoginComponent,\n    RegisterComponent,\n    VerifyComponent,\n    ResetComponent,\n    ForgotComponent,\n    ChangePasswordComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatDialogModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatIconModule,\n    MatProgressSpinnerModule,\n    ReactiveFormsModule,\n    RouterModule,\n    TranslateModule.forRoot({\n      loader: {\n        provide: TranslateLoader,\n        useClass: CustomTranslateLoader,\n        deps: [HttpClient]\n      }\n    })\n  ],\n  exports: [\n    LoginComponent\n  ]\n})\nexport class LoginModule { }\n","/*\n * Licensed to Gisaïa under one or more contributor\n * license agreements. See the NOTICE.txt file distributed with\n * this work for additional information regarding copyright\n * ownership. Gisaïa licenses this file to you under\n * the Apache License, Version 2.0 (the \"License\"); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *    http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nexport { TopMenuComponent } from './lib/components/top-menu/top-menu.component';\nexport { AboutComponent, AboutDialogComponent } from './lib/components/top-menu/about/about.component';\nexport { ShortcutFiltersHandlerComponent } from './lib/components/filter-shortcut/filters-handler/filters-handler.component';\nexport { FilterShortcutChipComponent } from './lib/components/filter-shortcut/chip/chip.component';\nexport { FilterShortcutComponent } from './lib/components/filter-shortcut/filter-shortcut.component';\nexport { FilterShortcutConfiguration } from './lib/components/filter-shortcut/filter-shortcut.utils';\nexport { AnalyticsBoardComponent } from './lib/components/analytics/analytics-board/analytics-board.component';\nexport { AnalyticsMenuComponent } from './lib/components/analytics/analytics-menu/analytics-menu.component';\nexport {\n  AnalyticGroupConfiguration, AnalyticsTabs\n} from './lib/components/analytics/analytics.utils';\nexport { AnalyticsService } from './lib/services/analytics/analytics.service';\nexport { AoiComponent } from './lib/components/aoi/aoi.component';\nexport { BookmarkMenuComponent } from './lib/components/bookmark-menu/bookmark-menu.component';\nexport { BookmarkAddDialogComponent } from './lib/components/bookmark/bookmark-add-dialog.component';\nexport { BookmarkComponent } from './lib/components/bookmark/bookmark.component';\nexport { BookMark, BookMarkType } from './lib/services/bookmark/model';\nexport { BookmarkDataSource } from './lib/services/bookmark/bookmarkDataSource';\nexport { BookmarkLocalDatabase } from './lib/services/bookmark/bookmarkLocalDatabase';\nexport { BookmarkPersistenceDatabase } from './lib/services/bookmark/bookmarkPersistenceDatabase';\nexport { Aoi } from './lib/services/aoi/model';\nexport { AoiDatabase } from './lib/services/aoi/aoiDatabase';\nexport { ArlasLocalDatabase } from './lib/tools/arlasLocalDatabase';\nexport { ArlasPersistenceDatabase } from './lib/tools/arlasPersistenceDatabase';\nexport { ArlasCollectionService } from './lib/services/collection/arlas-collection.service';\nexport { ConfigMenuComponent } from './lib/components/config-manager/config-menu/config-menu.component';\nexport { ConfigMenuModule } from './lib/components/config-manager/config-menu/config-menu.module';\nexport { ConfirmModalComponent } from './lib/components/confirm-modal/confirm-modal.component';\nexport { CalendarTimelineToolComponent } from './lib/components/calendar-timeline/calendar-timeline.component';\nexport { ActionModalComponent } from './lib/components/config-manager/action-modal/action-modal.component';\nexport { ActionModalModule } from './lib/components/config-manager/action-modal/action-modal.module';\nexport { DonutTooltipOverlayComponent } from './lib/components/donut-tooltip-overlay/donut-tooltip-overlay.component';\nexport { DownloadComponent, DownloadDialogComponent } from './lib/components/download/download.component';\nexport { ExtendComponent } from './lib/components/extend/extend.component';\nexport { ArlasExtendService } from './lib/services/extend/extend.service';\nexport { ExtendPersistenceDatabase } from './lib/services/extend/extendPersistenceDatabase';\nexport { Extend } from './lib/services/extend/model';\nexport { ExtendLocalDatabase } from './lib/services/extend/extendLocalDatabase';\nexport {\n  FiltersComponent, GetCollaborationIconPipe, GetColorFilterPipe,\n  GetContributorLabelPipe, GetGlobalColorFilterPipe\n} from './lib/components/filters/filters.component';\nexport { PermissionsCreatorComponent } from './lib/components/permissions-creator/permissions-creator.component';\nexport { PermissionsCreatorDialogComponent } from\n  './lib/components/permissions-creator/permissions-creator-dialog/permissions-creator-dialog.component';\nexport { HistogramTooltipOverlayComponent } from './lib/components/histogram-tooltip-overlay/histogram-tooltip-overlay.component';\nexport { CalendarTimelineTooltipOverlayComponent } from\n  './lib/components/calendar-timeline-tooltip-overlay/calendar-timeline-tooltip-overlay.component';\nexport { HistogramWidgetComponent } from './lib/components/histogram-widget/histogram-widget.component';\nexport { DeniedAccessDialogComponent } from './lib/components/denied-access-dialog/denied-access-dialog.component';\nexport { LanguageSwitcherComponent } from './lib/components/language-switcher/language-switcher.component';\nexport { LinkComponent } from './lib/components/top-menu/links/link/link.component';\nexport { LinksComponent } from './lib/components/top-menu/links/links.component';\nexport { ProgressSpinnerComponent, DEFAULT_SPINNER_OPTIONS } from './lib/components/progress-spinner/progress-spinner.component';\nexport { ReconnectDialogComponent } from './lib/components/reconnect-dialog/reconnect-dialog.component';\nexport { SearchComponent, SearchDialogComponent } from './lib/components/search/search.component';\nexport { ArlasSearchField } from './lib/components/share/model/ArlasSearchField';\nexport { ExcludeTypePipe } from './lib/components/share/exclude-type.pipe';\nexport { ShareComponent, ShareDialogComponent, ShareLayerSourceConfig } from './lib/components/share/share.component';\nexport { TagComponent, TagDialogComponent, TagManagementDialogComponent } from './lib/components/tag/tag.component';\nexport { DatePickerComponent } from './lib/components/timeline/date-picker/date-picker.component';\nexport { TimelineShortcutComponent } from './lib/components/timeline/timeline-shortcut/timeline-shortcut.component';\nexport { TimelineComponent } from './lib/components/timeline/timeline/timeline.component';\nexport { TimelineConfiguration, CollectionLegend } from './lib/components/timeline/timeline/timeline.utils';\nexport { UserInfosComponent } from './lib/components/user-infos/user-infos.component';\nexport { WidgetComponent } from './lib/components/widget/widget.component';\nexport { GetTimeLabelPipe } from './lib/pipes/get-time-label.pipe';\nexport { ArlasAoiService } from './lib/services/aoi/aoi.service';\nexport { AuthentificationService } from './lib/services/authentification/authentification.service';\nexport { ArlasBookmarkService } from './lib/services/bookmark/bookmark.service';\nexport { ArlasColorGeneratorLoader } from './lib/tools/color-generator-loader';\nexport { ArlasConfigurationDescriptor } from './lib/services/configuration-descriptor/configurationDescriptor.service';\nexport { ArlasConfigurationUpdaterService } from './lib/services/configuration-updater/configurationUpdater.service';\nexport { ErrorService } from './lib/services/error/error.service';\nexport { ArlasMapSettings } from './lib/services/map-settings/map-settings.service';\nexport { ArlasMapService } from './lib/services/map/map.service';\nexport { PersistenceService, PersistenceSetting } from './lib/services/persistence/persistence.service';\nexport { ArlasSettingsService } from './lib/services/settings/arlas.settings.service';\nexport { ContributorBuilder } from './lib/services/startup/contributorBuilder';\nexport {\n  ArlasConfigService, ArlasExploreApi, ArlasSettings,\n  ArlasStartupService, CONFIG_UPDATER, FETCH_OPTIONS, LinkSettings, Error, ExtraConfig\n} from './lib/services/startup/startup.service';\nexport { ArlasCollaborativesearchService } from './lib/services/collaborative-search/arlas.collaborative-search.service';\nexport { ArlasWalkthroughModule, WalkthroughModuleConfig } from './lib/services/walkthrough/walkthrough.module';\nexport { ArlasWalkthroughService } from './lib/services/walkthrough/walkthrough.service';\nexport { WalkthroughLoader } from './lib/services/walkthrough/walkthrough.utils';\nexport { ArlasToolkitSharedModule } from './lib/shared.module';\nexport { ArlasTaggerModule } from './lib/tagger.module';\nexport { ToolkitRoutingModule } from './lib/toolkit-routing.module';\nexport { ToolkitComponent } from './lib/toolkit.component';\nexport {\n  ArlasToolKitModule, auhtentServiceFactory, iamServiceFactory, configServiceFactory, configUpdaterFactory,\n  getOptionsFactory, localDatePickerFactory, MY_CUSTOM_FORMATS,\n  settingsServiceFactory, startupServiceFactory\n} from './lib/toolkit.module';\nexport { ArlasDataSource } from './lib/tools/arlasDataSource';\nexport { PaginatorI18n } from './lib/tools/paginatori18n';\nexport {\n  ArlasOverlayRef, ArlasStorageObject, WidgetConfiguration,\n  ArlasStorageType, CollectionCount, CollectionUnit, Config, ConfigAction, ConfigActionEnum,\n  CONFIG_ID_QUERY_PARAM, DONUT_TOOLTIP_DATA, getFieldProperties, getKeyForColor, hashCode, getParamValue,\n  HISTOGRAM_TOOLTIP_DATA, intToRGB, MapService, sortOnDate, SpinnerOptions, AuthentSetting, NOT_CONFIGURED, GET_OPTIONS, ZoomToDataStrategy\n} from './lib/tools/utils';\nexport { JwtInterceptor } from './lib/tools/jwt.interceptor';\nexport { FetchInterceptorService } from './lib/services/interceptor/fetch-interceptor.service';\nexport { ArlasOverlayService, HistogramTooltipConfig, DonutTooltipConfig } from './lib/services/overlays/overlay.service';\nexport { PermissionService, PermissionSetting } from './lib/services/permission/permission.service';\nexport { ArlasExportCsvService } from './lib/services/export-csv/export-csv.service';\nexport { ArlasTagService } from './lib/services/tag/tag.service';\nexport { TaggerResponse } from './lib/services/tag/model';\nexport { LoginModule } from './lib/login.module';\nexport { ArlasIamService, ARLAS_ORG_FILTER } from './lib/services/arlas-iam/arlas-iam.service';\nexport { AuthGuardIamService } from './lib/services/arlas-iam/auth-guard-iam.service';\nexport { LoginComponent } from './lib/components/login/login.component';\nexport { RegisterComponent } from './lib/components/register/register.component';\nexport { ChangePasswordComponent } from './lib/components/change-password/change-password.component';\nexport { VerifyComponent } from './lib/components/verify/verify.component';\nexport { ForgotComponent } from './lib/components/forgot/forgot.component';\nexport { ResetComponent } from './lib/components/reset/reset.component';\nexport { ArlasIamApi } from './lib/services/startup/startup.service';\nexport { ArlasAuthentificationService } from './lib/services/arlas-authentification/arlas-authentification.service';\nexport { AiasDownloadComponent, DOWNLOAD_PROCESS_NAME } from './lib/components/aias/aias-download/aias-download.component';\nexport { AiasEnrichComponent, ENRICH_PROCESS_NAME } from './lib/components/aias/aias-enrich/aias-enrich.component';\nexport { AiasResultComponent } from './lib/components/aias/aias-result/aias-result.component';\nexport { ProcessService } from './lib/services/process/process.service';\nexport { ProcessOutput, ProcessStatus } from './lib/tools/process.interface';\nexport { ArlasError, ActionType } from './lib/tools/errors/error';\nexport { AuthorisationError } from './lib/tools/errors/authorisation-error';\nexport { BackendError } from './lib/tools/errors/backend-error';\nexport { DashboardError } from './lib/tools/errors/dashboard-error';\nexport { NO_ORGANISATION } from './lib/tools/consts';\nexport { AdmonitionCardComponent } from './lib/components/admonition-card/admonition-card.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.ArlasSettingsService","BehaviorSubject","i2","i1.ArlasSettingsService","i2.AuthentificationService","i3.ArlasIamService","i4","i5","i6","i7","i8","i9","i3","Subject","i3.ArlasCollaborativesearchService","i3.ErrorService","i2.ArlasIamService","i1.AuthentificationService","i3.ArlasSettingsService","i4.LinkComponent","i6.ArlasSettingsService","i7.FetchInterceptorService","i10","i11","i13","i14.LinksComponent","i15.AboutComponent","moment","takeUntil","i1.ArlasCollaborativesearchService","i5.FilterShortcutChipComponent","Configuration","map","arlasSettingsSchema.default","AnalyticsContributor","arlasConfSchema.default","IamConfiguration","projType","i4.ArlasCollaborativesearchService","i7.PersistenceService","i8.PermissionService","i9.ErrorService","i10.FetchInterceptorService","i11.ArlasIamService","i12.ProcessService","i2.ArlasConfigService","i2.ArlasStartupService","i5.ArlasCollectionService","filter","i4.ArlasExportCsvService","i5.ArlasOverlayService","i10.ProgressSpinnerComponent","i11.ContributorUpdatingPipe","i1.ArlasStartupService","i2.ArlasCollaborativesearchService","i3.ArlasOverlayService","i5.ArlasExportCsvService","i12","i13.HistogramWidgetComponent","i4.WidgetComponent","i5.ShortcutFiltersHandlerComponent","i1.ArlasConfigService","i2.AnalyticsService","i9.ProgressSpinnerComponent","i10.WidgetComponent","i12.ContributorUpdatingPipe","i1.AnalyticsService","i1.ArlasAoiService","catchError","mergeMap","i4.ArlasStartupService","i5.AuthentificationService","i6.ArlasIamService","i8.ArlasSettingsService","i2.ArlasBookmarkService","i1.PersistenceService","i2.PersistenceService","i3.ArlasConfigService","i4.ErrorService","i10.ShareConfigComponent","take","from","i4.ArlasCollectionService","i5.ErrorService","i7.ArlasSettingsService","i8.AuthentificationService","i1.ArlasOverlayService","i5.ArlasCollaborativesearchService","i6.ArlasConfigService","i7.AuthentificationService","i8.ArlasIamService","i9.ArlasSettingsService","i17","i19","i20.AdmonitionCardComponent","i21","i22","i3.PersistenceService","i1.ArlasExtendService","i5.ArlasConfigService","i14","i15","i16","i18","i19.AdmonitionCardComponent","i21.ExcludeTypePipe","i2.ArlasTagService","i7.ArlasConfigService","i8.ArlasCollaborativesearchService","i9.ArlasBookmarkService","i8.DatePickerComponent","i9.GetTimeLabelPipe","ChartType","DataType","i8.TimelineShortcutComponent","i1.WalkthroughLoader","timer","i14.AiasResultComponent","i11.AiasResultComponent","CustomTranslateLoader","i5.ArlasWalkthroughService","i6.ErrorService","i4.ArlasSettingsService","of"],"mappings":"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"}