@ecodev/natural 53.3.2 → 53.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ecodev-natural.mjs","sources":["../../../projects/natural/src/lib/classes/abstract-controller.ts","../../../projects/natural/src/lib/modules/alert/confirm.component.ts","../../../projects/natural/src/lib/modules/alert/confirm.component.html","../../../projects/natural/src/lib/modules/alert/alert.service.ts","../../../projects/natural/src/lib/modules/panels/abstract-panel.ts","../../../projects/natural/src/lib/classes/utility.ts","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.types.ts","../../../projects/natural/src/lib/classes/query-variable-manager-utils.ts","../../../projects/natural/src/lib/classes/query-variable-manager.ts","../../../projects/natural/src/lib/classes/tld.ts","../../../projects/natural/src/lib/classes/validators.ts","../../../projects/natural/src/lib/classes/abstract-detail.ts","../../../projects/natural/src/lib/classes/abstract-editable-list.ts","../../../projects/natural/src/lib/modules/search/classes/utils.ts","../../../projects/natural/src/lib/modules/search/classes/transformers.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container-animations.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.html","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-ref.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown.service.ts","../../../projects/natural/src/lib/modules/dropdown-components/types.ts","../../../projects/natural/src/lib/modules/dropdown-components/utils.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.html","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.ts","../../../projects/natural/src/lib/modules/search/classes/url.ts","../../../projects/natural/src/lib/modules/common/services/memory-storage.ts","../../../projects/natural/src/lib/services/persistence.service.ts","../../../projects/natural/src/lib/classes/data-source.ts","../../../projects/natural/src/lib/classes/abstract-list.ts","../../../projects/natural/src/lib/classes/abstract-navigable-list.ts","../../../projects/natural/src/lib/classes/apollo-utils.ts","../../../projects/natural/src/lib/classes/rxjs.ts","../../../projects/natural/src/lib/services/abstract-model.service.ts","../../../projects/natural/src/lib/services/debounce.service.ts","../../../projects/natural/src/lib/services/enum.service.ts","../../../projects/natural/src/lib/services/link-mutation.service.ts","../../../projects/natural/src/lib/services/swiss-parsing-date-adapter.service.ts","../../../projects/natural/src/lib/modules/alert/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.directive.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.html","../../../projects/natural/src/lib/modules/columns-picker/public-api.ts","../../../projects/natural/src/lib/modules/common/directives/linkable-tab.directive.ts","../../../projects/natural/src/lib/modules/common/pipes/capitalize.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/ellipsis.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/enum.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/swiss-date.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/time-ago.pipe.ts","../../../projects/natural/src/lib/modules/common/directives/src-density.directive.ts","../../../projects/natural/src/lib/modules/dialog-trigger/dialog-trigger.component.ts","../../../projects/natural/src/lib/modules/common/services/seo.service.ts","../../../projects/natural/src/lib/modules/common/services/seo.provider.ts","../../../projects/natural/src/lib/modules/common/public-api.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.html","../../../projects/natural/src/lib/modules/detail-header/public-api.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/abstract-association-select-component.directive.ts","../../../projects/natural/src/lib/modules/select/abstract-select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/classes/flat-node.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/classes/model-node.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.ts","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.ts","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.html","../../../projects/natural/src/lib/modules/search/input/input.component.ts","../../../projects/natural/src/lib/modules/search/input/input.component.html","../../../projects/natural/src/lib/modules/search/group/group.component.ts","../../../projects/natural/src/lib/modules/search/group/group.component.html","../../../projects/natural/src/lib/modules/search/search/search.component.ts","../../../projects/natural/src/lib/modules/search/search/search.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-boolean/type-boolean.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-boolean/type-boolean.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.html","../../../projects/natural/src/lib/modules/dropdown-components/public-api.ts","../../../projects/natural/src/lib/modules/file/utils.ts","../../../projects/natural/src/lib/modules/file/file.service.ts","../../../projects/natural/src/lib/modules/file/abstract-file.ts","../../../projects/natural/src/lib/modules/file/file-drop.directive.ts","../../../projects/natural/src/lib/modules/file/file-select.directive.ts","../../../projects/natural/src/lib/modules/file/component/file.component.ts","../../../projects/natural/src/lib/modules/file/component/file.component.html","../../../projects/natural/src/lib/modules/file/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.html","../../../projects/natural/src/lib/modules/fixed-button/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.html","../../../projects/natural/src/lib/modules/fixed-button-detail/public-api.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.module.ts","../../../projects/natural/src/lib/modules/icon/public-api.ts","../../../projects/natural/src/lib/modules/panels/types.ts","../../../projects/natural/src/lib/modules/panels/panels.module.ts","../../../projects/natural/src/lib/modules/panels/panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/panels.service.ts","../../../projects/natural/src/lib/modules/panels/panels.component.ts","../../../projects/natural/src/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/public-api.ts","../../../projects/natural/src/lib/modules/relations/relations.component.ts","../../../projects/natural/src/lib/modules/relations/relations.component.html","../../../projects/natural/src/lib/modules/relations/public-api.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.html","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.ts","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.html","../../../projects/natural/src/lib/modules/select/public-api.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-stack.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav/sidenav.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.html","../../../projects/natural/src/lib/modules/sidenav/sidenav-content/sidenav-content.component.ts","../../../projects/natural/src/lib/modules/sidenav/public-api.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.html","../../../projects/natural/src/lib/modules/stamp/public-api.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.html","../../../projects/natural/src/lib/modules/table-button/public-api.ts","../../../projects/natural/src/lib/modules/dialog-trigger/public-api.ts","../../../projects/natural/src/lib/modules/avatar/sources/source.ts","../../../projects/natural/src/lib/modules/avatar/service/md5.ts","../../../projects/natural/src/lib/modules/avatar/sources/gravatar.ts","../../../projects/natural/src/lib/modules/avatar/sources/initials.ts","../../../projects/natural/src/lib/modules/avatar/sources/image.ts","../../../projects/natural/src/lib/modules/avatar/service/avatar.service.ts","../../../projects/natural/src/lib/modules/avatar/component/avatar.component.ts","../../../projects/natural/src/lib/modules/avatar/public-api.ts","../../../projects/natural/src/lib/modules/matomo/matomo.service.ts","../../../projects/natural/src/lib/modules/matomo/public-api.ts","../../../projects/natural/src/lib/modules/logger/error-handler.ts","../../../projects/natural/src/lib/modules/logger/error.module.ts","../../../projects/natural/src/lib/modules/logger/public-api.ts","../../../projects/natural/src/lib/directives/http-prefix.directive.ts","../../../projects/natural/src/lib/classes/providers.ts","../../../projects/natural/src/public-api.ts","../../../projects/natural/src/ecodev-natural.ts"],"sourcesContent":["import {Directive, OnDestroy} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n@Directive()\nexport class NaturalAbstractController implements OnDestroy {\n /**\n * Usage:\n *\n * ```ts\n * import { takeUntil } from 'rxjs/operators';\n * .pipe(takeUntil(this.ngUnsubscribe)) // as first pipe on observables that should be destroyed on component destroy\n * ```\n *\n * @deprecated Instead of this, you should create the observable in the constructor or field initializers and use\n * Angular native `.pipe(takeUntilDestroyed())`. And most likely subscribe at a later point. We keep this method until\n * all existing usages (typically in `ngOnInit()`) are migrated away.\n */\n protected readonly ngUnsubscribe = new Subject<void>();\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule} from '@angular/material/dialog';\nimport {MatButtonModule} from '@angular/material/button';\n\nexport interface NaturalConfirmData {\n title: string;\n message: string;\n confirmText: string;\n cancelText: string;\n}\n\n@Component({\n templateUrl: './confirm.component.html',\n styleUrls: ['./confirm.component.scss'],\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n})\nexport class NaturalConfirmComponent {\n public constructor(@Inject(MAT_DIALOG_DATA) public data: NaturalConfirmData) {}\n}\n","<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n","import {Injectable} from '@angular/core';\nimport {MatDialog} from '@angular/material/dialog';\nimport {MatSnackBar, MatSnackBarRef, SimpleSnackBar} from '@angular/material/snack-bar';\nimport {Observable} from 'rxjs';\nimport {NaturalConfirmComponent, NaturalConfirmData} from './confirm.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalAlertService {\n public constructor(private readonly dialog: MatDialog, private readonly snackBar: MatSnackBar) {}\n\n /**\n * Show an informative message in a snack bar\n */\n public info(message: string, duration: number | null = 2500): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, undefined, {\n duration: duration === null ? undefined : duration,\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show an error in a snack bar\n */\n public error(message: string, duration: number | null = 2500, action?: string): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, action, {\n duration: duration === null ? undefined : duration,\n panelClass: ['snackbar-error'],\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show a simple confirmation dialog and returns true if user confirmed it\n */\n public confirm(\n title: string,\n message: string,\n confirmText: string,\n cancelText: string = $localize`Annuler`,\n ): Observable<boolean | undefined> {\n const dialog = this.dialog.open<NaturalConfirmComponent, NaturalConfirmData, boolean>(NaturalConfirmComponent, {\n data: {\n title: title,\n message: message,\n confirmText: confirmText,\n cancelText: cancelText,\n },\n });\n\n return dialog.afterClosed();\n }\n}\n","import {Directive, HostBinding, HostListener} from '@angular/core';\nimport {merge} from 'lodash-es';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {NaturalPanelsService} from './panels.service';\nimport {NaturalPanelData} from './types';\n\n@Directive()\nexport class NaturalAbstractPanel extends NaturalAbstractController {\n /**\n * The data property is the container where the resolved content is stored\n * When loading a component from a panel opening (dialog), receives the data provided by the service\n */\n public data: any = {};\n\n /**\n * Bind isFrontPanel style class on root component\n */\n @HostBinding('class.isFrontPanel') public isFrontPanel = false;\n\n /**\n * Bind isPanel style class on root component\n */\n @HostBinding('class.isPanel') public isPanel = false;\n\n /**\n * Merging of data provided by the very root component (that is in a route context) and inherited data through panels\n * @TODO : provide type with available attributes\n */\n public panelData?: NaturalPanelData;\n public panelService?: NaturalPanelsService;\n\n /**\n * Bind click on panels, to allow the selection of those who are behind\n */\n @HostListener('click')\n public clickPanel(): void {\n if (!this.isFrontPanel && this.panelService) {\n this.panelService.goToPanelByComponent(this);\n }\n }\n\n /**\n * Called when panel opens and component is loaded\n * Runs before ngOnInit()\n */\n public initPanel(panelData: NaturalPanelData): void {\n this.panelData = panelData;\n this.isPanel = true;\n\n if (this.panelData && this.panelData.data) {\n merge(this.data, this.panelData.data);\n }\n }\n}\n","import {isArray, isEmpty, pickBy} from 'lodash-es';\nimport {Literal} from '../types/types';\nimport type {ReadonlyDeep} from 'type-fest';\n\n/**\n * Very basic formatting to get only date, without time and ignoring entirely the timezone\n *\n * So something like: \"2021-09-23\"\n */\nexport function formatIsoDate(date: null): null;\nexport function formatIsoDate(date: Date): string;\nexport function formatIsoDate(date: Date | null): string | null;\nexport function formatIsoDate(date: Date | null): string | null {\n if (!date) {\n return null;\n }\n\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Format a date and time in a way that will preserve the local time zone.\n * This allows the server side to know the day (without time) that was selected on client side.\n *\n * So something like: \"2021-09-23T17:57:16+09:00\"\n */\nexport function formatIsoDateTime(date: Date): string {\n const timezoneOffsetInMinutes = date.getTimezoneOffset();\n const timezoneOffsetInHours = -Math.trunc(timezoneOffsetInMinutes / 60); // UTC minus local time\n const sign = timezoneOffsetInHours >= 0 ? '+' : '-';\n const hoursLeadingZero = Math.abs(timezoneOffsetInHours) < 10 ? '0' : '';\n const remainderMinutes = -(timezoneOffsetInMinutes % 60);\n const minutesLeadingZero = Math.abs(remainderMinutes) < 10 ? '0' : '';\n\n // It's a bit unfortunate that we need to construct a new Date instance,\n // but we don't want the original Date instance to be modified\n const correctedDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n correctedDate.setHours(date.getHours() + timezoneOffsetInHours);\n\n const iso = correctedDate\n .toISOString()\n .replace(/\\.\\d{3}Z/, '')\n .replace('Z', '');\n\n return (\n iso +\n sign +\n hoursLeadingZero +\n Math.abs(timezoneOffsetInHours).toString() +\n ':' +\n minutesLeadingZero +\n remainderMinutes\n );\n}\n\n/**\n * Relations to full objects are converted to their IDs only.\n *\n * So {user: {id: 123}} becomes {user: 123}\n */\nexport function relationsToIds(object: Literal): Literal {\n const newObj: Literal = {};\n Object.keys(object).forEach(key => {\n let value: unknown = object[key];\n\n if (value === null || value === undefined) {\n // noop\n } else if (hasId(value)) {\n value = value.id;\n } else if (isArray(value)) {\n value = value.map((i: unknown) => (hasId(i) ? i.id : i));\n } else if (typeof value === 'object' && !(value instanceof File) && !(value instanceof Date)) {\n value = pickBy(value, (v, k) => k !== '__typename'); // omit(value, ['__typename']) ?\n }\n\n newObj[key] = value;\n });\n\n return newObj;\n}\n\nfunction hasId(value: unknown): value is {id: unknown} {\n return !!value && typeof value === 'object' && 'id' in value && !!value.id;\n}\n\n/**\n * Remove from source object the attributes with same value as modified\n * Does not consider arrays\n */\nexport function cleanSameValues(source: Literal, modified: Literal): Literal {\n Object.keys(source).forEach(key => {\n if (source[key] instanceof Object) {\n cleanSameValues(source[key], modified[key]);\n if (isEmpty(source[key])) {\n delete source[key];\n }\n } else if (modified && source[key] === modified[key]) {\n delete source[key];\n }\n });\n\n return source;\n}\n\n/**\n * Returns the plural form of the given name\n */\nexport function makePlural(name: string): string {\n const plural = name + 's';\n\n return plural.replace(/ys$/, 'ies').replace(/ss$/, 'ses').replace(/xs$/, 'xes');\n}\n\n/**\n * Returns the string with the first letter as capital\n */\nexport function upperCaseFirstLetter(term: string): string {\n return term.charAt(0).toUpperCase() + term.slice(1);\n}\n\n/**\n * Returns the string with the first letter as lower case\n */\nexport function lowerCaseFirstLetter(term: string): string {\n return term.charAt(0).toLowerCase() + term.slice(1);\n}\n\n/**\n * Replace all attributes of first object with the ones provided by the second, but keeps the reference\n */\nexport function replaceObjectKeepingReference(obj: Literal | null, newObj: Literal | null): void {\n if (!obj || !newObj) {\n return;\n }\n\n Object.keys(obj).forEach(key => {\n delete obj[key];\n });\n\n Object.keys(newObj).forEach(key => {\n obj[key] = newObj[key];\n });\n}\n\n/**\n * Get contrasted color for text in the slider thumb\n * @param hexBgColor string in hexadecimals representing the background color\n */\nexport function getForegroundColor(hexBgColor: string): 'black' | 'white' {\n const rgb = hexToRgb(hexBgColor.slice(0, 7)); // splice remove alpha and consider only \"visible\" color at 100% alpha\n const o = Math.round((rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000);\n\n return o > 125 ? 'black' : 'white';\n}\n\nfunction hexToRgb(hex: string): {r: number; g: number; b: number} {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : {\n r: 0,\n g: 0,\n b: 0,\n };\n}\n\n/**\n * During lodash.mergeWith, overrides arrays\n */\nexport function mergeOverrideArray(destValue: any, source: any): any {\n if (isArray(source)) {\n return source;\n }\n}\n\n/**\n * Copy text to clipboard.\n * Accepts line breaks `\\n` as textarea do.\n */\nexport function copyToClipboard(document: Document, text: string): void {\n const input = document.createElement('textarea');\n document.body.append(input);\n input.value = text;\n input.select();\n document.execCommand('copy');\n document.body.removeChild(input);\n}\n\nexport function deepFreeze<T extends Literal>(o: T): ReadonlyDeep<T> {\n Object.values(o).forEach(v => Object.isFrozen(v) || deepFreeze(v));\n\n return Object.freeze(o) as ReadonlyDeep<T>;\n}\n","// Basic; loosely typed structure for graphql-doctrine filters\n\nimport {Literal} from '../../../types/types';\n\nexport interface Filter {\n groups?: Array<FilterGroup> | null;\n}\n\nexport interface FilterGroup {\n // The logic operator to be used to append this group\n groupLogic?: LogicalOperator | null;\n // The logic operator to be used within all conditions in this group\n conditionsLogic?: LogicalOperator | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: Array<FilterGroupCondition> | null;\n}\n\nexport interface FilterGroupJoin {\n [key: string]: JoinOn;\n}\n\nexport interface JoinOn {\n type?: JoinType | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: Array<FilterGroupCondition> | null;\n}\n\n// Logical operator to be used in conditions\nexport enum LogicalOperator {\n AND = 'AND',\n OR = 'OR',\n}\n\n// Join types to be used in DQL\nexport enum JoinType {\n innerJoin = 'innerJoin',\n leftJoin = 'leftJoin',\n}\n\nexport interface FilterGroupCondition {\n [key: string]: FilterGroupConditionField;\n}\n\nexport interface FilterGroupConditionField {\n between?: BetweenOperator | null;\n equal?: EqualOperator | null;\n greater?: GreaterOperator | null;\n greaterOrEqual?: GreaterOrEqualOperator | null;\n in?: InOperator | null;\n less?: LessOperator | null;\n lessOrEqual?: LessOrEqualOperator | null;\n like?: LikeOperator | null;\n null?: NullOperator | null;\n\n // For relations\n have?: HaveOperator | null;\n empty?: EmptyOperator | null;\n\n // Allow anything else for custom operators\n [key: string]: Literal | undefined | null;\n}\n\nexport type Scalar = number | string | boolean;\n\nexport interface HaveOperator {\n values: Array<string>;\n not?: boolean | null;\n}\n\nexport interface EmptyOperator {\n not?: boolean | null;\n}\n\nexport interface BetweenOperator {\n from: Scalar;\n to: Scalar;\n not?: boolean | null;\n}\n\nexport interface EqualOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface GreaterOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface GreaterOrEqualOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface InOperator {\n values: Array<Scalar>;\n not?: boolean | null;\n}\n\nexport interface LessOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface LessOrEqualOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface LikeOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface NullOperator {\n not?: boolean | null;\n}\n","import {cloneDeep, groupBy, uniq} from 'lodash-es';\nimport {LogicalOperator} from '../modules/search/classes/graphql-doctrine.types';\nimport {Literal} from '../types/types';\n\nexport function hasMixedGroupLogic(groups: Literal[]): boolean {\n // Complete lack of definition by fallback on AND operator\n const completedGroups = cloneDeep(groups).map(group => {\n if (!group.groupLogic) {\n group.groupLogic = LogicalOperator.AND;\n }\n\n return group;\n });\n\n const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1), 'groupLogic')));\n\n return groupLogics.length > 1;\n}\n","import {cloneDeep, defaultsDeep, isArray, mergeWith, omit} from 'lodash-es';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../types/types';\nimport {mergeOverrideArray} from './utility';\nimport {hasMixedGroupLogic} from './query-variable-manager-utils';\n\nexport interface QueryVariables {\n filter?: any | null;\n pagination?: PaginationInput | null;\n sorting?: Array<Sorting> | null;\n}\n\nexport interface PaginationInput {\n offset?: number | null;\n pageIndex?: number | null;\n pageSize?: number | null;\n}\n\nexport interface Sorting {\n field: any;\n order?: SortingOrder | null;\n nullAsHighest?: boolean | null;\n emptyStringAsHighest?: boolean | null;\n}\n\nexport enum SortingOrder {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\n/**\n * During lodash merge, concat arrays\n */\nfunction mergeConcatArray(destValue: any, source: any): any {\n if (isArray(source)) {\n if (destValue) {\n return destValue.concat(source);\n } else {\n return source;\n }\n }\n}\n\n/**\n * Filter manager stores a set of channels that contain a variable object and exposes an observable \"variables\" that updates with the result\n * of all channels merged together.\n *\n * A channel is supposed to be used by a given aspect of the GUI (pagination, sorting, search, others ?).\n *\n * ```ts\n * const fm = new QueryVariablesManager();\n * fm.merge('componentA-variables', {a : [1, 2, 3]});\n * ```\n *\n * Variables attributes is a BehaviorSubject. That mean it's not mandatory to subscribe, we can just call getValue or value attributes on\n * it :\n *\n * ```ts\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for 'componentA-variables':\n *\n * ```ts\n * fm.merge('componentA-variables', {a : [1, 2]});\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for new channel:\n *\n * ```ts\n * fm.merge('componentB-variables', {a : [3, 4]});\n * console.log(fm.variables.value); // {a : [1, 2, 3, 4]}\n * ```\n */\nexport class NaturalQueryVariablesManager<T extends QueryVariables = QueryVariables> {\n public readonly variables: BehaviorSubject<T | undefined> = new BehaviorSubject<T | undefined>(undefined);\n private readonly channels: Map<string, Partial<T>> = new Map<string, Partial<T>>();\n\n public constructor(queryVariablesManager?: NaturalQueryVariablesManager<T>) {\n if (queryVariablesManager) {\n this.channels = queryVariablesManager.getChannelsCopy();\n this.updateVariables();\n }\n }\n\n /**\n * Set or override all the variables that may exist in the given channel\n */\n public set(channelName: string, variables: Partial<T> | null | undefined): void {\n // cloneDeep to change reference and prevent some interactions when merge\n if (variables) {\n this.channels.set(channelName, cloneDeep(variables));\n } else {\n this.channels.delete(channelName);\n }\n this.updateVariables();\n }\n\n /**\n * Return a deep clone of the variables for the given channel name.\n *\n * Avoid returning the same reference to prevent an attribute change, then another channel update that would\n * used this changed attribute without having explicitly asked QueryVariablesManager to update it.\n */\n public get(channelName: string): Partial<T> | undefined {\n return cloneDeep(this.channels.get(channelName));\n }\n\n /**\n * Merge variable into a channel, overriding arrays in same channel / key\n */\n public merge(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n mergeWith(variables, cloneDeep(newVariables), mergeOverrideArray); // merge preserves references, cloneDeep prevent that\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n /**\n * Apply default values to a channel\n * Note : lodash defaults only defines values on destinations keys that are undefined\n */\n public defaults(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n defaultsDeep(variables, newVariables);\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n private getChannelsCopy(): Map<string, Partial<T>> {\n return new Map<string, Partial<T>>(this.channels);\n }\n\n /**\n * Merge channels in a single object\n * Arrays are concatenated\n * Filter groups are combined smartly (see mergeGroupList)\n */\n private updateVariables(): void {\n const merged: T = {} as T;\n\n this.channels.forEach(channelVariables => {\n if (channelVariables.filter) {\n // Merge filter's groups first\n const groups = this.mergeGroupList(\n merged.filter && merged.filter.groups ? merged.filter.groups : [],\n channelVariables.filter.groups || [],\n );\n\n // Merge filter key (that contain groups)\n if (groups && groups.length) {\n if (merged.filter) {\n merged.filter.groups = groups;\n } else {\n merged.filter = {groups: groups};\n }\n } else {\n mergeWith(merged, {filter: channelVariables.filter}, mergeConcatArray);\n }\n }\n\n // Merge other attributes than filter\n mergeWith(merged, omit(channelVariables, 'filter'), mergeConcatArray);\n });\n\n this.variables.next(merged);\n }\n\n /**\n * Cross merge two filters\n * Only accepts groups with same groupLogic (ignores the first one, because there is no groupLogic in this one)\n * @throws In case two non-empty lists of groups are given and at one of them mix groupLogic value, throws an error\n */\n private mergeGroupList(groupsA: Literal[], groupsB: Literal[]): Literal {\n if (groupsA.length === 0 && groupsB.length === 0) {\n return []; // empty listings, return empty lists\n }\n\n if (groupsA.length === 0 && groupsB.length > 0) {\n return groupsB; // One list is empty, return the one that is not\n }\n\n if (groupsB.length === 0 && groupsA.length > 0) {\n return groupsA; // One list is empty, return the one that is not\n }\n\n const groups: Literal[] = [];\n\n if (hasMixedGroupLogic(groupsA) || hasMixedGroupLogic(groupsB)) {\n throw Error('QueryVariables groups contain mixed group logics');\n }\n\n groupsA.forEach(groupA => {\n groupsB.forEach(groupB => {\n groups.push(mergeWith(cloneDeep(groupA), groupB, mergeConcatArray));\n });\n });\n\n return groups;\n }\n}\n","/**\n * Array of valid top-level-domains\n * IanaVersion 2020033100\n *\n * This should ideally be kept in sync with \\Laminas\\Validator\\Hostname\n *\n * See ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain\n * See http://www.iana.org/domains/root/db/ Official list of supported TLDs\n */\nexport const validTlds: Readonly<string[]> = [\n 'aaa',\n 'aarp',\n 'abarth',\n 'abb',\n 'abbott',\n 'abbvie',\n 'abc',\n 'able',\n 'abogado',\n 'abudhabi',\n 'ac',\n 'academy',\n 'accenture',\n 'accountant',\n 'accountants',\n 'aco',\n 'actor',\n 'ad',\n 'adac',\n 'ads',\n 'adult',\n 'ae',\n 'aeg',\n 'aero',\n 'aetna',\n 'af',\n 'afamilycompany',\n 'afl',\n 'africa',\n 'ag',\n 'agakhan',\n 'agency',\n 'ai',\n 'aig',\n 'aigo',\n 'airbus',\n 'airforce',\n 'airtel',\n 'akdn',\n 'al',\n 'alfaromeo',\n 'alibaba',\n 'alipay',\n 'allfinanz',\n 'allstate',\n 'ally',\n 'alsace',\n 'alstom',\n 'am',\n 'americanexpress',\n 'americanfamily',\n 'amex',\n 'amfam',\n 'amica',\n 'amsterdam',\n 'analytics',\n 'android',\n 'anquan',\n 'anz',\n 'ao',\n 'aol',\n 'apartments',\n 'app',\n 'apple',\n 'aq',\n 'aquarelle',\n 'ar',\n 'arab',\n 'aramco',\n 'archi',\n 'army',\n 'arpa',\n 'art',\n 'arte',\n 'as',\n 'asda',\n 'asia',\n 'associates',\n 'at',\n 'athleta',\n 'attorney',\n 'au',\n 'auction',\n 'audi',\n 'audible',\n 'audio',\n 'auspost',\n 'author',\n 'auto',\n 'autos',\n 'avianca',\n 'aw',\n 'aws',\n 'ax',\n 'axa',\n 'az',\n 'azure',\n 'ba',\n 'baby',\n 'baidu',\n 'banamex',\n 'bananarepublic',\n 'band',\n 'bank',\n 'bar',\n 'barcelona',\n 'barclaycard',\n 'barclays',\n 'barefoot',\n 'bargains',\n 'baseball',\n 'basketball',\n 'bauhaus',\n 'bayern',\n 'bb',\n 'bbc',\n 'bbt',\n 'bbva',\n 'bcg',\n 'bcn',\n 'bd',\n 'be',\n 'beats',\n 'beauty',\n 'beer',\n 'bentley',\n 'berlin',\n 'best',\n 'bestbuy',\n 'bet',\n 'bf',\n 'bg',\n 'bh',\n 'bharti',\n 'bi',\n 'bible',\n 'bid',\n 'bike',\n 'bing',\n 'bingo',\n 'bio',\n 'biz',\n 'bj',\n 'black',\n 'blackfriday',\n 'blockbuster',\n 'blog',\n 'bloomberg',\n 'blue',\n 'bm',\n 'bms',\n 'bmw',\n 'bn',\n 'bnpparibas',\n 'bo',\n 'boats',\n 'boehringer',\n 'bofa',\n 'bom',\n 'bond',\n 'boo',\n 'book',\n 'booking',\n 'bosch',\n 'bostik',\n 'boston',\n 'bot',\n 'boutique',\n 'box',\n 'br',\n 'bradesco',\n 'bridgestone',\n 'broadway',\n 'broker',\n 'brother',\n 'brussels',\n 'bs',\n 'bt',\n 'budapest',\n 'bugatti',\n 'build',\n 'builders',\n 'business',\n 'buy',\n 'buzz',\n 'bv',\n 'bw',\n 'by',\n 'bz',\n 'bzh',\n 'ca',\n 'cab',\n 'cafe',\n 'cal',\n 'call',\n 'calvinklein',\n 'cam',\n 'camera',\n 'camp',\n 'cancerresearch',\n 'canon',\n 'capetown',\n 'capital',\n 'capitalone',\n 'car',\n 'caravan',\n 'cards',\n 'care',\n 'career',\n 'careers',\n 'cars',\n 'casa',\n 'case',\n 'caseih',\n 'cash',\n 'casino',\n 'cat',\n 'catering',\n 'catholic',\n 'cba',\n 'cbn',\n 'cbre',\n 'cbs',\n 'cc',\n 'cd',\n 'ceb',\n 'center',\n 'ceo',\n 'cern',\n 'cf',\n 'cfa',\n 'cfd',\n 'cg',\n 'ch',\n 'chanel',\n 'channel',\n 'charity',\n 'chase',\n 'chat',\n 'cheap',\n 'chintai',\n 'christmas',\n 'chrome',\n 'church',\n 'ci',\n 'cipriani',\n 'circle',\n 'cisco',\n 'citadel',\n 'citi',\n 'citic',\n 'city',\n 'cityeats',\n 'ck',\n 'cl',\n 'claims',\n 'cleaning',\n 'click',\n 'clinic',\n 'clinique',\n 'clothing',\n 'cloud',\n 'club',\n 'clubmed',\n 'cm',\n 'cn',\n 'co',\n 'coach',\n 'codes',\n 'coffee',\n 'college',\n 'cologne',\n 'com',\n 'comcast',\n 'commbank',\n 'community',\n 'company',\n 'compare',\n 'computer',\n 'comsec',\n 'condos',\n 'construction',\n 'consulting',\n 'contact',\n 'contractors',\n 'cooking',\n 'cookingchannel',\n 'cool',\n 'coop',\n 'corsica',\n 'country',\n 'coupon',\n 'coupons',\n 'courses',\n 'cpa',\n 'cr',\n 'credit',\n 'creditcard',\n 'creditunion',\n 'cricket',\n 'crown',\n 'crs',\n 'cruise',\n 'cruises',\n 'csc',\n 'cu',\n 'cuisinella',\n 'cv',\n 'cw',\n 'cx',\n 'cy',\n 'cymru',\n 'cyou',\n 'cz',\n 'dabur',\n 'dad',\n 'dance',\n 'data',\n 'date',\n 'dating',\n 'datsun',\n 'day',\n 'dclk',\n 'dds',\n 'de',\n 'deal',\n 'dealer',\n 'deals',\n 'degree',\n 'delivery',\n 'dell',\n 'deloitte',\n 'delta',\n 'democrat',\n 'dental',\n 'dentist',\n 'desi',\n 'design',\n 'dev',\n 'dhl',\n 'diamonds',\n 'diet',\n 'digital',\n 'direct',\n 'directory',\n 'discount',\n 'discover',\n 'dish',\n 'diy',\n 'dj',\n 'dk',\n 'dm',\n 'dnp',\n 'do',\n 'docs',\n 'doctor',\n 'dog',\n 'domains',\n 'dot',\n 'download',\n 'drive',\n 'dtv',\n 'dubai',\n 'duck',\n 'dunlop',\n 'dupont',\n 'durban',\n 'dvag',\n 'dvr',\n 'dz',\n 'earth',\n 'eat',\n 'ec',\n 'eco',\n 'edeka',\n 'edu',\n 'education',\n 'ee',\n 'eg',\n 'email',\n 'emerck',\n 'energy',\n 'engineer',\n 'engineering',\n 'enterprises',\n 'epson',\n 'equipment',\n 'er',\n 'ericsson',\n 'erni',\n 'es',\n 'esq',\n 'estate',\n 'esurance',\n 'et',\n 'etisalat',\n 'eu',\n 'eurovision',\n 'eus',\n 'events',\n 'exchange',\n 'expert',\n 'exposed',\n 'express',\n 'extraspace',\n 'fage',\n 'fail',\n 'fairwinds',\n 'faith',\n 'family',\n 'fan',\n 'fans',\n 'farm',\n 'farmers',\n 'fashion',\n 'fast',\n 'fedex',\n 'feedback',\n 'ferrari',\n 'ferrero',\n 'fi',\n 'fiat',\n 'fidelity',\n 'fido',\n 'film',\n 'final',\n 'finance',\n 'financial',\n 'fire',\n 'firestone',\n 'firmdale',\n 'fish',\n 'fishing',\n 'fit',\n 'fitness',\n 'fj',\n 'fk',\n 'flickr',\n 'flights',\n 'flir',\n 'florist',\n 'flowers',\n 'fly',\n 'fm',\n 'fo',\n 'foo',\n 'food',\n 'foodnetwork',\n 'football',\n 'ford',\n 'forex',\n 'forsale',\n 'forum',\n 'foundation',\n 'fox',\n 'fr',\n 'free',\n 'fresenius',\n 'frl',\n 'frogans',\n 'frontdoor',\n 'frontier',\n 'ftr',\n 'fujitsu',\n 'fujixerox',\n 'fun',\n 'fund',\n 'furniture',\n 'futbol',\n 'fyi',\n 'ga',\n 'gal',\n 'gallery',\n 'gallo',\n 'gallup',\n 'game',\n 'games',\n 'gap',\n 'garden',\n 'gay',\n 'gb',\n 'gbiz',\n 'gd',\n 'gdn',\n 'ge',\n 'gea',\n 'gent',\n 'genting',\n 'george',\n 'gf',\n 'gg',\n 'ggee',\n 'gh',\n 'gi',\n 'gift',\n 'gifts',\n 'gives',\n 'giving',\n 'gl',\n 'glade',\n 'glass',\n 'gle',\n 'global',\n 'globo',\n 'gm',\n 'gmail',\n 'gmbh',\n 'gmo',\n 'gmx',\n 'gn',\n 'godaddy',\n 'gold',\n 'goldpoint',\n 'golf',\n 'goo',\n 'goodyear',\n 'goog',\n 'google',\n 'gop',\n 'got',\n 'gov',\n 'gp',\n 'gq',\n 'gr',\n 'grainger',\n 'graphics',\n 'gratis',\n 'green',\n 'gripe',\n 'grocery',\n 'group',\n 'gs',\n 'gt',\n 'gu',\n 'guardian',\n 'gucci',\n 'guge',\n 'guide',\n 'guitars',\n 'guru',\n 'gw',\n 'gy',\n 'hair',\n 'hamburg',\n 'hangout',\n 'haus',\n 'hbo',\n 'hdfc',\n 'hdfcbank',\n 'health',\n 'healthcare',\n 'help',\n 'helsinki',\n 'here',\n 'hermes',\n 'hgtv',\n 'hiphop',\n 'hisamitsu',\n 'hitachi',\n 'hiv',\n 'hk',\n 'hkt',\n 'hm',\n 'hn',\n 'hockey',\n 'holdings',\n 'holiday',\n 'homedepot',\n 'homegoods',\n 'homes',\n 'homesense',\n 'honda',\n 'horse',\n 'hospital',\n 'host',\n 'hosting',\n 'hot',\n 'hoteles',\n 'hotels',\n 'hotmail',\n 'house',\n 'how',\n 'hr',\n 'hsbc',\n 'ht',\n 'hu',\n 'hughes',\n 'hyatt',\n 'hyundai',\n 'ibm',\n 'icbc',\n 'ice',\n 'icu',\n 'id',\n 'ie',\n 'ieee',\n 'ifm',\n 'ikano',\n 'il',\n 'im',\n 'imamat',\n 'imdb',\n 'immo',\n 'immobilien',\n 'in',\n 'inc',\n 'industries',\n 'infiniti',\n 'info',\n 'ing',\n 'ink',\n 'institute',\n 'insurance',\n 'insure',\n 'int',\n 'intel',\n 'international',\n 'intuit',\n 'investments',\n 'io',\n 'ipiranga',\n 'iq',\n 'ir',\n 'irish',\n 'is',\n 'ismaili',\n 'ist',\n 'istanbul',\n 'it',\n 'itau',\n 'itv',\n 'iveco',\n 'jaguar',\n 'java',\n 'jcb',\n 'jcp',\n 'je',\n 'jeep',\n 'jetzt',\n 'jewelry',\n 'jio',\n 'jll',\n 'jm',\n 'jmp',\n 'jnj',\n 'jo',\n 'jobs',\n 'joburg',\n 'jot',\n 'joy',\n 'jp',\n 'jpmorgan',\n 'jprs',\n 'juegos',\n 'juniper',\n 'kaufen',\n 'kddi',\n 'ke',\n 'kerryhotels',\n 'kerrylogistics',\n 'kerryproperties',\n 'kfh',\n 'kg',\n 'kh',\n 'ki',\n 'kia',\n 'kim',\n 'kinder',\n 'kindle',\n 'kitchen',\n 'kiwi',\n 'km',\n 'kn',\n 'koeln',\n 'komatsu',\n 'kosher',\n 'kp',\n 'kpmg',\n 'kpn',\n 'kr',\n 'krd',\n 'kred',\n 'kuokgroup',\n 'kw',\n 'ky',\n 'kyoto',\n 'kz',\n 'la',\n 'lacaixa',\n 'lamborghini',\n 'lamer',\n 'lancaster',\n 'lancia',\n 'land',\n 'landrover',\n 'lanxess',\n 'lasalle',\n 'lat',\n 'latino',\n 'latrobe',\n 'law',\n 'lawyer',\n 'lb',\n 'lc',\n 'lds',\n 'lease',\n 'leclerc',\n 'lefrak',\n 'legal',\n 'lego',\n 'lexus',\n 'lgbt',\n 'li',\n 'lidl',\n 'life',\n 'lifeinsurance',\n 'lifestyle',\n 'lighting',\n 'like',\n 'lilly',\n 'limited',\n 'limo',\n 'lincoln',\n 'linde',\n 'link',\n 'lipsy',\n 'live',\n 'living',\n 'lixil',\n 'lk',\n 'llc',\n 'llp',\n 'loan',\n 'loans',\n 'locker',\n 'locus',\n 'loft',\n 'lol',\n 'london',\n 'lotte',\n 'lotto',\n 'love',\n 'lpl',\n 'lplfinancial',\n 'lr',\n 'ls',\n 'lt',\n 'ltd',\n 'ltda',\n 'lu',\n 'lundbeck',\n 'lupin',\n 'luxe',\n 'luxury',\n 'lv',\n 'ly',\n 'ma',\n 'macys',\n 'madrid',\n 'maif',\n 'maison',\n 'makeup',\n 'man',\n 'management',\n 'mango',\n 'map',\n 'market',\n 'marketing',\n 'markets',\n 'marriott',\n 'marshalls',\n 'maserati',\n 'mattel',\n 'mba',\n 'mc',\n 'mckinsey',\n 'md',\n 'me',\n 'med',\n 'media',\n 'meet',\n 'melbourne',\n 'meme',\n 'memorial',\n 'men',\n 'menu',\n 'merckmsd',\n 'metlife',\n 'mg',\n 'mh',\n 'miami',\n 'microsoft',\n 'mil',\n 'mini',\n 'mint',\n 'mit',\n 'mitsubishi',\n 'mk',\n 'ml',\n 'mlb',\n 'mls',\n 'mm',\n 'mma',\n 'mn',\n 'mo',\n 'mobi',\n 'mobile',\n 'moda',\n 'moe',\n 'moi',\n 'mom',\n 'monash',\n 'money',\n 'monster',\n 'mormon',\n 'mortgage',\n 'moscow',\n 'moto',\n 'motorcycles',\n 'mov',\n 'movie',\n 'mp',\n 'mq',\n 'mr',\n 'ms',\n 'msd',\n 'mt',\n 'mtn',\n 'mtr',\n 'mu',\n 'museum',\n 'mutual',\n 'mv',\n 'mw',\n 'mx',\n 'my',\n 'mz',\n 'na',\n 'nab',\n 'nagoya',\n 'name',\n 'nationwide',\n 'natura',\n 'navy',\n 'nba',\n 'nc',\n 'ne',\n 'nec',\n 'net',\n 'netbank',\n 'netflix',\n 'network',\n 'neustar',\n 'new',\n 'newholland',\n 'news',\n 'next',\n 'nextdirect',\n 'nexus',\n 'nf',\n 'nfl',\n 'ng',\n 'ngo',\n 'nhk',\n 'ni',\n 'nico',\n 'nike',\n 'nikon',\n 'ninja',\n 'nissan',\n 'nissay',\n 'nl',\n 'no',\n 'nokia',\n 'northwesternmutual',\n 'norton',\n 'now',\n 'nowruz',\n 'nowtv',\n 'np',\n 'nr',\n 'nra',\n 'nrw',\n 'ntt',\n 'nu',\n 'nyc',\n 'nz',\n 'obi',\n 'observer',\n 'off',\n 'office',\n 'okinawa',\n 'olayan',\n 'olayangroup',\n 'oldnavy',\n 'ollo',\n 'om',\n 'omega',\n 'one',\n 'ong',\n 'onl',\n 'online',\n 'onyourside',\n 'ooo',\n 'open',\n 'oracle',\n 'orange',\n 'org',\n 'organic',\n 'origins',\n 'osaka',\n 'otsuka',\n 'ott',\n 'ovh',\n 'pa',\n 'page',\n 'panasonic',\n 'paris',\n 'pars',\n 'partners',\n 'parts',\n 'party',\n 'passagens',\n 'pay',\n 'pccw',\n 'pe',\n 'pet',\n 'pf',\n 'pfizer',\n 'pg',\n 'ph',\n 'pharmacy',\n 'phd',\n 'philips',\n 'phone',\n 'photo',\n 'photography',\n 'photos',\n 'physio',\n 'pics',\n 'pictet',\n 'pictures',\n 'pid',\n 'pin',\n 'ping',\n 'pink',\n 'pioneer',\n 'pizza',\n 'pk',\n 'pl',\n 'place',\n 'play',\n 'playstation',\n 'plumbing',\n 'plus',\n 'pm',\n 'pn',\n 'pnc',\n 'pohl',\n 'poker',\n 'politie',\n 'porn',\n 'post',\n 'pr',\n 'pramerica',\n 'praxi',\n 'press',\n 'prime',\n 'pro',\n 'prod',\n 'productions',\n 'prof',\n 'progressive',\n 'promo',\n 'properties',\n 'property',\n 'protection',\n 'pru',\n 'prudential',\n 'ps',\n 'pt',\n 'pub',\n 'pw',\n 'pwc',\n 'py',\n 'qa',\n 'qpon',\n 'quebec',\n 'quest',\n 'qvc',\n 'racing',\n 'radio',\n 'raid',\n 're',\n 'read',\n 'realestate',\n 'realtor',\n 'realty',\n 'recipes',\n 'red',\n 'redstone',\n 'redumbrella',\n 'rehab',\n 'reise',\n 'reisen',\n 'reit',\n 'reliance',\n 'ren',\n 'rent',\n 'rentals',\n 'repair',\n 'report',\n 'republican',\n 'rest',\n 'restaurant',\n 'review',\n 'reviews',\n 'rexroth',\n 'rich',\n 'richardli',\n 'ricoh',\n 'rightathome',\n 'ril',\n 'rio',\n 'rip',\n 'rmit',\n 'ro',\n 'rocher',\n 'rocks',\n 'rodeo',\n 'rogers',\n 'room',\n 'rs',\n 'rsvp',\n 'ru',\n 'rugby',\n 'ruhr',\n 'run',\n 'rw',\n 'rwe',\n 'ryukyu',\n 'sa',\n 'saarland',\n 'safe',\n 'safety',\n 'sakura',\n 'sale',\n 'salon',\n 'samsclub',\n 'samsung',\n 'sandvik',\n 'sandvikcoromant',\n 'sanofi',\n 'sap',\n 'sarl',\n 'sas',\n 'save',\n 'saxo',\n 'sb',\n 'sbi',\n 'sbs',\n 'sc',\n 'sca',\n 'scb',\n 'schaeffler',\n 'schmidt',\n 'scholarships',\n 'school',\n 'schule',\n 'schwarz',\n 'science',\n 'scjohnson',\n 'scor',\n 'scot',\n 'sd',\n 'se',\n 'search',\n 'seat',\n 'secure',\n 'security',\n 'seek',\n 'select',\n 'sener',\n 'services',\n 'ses',\n 'seven',\n 'sew',\n 'sex',\n 'sexy',\n 'sfr',\n 'sg',\n 'sh',\n 'shangrila',\n 'sharp',\n 'shaw',\n 'shell',\n 'shia',\n 'shiksha',\n 'shoes',\n 'shop',\n 'shopping',\n 'shouji',\n 'show',\n 'showtime',\n 'shriram',\n 'si',\n 'silk',\n 'sina',\n 'singles',\n 'site',\n 'sj',\n 'sk',\n 'ski',\n 'skin',\n 'sky',\n 'skype',\n 'sl',\n 'sling',\n 'sm',\n 'smart',\n 'smile',\n 'sn',\n 'sncf',\n 'so',\n 'soccer',\n 'social',\n 'softbank',\n 'software',\n 'sohu',\n 'solar',\n 'solutions',\n 'song',\n 'sony',\n 'soy',\n 'space',\n 'sport',\n 'spot',\n 'spreadbetting',\n 'sr',\n 'srl',\n 'ss',\n 'st',\n 'stada',\n 'staples',\n 'star',\n 'statebank',\n 'statefarm',\n 'stc',\n 'stcgroup',\n 'stockholm',\n 'storage',\n 'store',\n 'stream',\n 'studio',\n 'study',\n 'style',\n 'su',\n 'sucks',\n 'supplies',\n 'supply',\n 'support',\n 'surf',\n 'surgery',\n 'suzuki',\n 'sv',\n 'swatch',\n 'swiftcover',\n 'swiss',\n 'sx',\n 'sy',\n 'sydney',\n 'symantec',\n 'systems',\n 'sz',\n 'tab',\n 'taipei',\n 'talk',\n 'taobao',\n 'target',\n 'tatamotors',\n 'tatar',\n 'tattoo',\n 'tax',\n 'taxi',\n 'tc',\n 'tci',\n 'td',\n 'tdk',\n 'team',\n 'tech',\n 'technology',\n 'tel',\n 'temasek',\n 'tennis',\n 'teva',\n 'tf',\n 'tg',\n 'th',\n 'thd',\n 'theater',\n 'theatre',\n 'tiaa',\n 'tickets',\n 'tienda',\n 'tiffany',\n 'tips',\n 'tires',\n 'tirol',\n 'tj',\n 'tjmaxx',\n 'tjx',\n 'tk',\n 'tkmaxx',\n 'tl',\n 'tm',\n 'tmall',\n 'tn',\n 'to',\n 'today',\n 'tokyo',\n 'tools',\n 'top',\n 'toray',\n 'toshiba',\n 'total',\n 'tours',\n 'town',\n 'toyota',\n 'toys',\n 'tr',\n 'trade',\n 'trading',\n 'training',\n 'travel',\n 'travelchannel',\n 'travelers',\n 'travelersinsurance',\n 'trust',\n 'trv',\n 'tt',\n 'tube',\n 'tui',\n 'tunes',\n 'tushu',\n 'tv',\n 'tvs',\n 'tw',\n 'tz',\n 'ua',\n 'ubank',\n 'ubs',\n 'ug',\n 'uk',\n 'unicom',\n 'university',\n 'uno',\n 'uol',\n 'ups',\n 'us',\n 'uy',\n 'uz',\n 'va',\n 'vacations',\n 'vana',\n 'vanguard',\n 'vc',\n 've',\n 'vegas',\n 'ventures',\n 'verisign',\n 'versicherung',\n 'vet',\n 'vg',\n 'vi',\n 'viajes',\n 'video',\n 'vig',\n 'viking',\n 'villas',\n 'vin',\n 'vip',\n 'virgin',\n 'visa',\n 'vision',\n 'viva',\n 'vivo',\n 'vlaanderen',\n 'vn',\n 'vodka',\n 'volkswagen',\n 'volvo',\n 'vote',\n 'voting',\n 'voto',\n 'voyage',\n 'vu',\n 'vuelos',\n 'wales',\n 'walmart',\n 'walter',\n 'wang',\n 'wanggou',\n 'watch',\n 'watches',\n 'weather',\n 'weatherchannel',\n 'webcam',\n 'weber',\n 'website',\n 'wed',\n 'wedding',\n 'weibo',\n 'weir',\n 'wf',\n 'whoswho',\n 'wien',\n 'wiki',\n 'williamhill',\n 'win',\n 'windows',\n 'wine',\n 'winners',\n 'wme',\n 'wolterskluwer',\n 'woodside',\n 'work',\n 'works',\n 'world',\n 'wow',\n 'ws',\n 'wtc',\n 'wtf',\n 'xbox',\n 'xerox',\n 'xfinity',\n 'xihuan',\n 'xin',\n 'कॉम',\n 'セール',\n '佛山',\n 'ಭಾರತ',\n '慈善',\n '集团',\n '在线',\n '한국',\n 'ଭାରତ',\n '大众汽车',\n '点看',\n 'คอม',\n 'ভাৰত',\n 'ভারত',\n '八卦',\n 'موقع',\n 'বাংলা',\n '公益',\n '公司',\n '香格里拉',\n '网站',\n '移动',\n '我爱你',\n 'москва',\n 'қаз',\n 'католик',\n 'онлайн',\n 'сайт',\n '联通',\n 'срб',\n 'бг',\n 'бел',\n 'קום',\n '时尚',\n '微博',\n '淡马锡',\n 'ファッション',\n 'орг',\n 'नेट',\n 'ストア',\n '삼성',\n 'சிங்கப்பூர்',\n '商标',\n '商店',\n '商城',\n 'дети',\n 'мкд',\n 'ею',\n 'ポイント',\n '新闻',\n '工行',\n '家電',\n 'كوم',\n '中文网',\n '中信',\n '中国',\n '中國',\n '娱乐',\n '谷歌',\n 'భారత్',\n 'ලංකා',\n '電訊盈科',\n '购物',\n 'クラウド',\n 'ભારત',\n '通販',\n 'भारतम्',\n 'भारत',\n 'भारोत',\n '网店',\n 'संगठन',\n '餐厅',\n '网络',\n 'ком',\n 'укр',\n '香港',\n '诺基亚',\n '食品',\n '飞利浦',\n '台湾',\n '台灣',\n '手表',\n '手机',\n 'мон',\n 'الجزائر',\n 'عمان',\n 'ارامكو',\n 'ایران',\n 'العليان',\n 'اتصالات',\n 'امارات',\n 'بازار',\n 'موريتانيا',\n 'پاکستان',\n 'الاردن',\n 'بارت',\n 'بھارت',\n 'المغرب',\n 'ابوظبي',\n 'البحرين',\n 'السعودية',\n 'ڀارت',\n 'كاثوليك',\n 'سودان',\n 'همراه',\n 'عراق',\n 'مليسيا',\n '澳門',\n '닷컴',\n '政府',\n 'شبكة',\n 'بيتك',\n 'عرب',\n 'გე',\n '机构',\n '组织机构',\n '健康',\n 'ไทย',\n 'سورية',\n '招聘',\n 'рус',\n 'рф',\n '珠宝',\n 'تونس',\n '大拿',\n 'ລາວ',\n 'みんな',\n 'グーグル',\n 'ευ',\n 'ελ',\n '世界',\n '書籍',\n 'ഭാരതം',\n 'ਭਾਰਤ',\n '网址',\n '닷넷',\n 'コム',\n '天主教',\n '游戏',\n 'vermögensberater',\n 'vermögensberatung',\n '企业',\n '信息',\n '嘉里大酒店',\n '嘉里',\n 'مصر',\n 'قطر',\n '广东',\n 'இலங்கை',\n 'இந்தியா',\n 'հայ',\n '新加坡',\n 'فلسطين',\n '政务',\n 'xxx',\n 'xyz',\n 'yachts',\n 'yahoo',\n 'yamaxun',\n 'yandex',\n 'ye',\n 'yodobashi',\n 'yoga',\n 'yokohama',\n 'you',\n 'youtube',\n 'yt',\n 'yun',\n 'za',\n 'zappos',\n 'zara',\n 'zero',\n 'zip',\n 'zm',\n 'zone',\n 'zuerich',\n 'zw',\n];\n","import {\n AbstractControl,\n AsyncValidatorFn,\n FormArray,\n FormControlStatus,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {Observable, of, timer} from 'rxjs';\nimport {filter, first, map, switchMap} from 'rxjs/operators';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {validTlds} from './tld';\nimport {FilterGroupCondition} from '../modules/search/classes/graphql-doctrine.types';\n\n/**\n * Returns an async validator function that checks that the form control value is unique\n */\nexport function unique<TService extends NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>>(\n fieldName: string,\n excludedId: string | null | undefined,\n modelService: TService,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n const condition: FilterGroupCondition = {};\n condition[fieldName] = {equal: {value: control.value}};\n\n if (excludedId) {\n condition['id'] = {equal: {value: excludedId, not: true}};\n }\n\n const variables: QueryVariables = {\n pagination: {pageIndex: 0, pageSize: 0},\n filter: {groups: [{conditions: [condition]}]},\n };\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n\n return timer(500).pipe(\n switchMap(() =>\n modelService.count(qvm).pipe(\n first(),\n map(count => (count > 0 ? {duplicateValue: count} : null)),\n ),\n ),\n );\n };\n}\n\n/**\n * Returns an async validator function that checks that the form control value is available\n *\n * Similar to `unique` validator, but allows to use a custom query for when the client does\n * not have permissions for `modelService.count()`.\n */\nexport function available(\n getAvailableQuery: (value: string, excludedId: string | null) => Observable<boolean>,\n excludedId: string | null = null,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n return timer(500).pipe(\n switchMap(() =>\n getAvailableQuery(control.value, excludedId).pipe(\n map(isAvailable => (isAvailable ? null : {available: true})),\n ),\n ),\n );\n };\n}\n\n/**\n * Return all errors recursively for the given Form or control\n */\nexport function collectErrors(control: AbstractControl<unknown>): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n if (control instanceof FormGroup || control instanceof FormArray) {\n errors = Object.entries(control.controls).reduce((acc: ValidationErrors | null, [key, childControl]) => {\n const childErrors = collectErrors(childControl);\n if (childErrors) {\n acc = {...acc, [key]: childErrors};\n }\n return acc;\n }, null);\n }\n\n if (!errors) {\n errors = control.errors;\n }\n\n return errors;\n}\n\n/**\n * Force validation of all form controls recursively.\n *\n * Recursively mark descending form tree as dirty and touched in order to show all invalid fields on demand.\n * Typically used when creating a new object and user clicked on create button but several fields were not\n * touched and are invalid.\n */\nexport function validateAllFormControls(control: AbstractControl<unknown>): void {\n control.markAsDirty({onlySelf: true});\n control.markAsTouched({onlySelf: true});\n\n if (control instanceof FormGroup || control instanceof FormArray) {\n for (const [, child] of Object.entries(control.controls)) {\n validateAllFormControls(child);\n }\n }\n}\n\nfunction isValid(status: FormControlStatus): status is 'VALID' {\n return status === 'VALID';\n}\n\n/**\n * Emits exactly 0 or 1 time:\n *\n * - if the form is VALID, emits immediately\n * - if the form is PENDING emits if it changes from PENDING to VALID\n * - any other cases will **never** emit\n */\nexport function ifValid(control: AbstractControl): Observable<'VALID'> {\n const observable = control.pending ? control.statusChanges.pipe(first()) : of(control.status);\n\n return observable.pipe(filter(isValid));\n}\n\n// This is is an approximation of RFC_5322 where the hostname:\n//\n// - is too strict because it rejects IP address\n// - is too lax because it accepts pretty much anything else\n//\n// but the TLD will be validated against a whitelist so that should make the whole thing acceptable\nconst RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[^@ ]+\\.[^@]+$/u;\n\n/**\n * Validate an email address according to RFC, and also that it is publicly deliverable (not \"root@localhost\" or \"root@127.0.0.1\")\n *\n * This is meant to replace **all** usages of Angular too permissive `Validators.email`\n */\nexport function deliverableEmail(control: AbstractControl): ValidationErrors | null {\n // don't validate empty values to allow optional controls\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const error = {email: true};\n if (value.length > 254) {\n return error;\n }\n\n if (!RFC_5322.test(value)) {\n return error;\n }\n\n const tld = value.split('.').pop();\n if (!validTlds.includes(tld)) {\n return error;\n }\n\n return null;\n}\n\n/**\n * Naive URL validator for \"normal\" web links, that is a bit too permissive\n *\n * It enforces:\n *\n * - http/https protocol\n * - one domain\n * - one tld\n *\n * It allows:\n *\n * - any number of subdomains\n * - any parameters\n * - any fragments\n * - any characters for any parts (does not conform to rfc1738)\n */\nexport const urlValidator = Validators.pattern(/^https?:\\/\\/(?:[^.\\s]+\\.)+[^.\\s]+$/);\n\n/**\n * Validates that the value is an integer (non-float)\n */\nexport function integer(control: AbstractControl): ValidationErrors | null {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n return Number.isInteger(parseFloat(control.value)) ? null : {integer: true};\n}\n\n/**\n * Validate that the value is a decimal number with up to `scale` digits\n *\n * The error contains the expected scale, so that the error message can explain\n * it to the end-user.\n */\nexport function decimal(scale: number): ValidatorFn {\n const regExp = new RegExp(`^-?\\\\d+(\\\\.\\\\d{0,${scale}})?$`);\n return control => {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const value = '' + control.value;\n if (value.match(regExp)) {\n return null;\n }\n\n return {decimal: scale};\n };\n}\n\n/**\n * For internal use to avoid re-creating regexp on each call of `money`\n */\nconst twoDecimals = decimal(2);\n\n/**\n * Validate that the value is an amount of money, meaning a number with at most 2 decimals\n */\nexport function money(control: AbstractControl): ValidationErrors | null {\n return twoDecimals(control) ? {money: true} : null;\n}\n","import {Directive, inject, OnInit} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {kebabCase, merge, mergeWith, omit} from 'lodash-es';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {ExtractTcreate, ExtractTone, ExtractTupdate, Literal} from '../types/types';\nimport {finalize} from 'rxjs/operators';\nimport {ifValid, validateAllFormControls} from './validators';\nimport {mergeOverrideArray} from './utility';\nimport {PaginatedData} from './data-source';\nimport {QueryVariables} from './query-variable-manager';\nimport {EMPTY, endWith, last, Observable, switchMap} from 'rxjs';\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractDetail<\n TService extends NaturalAbstractModelService<\n unknown,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n unknown,\n any\n >,\n >\n extends NaturalAbstractPanel\n implements OnInit\n{\n /**\n * Empty placeholder for data retrieved by the server\n */\n public override data: any = {\n model: {},\n };\n\n /**\n * Form that manages the data from the controller\n */\n public form: UntypedFormGroup = new UntypedFormGroup({});\n\n /**\n * Show / hides the bottom fab button (mostly to hide it when we are on other tabs where semantic of button can conflict with ...\n * semantic of data on other tab, like relations that list other objects)\n */\n public showFabButton = true;\n\n /**\n * Injected service\n */\n protected readonly alertService = inject(NaturalAlertService);\n\n /**\n * Injected service\n */\n protected readonly router = inject(Router);\n\n /**\n * Injected service\n */\n protected readonly route = inject(ActivatedRoute);\n\n public constructor(protected readonly key: string, public readonly service: TService) {\n super();\n }\n\n public ngOnInit(): void {\n if (!this.isPanel) {\n this.route.data.subscribe(data => {\n this.data = merge({model: this.service.getConsolidatedForClient()}, data[this.key]);\n this.data = merge(this.data, omit(data, [this.key]));\n this.initForm();\n });\n } else {\n this.initForm();\n }\n }\n\n public changeTab(index: number): void {\n this.showFabButton = index === 0;\n }\n\n public update(now = false): void {\n if (!this.data.model.id) {\n return;\n }\n\n validateAllFormControls(this.form);\n\n ifValid(this.form).subscribe(() => {\n this.formToData();\n const postUpdate = (model: ExtractTupdate<TService>): void => {\n this.alertService.info($localize`Mis à jour`);\n this.form.patchValue(model);\n this.postUpdate(model);\n };\n\n if (now) {\n this.service.updateNow(this.data.model).subscribe(postUpdate);\n } else {\n this.service.update(this.data.model).subscribe(postUpdate);\n }\n });\n }\n\n public create(redirect = true): void {\n validateAllFormControls(this.form);\n\n if (!this.form.valid) {\n return;\n }\n\n this.formToData();\n this.form.disable();\n\n this.service\n .create(this.data.model)\n .pipe(\n switchMap(model => {\n this.alertService.info($localize`Créé`);\n this.form.patchValue(model);\n\n return this.postCreate(model).pipe(endWith(model), last());\n }),\n switchMap(model => {\n if (redirect) {\n if (this.isPanel) {\n const oldUrl = this.router.url;\n const nextUrl = this.panelData?.config.params.nextRoute;\n const newUrl = oldUrl.replace('/new', '/' + model.id) + (nextUrl ? '/' + nextUrl : '');\n return this.router.navigateByUrl(newUrl); // replace /new by /123\n } else {\n return this.router.navigate(['..', model.id], {relativeTo: this.route});\n }\n }\n\n return EMPTY;\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n public delete(redirectionRoute?: unknown[]): void {\n this.form.disable();\n this.alertService\n .confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement cet élément ?`,\n $localize`Supprimer définitivement`,\n )\n .pipe(\n switchMap(confirmed => {\n if (!confirmed) {\n return EMPTY;\n }\n\n this.preDelete(this.data.model);\n\n return this.service.delete([this.data.model]).pipe(\n switchMap(() => {\n this.alertService.info($localize`Supprimé`);\n\n if (this.isPanel) {\n this.panelService?.goToPenultimatePanel();\n\n return EMPTY;\n } else {\n const defaultRoute = ['../../' + kebabCase(this.key)];\n return this.router.navigate(redirectionRoute ? redirectionRoute : defaultRoute, {\n relativeTo: this.route,\n });\n }\n }),\n );\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postUpdate(model: ExtractTupdate<TService>): void {\n // noop\n }\n\n /**\n * Returns an observable that will be subscribed to immediately and the\n * redirect navigation will only happen after the observable completes.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postCreate(model: ExtractTcreate<TService>): Observable<unknown> {\n return EMPTY;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected preDelete(model: ExtractTone<TService>): void {\n // noop\n }\n\n protected initForm(): void {\n this.form = this.service.getFormGroup(this.data.model);\n }\n\n /**\n * Merge values of form into `this.data.model`.\n */\n protected formToData(): void {\n mergeWith(this.data.model, this.form.value, mergeOverrideArray);\n }\n}\n","import {AbstractControl, UntypedFormArray, UntypedFormGroup} from '@angular/forms';\nimport {MatTableDataSource} from '@angular/material/table';\nimport {merge} from 'lodash-es';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalAbstractController} from './abstract-controller';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {validateAllFormControls} from './validators';\nimport {Directive} from '@angular/core';\nimport {PaginatedData} from './data-source';\n\n/**\n * This class helps managing non-paginated rows of items that can be edited in-place, typically in a <mat-table>.\n * But it does **not** mutate anything to persist the edits on the server. It is up to the consuming component to implement\n * custom mutation mechanism.\n *\n * To access data of this component from a parent component, use:\n *\n * ```\n * @ViewChildren(ComponentType) cmp: ComponentType;\n * this.cmp.getItems();\n * ```\n *\n * To add empty line, call:\n *\n * ```\n * this.cmp.addEmpty();\n * ```\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractEditableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // The Literal here is a bit too loose. Ideally we would like to express\n // \"it must be a union and one of the type in the union must be ExtractTallOne<TService>\"\n T extends Literal = ExtractTallOne<TService>,\n> extends NaturalAbstractController {\n public readonly form: UntypedFormGroup;\n public readonly formArray = new UntypedFormArray([]);\n public readonly variablesManager = new NaturalQueryVariablesManager<ExtractVall<TService>>();\n public readonly dataSource = new MatTableDataSource<AbstractControl>();\n\n public constructor(protected readonly service: TService) {\n super();\n\n // Create a form group with a line attributes that contain an array of formGroups (one by line = one by model)\n this.form = new UntypedFormGroup({rows: this.formArray});\n this.dataSource.data = this.formArray.controls;\n this.variablesManager.set('pagination', {pagination: {pageSize: 999, pageIndex: 0}} as ExtractVall<TService>);\n }\n\n /**\n * Set the list of items (overwriting what may have existed)\n */\n public setItems(items: readonly T[]): void {\n this.formArray.clear(); // reset list\n this.addItems(items);\n }\n\n /**\n * Add given items to the list\n * Reproduces the model data loading the same way as it would be on a detail page (via AbstractDetail controller) but without resolving\n */\n public addItems(items: readonly T[]): void {\n items.forEach(item => {\n const completedItem = merge(this.service.getConsolidatedForClient(), item);\n const lineFormGroup = this.service.getFormGroup(completedItem);\n this.formArray.push(lineFormGroup);\n });\n\n this.dataSource.data = this.formArray.controls;\n }\n\n public removeAt(index: number): void {\n this.formArray.removeAt(index);\n this.dataSource.data = this.formArray.controls;\n }\n\n /**\n * Add empty item at the end of the list\n */\n public addEmpty(): void {\n this.addItems([{} as T]);\n }\n\n /**\n * Return a list of models without any treatment.\n *\n * To mutate models, it would be required to map them using :\n * - AbstractModelService.getInput()\n * - AbstractModelService.getPartialVariablesForCreation()\n * - AbstractModelService.getPartialVariablesForUpdate()\n * - some other required treatment.\n *\n * TODO return type is incorrect and should be closer to `Partial<T>[]` or an even looser type, because we don't really know what fields exists in the form. When we fix this, we should also remove type coercing in unit tests.\n */\n public getItems(): T[] {\n return this.formArray.getRawValue();\n }\n\n /**\n * Force the form validation.\n *\n * The valid state can then be read via `this.form.valid`\n */\n public validateForm(): void {\n validateAllFormControls(this.form);\n }\n}\n","import {Facet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection} from '../types/values';\n\n/**\n * Lookup a facet by its `name` and then by its `field`, or return null if not found\n */\nexport function getFacetFromSelection(\n facets: NaturalSearchFacets | null,\n selection: NaturalSearchSelection,\n): Facet | null {\n if (!facets) {\n return null;\n }\n\n return (\n facets.find(facet => facet.name != null && facet.name === selection.name) ||\n facets.find(facet => facet.field === selection.field) ||\n null\n );\n}\n\n/**\n * Deep clone a literal via JSON serializing/unserializing\n *\n * It will **not** work with:\n *\n * - functions (will be removed)\n * - `undefined` (will be removed)\n * - cyclic references (will crash)\n * - objects (will be converted to `{}`)\n */\nexport function deepClone<T>(obj: T extends undefined ? never : T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n","import {NaturalSearchSelection} from '../types/values';\nimport {formatIsoDate} from '../../../classes/utility';\n\n/**\n * Wrap the searched value by `%` SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: '%foo%'}}}\n */\nexport function wrapLike(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = '%' + selection.condition.like.value + '%';\n }\n\n return selection;\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * attribute \"field\" or \"name\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {myFieldName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByField(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'field');\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * field \"name\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {myConfigName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByName(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'name');\n}\n\nfunction replaceOperatorByAttribute(\n selection: NaturalSearchSelection,\n attribute: 'name' | 'field',\n): NaturalSearchSelection {\n const oldOperator = Object.keys(selection.condition)[0];\n\n const attributeValue = selection[attribute];\n if (!attributeValue) {\n throw new Error('Attribute cannot be empty. Most likely the configuration was wrong');\n }\n\n selection.condition[attributeValue] = selection.condition[oldOperator];\n delete selection.condition[oldOperator];\n\n return selection;\n}\n\n/**\n * Replace `\"today\"` and `\"tomorrow\"` by their real value right now.\n *\n * This transformer is applied automatically and should **not** be part\n * of Natural public API.\n *\n * So:\n *\n * {field: 'myFieldName', condition: {greater: {value: 'today'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {greater: {value: '2023-01-03'}}}\n */\nexport function replaceToday(selection: NaturalSearchSelection): NaturalSearchSelection {\n const date = new Date();\n const today = formatIsoDate(date);\n\n date.setDate(date.getDate() + 1);\n const tomorrow = formatIsoDate(date);\n\n // Transparently adapt exclusive/inclusive ranges for special \"today\" value.\n // Ideally this should be done in `TypeDateComponent`, like it is done for real date values. But unfortunately I\n // could not find a reasonable way to do that while still being able to reload a coherent GUI without showing\n // \"Demain\" somewhere in the GUI. And that is something we want to avoid, we only want to show either \"Aujourd'hui\"\n // or a real date. Otherwise, the human would start thinking with \"Demain\", and it would then need to be properly\n // supported which over/complexify the code, the GUI and the workflow.\n const condition = selection.condition;\n if (Object.keys(condition).length === 1) {\n if (condition.lessOrEqual?.value === 'today') {\n delete condition.lessOrEqual;\n condition.less = {value: 'tomorrow'};\n } else if (condition.greater?.value === 'today') {\n delete condition.greater;\n condition.greaterOrEqual = {value: 'tomorrow'};\n }\n }\n\n for (const key in condition) {\n const operator = condition[key];\n if (operator && 'value' in operator) {\n if (operator.value === 'today') {\n operator.value = today;\n } else if (operator.value === 'tomorrow') {\n operator.value = tomorrow;\n }\n }\n }\n\n return selection;\n}\n","import {\n animate,\n AnimationTriggerMetadata,\n group,\n query,\n sequence,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by the mat-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n */\nexport const naturalDropdownAnimations: {\n readonly transformMenu: AnimationTriggerMetadata;\n readonly fadeInItems: AnimationTriggerMetadata;\n} = {\n /**\n * This animation controls the menu panel's entry and exit from the page.\n *\n * When the menu panel is added to the DOM, it scales in and fades in its border.\n *\n * When the menu panel is removed from the DOM, it simply fades out after a brief\n * delay to display the ripple.\n */\n transformMenu: trigger('transformMenu', [\n state(\n 'void',\n style({\n opacity: 0,\n // This starts off from 0.01, instead of 0, because there's an issue in the Angular animations\n // as of 4.2, which causes the animation to be skipped if it starts from 0.\n transform: 'scale(0.01, 0.01)',\n }),\n ),\n transition(\n 'void => enter',\n sequence([\n query('.natural-dropdown-container-content', style({opacity: 0})),\n animate('100ms linear', style({opacity: 1, transform: 'scale(1, 0.5)'})),\n group([\n query(\n '.natural-dropdown-container-content',\n animate('400ms cubic-bezier(0.55, 0, 0.55, 0.2)', style({opacity: 1})),\n ),\n animate('300ms cubic-bezier(0.25, 0.8, 0.25, 1)', style({transform: 'scale(1, 1)'})),\n ]),\n ]),\n ),\n transition('* => void', animate('150ms 50ms linear', style({opacity: 0}))),\n ]),\n\n /**\n * This animation fades in the background color and content of the menu panel\n * after its containing element is scaled in.\n */\n fadeInItems: trigger('fadeInItems', [\n // TODO(crisbeto): this is inside the `transformMenu`\n // now. Remove next time we do breaking changes.\n state('showing', style({opacity: 1})),\n transition('void => *', [style({opacity: 0}), animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')]),\n ]),\n};\n","import {AnimationEvent} from '@angular/animations';\nimport {ConfigurableFocusTrapFactory, FocusTrap} from '@angular/cdk/a11y';\nimport {BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule} from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Inject,\n InjectionToken,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {naturalDropdownAnimations} from './dropdown-container-animations';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NgIf} from '@angular/common';\n\nexport function throwMatDialogContentAlreadyAttachedError(): void {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n\nexport interface NaturalDropdownContainerData {\n showValidateButton: boolean;\n}\n\nexport const NATURAL_DROPDOWN_CONTAINER_DATA = new InjectionToken<NaturalDropdownContainerData>(\n 'NaturalDropdownContainerData',\n);\n\n@Component({\n templateUrl: './dropdown-container.component.html',\n styleUrls: ['./dropdown-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n animations: [naturalDropdownAnimations.transformMenu, naturalDropdownAnimations.fadeInItems],\n standalone: true,\n imports: [PortalModule, NgIf, MatButtonModule],\n})\nexport class NaturalDropdownContainerComponent extends BasePortalOutlet implements OnDestroy {\n @ViewChild(CdkPortalOutlet, {static: true}) public portalOutlet!: CdkPortalOutlet;\n @ViewChild(TemplateRef, {static: true}) public templateRef!: TemplateRef<any>;\n\n public readonly closed = new Subject<void>();\n\n /** Current state of the panel animation. */\n public panelAnimationState: 'void' | 'enter' = 'void';\n\n /** Emits whenever an animation on the menu completes. */\n private animationDone = new Subject<void>();\n\n private focusTrap: FocusTrap | null = null;\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n public constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n private readonly focusTrapFactory: ConfigurableFocusTrapFactory,\n @Inject(NATURAL_DROPDOWN_CONTAINER_DATA) public data: NaturalDropdownContainerData,\n ) {\n super();\n }\n\n public ngOnDestroy(): void {\n this.closed.complete();\n }\n\n public close(): void {\n this.closed.next();\n }\n\n public attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n return this.portalOutlet.attachTemplatePortal(portal);\n }\n\n public attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n if (this.portalOutlet.hasAttached()) {\n throwMatDialogContentAlreadyAttachedError();\n }\n\n return this.portalOutlet.attachComponentPortal(portal);\n }\n\n public startAnimation(): void {\n this.panelAnimationState = 'enter';\n }\n\n public onAnimationDone(event: AnimationEvent): void {\n if (event.toState === 'enter') {\n this.trapFocus();\n } else if (event.toState === 'exit') {\n this.restoreFocus();\n }\n\n this.animationDone.next();\n }\n\n private trapFocus(): void {\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n }\n\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n /** Restores focus to the element that was focused before the dialog opened. */\n private restoreFocus(): void {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n}\n","<div\n (@transformMenu.done)=\"onAnimationDone($event)\"\n [@transformMenu]=\"panelAnimationState\"\n class=\"natural-dropdown-container mat-elevation-z2\"\n role=\"menu\"\n tabindex=\"-1\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div *ngIf=\"data.showValidateButton\" class=\"natural-dropdown-validate-button\">\n <button (click)=\"close()\" color=\"primary\" mat-raised-button i18n>Valider</button>\n </div>\n</div>\n","import {Subject} from 'rxjs';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownResult} from '../types/values';\nimport {NaturalDropdownContainerComponent} from './dropdown-container.component';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, Injector, StaticProvider} from '@angular/core';\n\nexport class NaturalDropdownRef {\n public readonly componentInstance: DropdownComponent;\n public readonly closed = new Subject<DropdownResult | undefined>();\n\n public constructor(\n private readonly dropdownContainer: NaturalDropdownContainerComponent,\n component: ComponentType<DropdownComponent>,\n customProviders: StaticProvider[],\n parentInjector: Injector,\n containerRef: ComponentRef<NaturalDropdownContainerComponent>,\n ) {\n // Customize injector to allow data and dropdown reference injection in component\n customProviders.push({provide: NaturalDropdownRef, useValue: this});\n const customInjector = Injector.create({providers: customProviders, parent: parentInjector});\n\n // Content (type component given in configuration)\n const componentPortal = new ComponentPortal(component, undefined, customInjector);\n const contentRef = containerRef.instance.attachComponentPortal(componentPortal);\n\n this.componentInstance = contentRef.instance;\n }\n\n public close(result?: DropdownResult): void {\n this.closed.next(result);\n this.closed.complete();\n this.dropdownContainer.close();\n }\n}\n","import {FlexibleConnectedPositionStrategy, Overlay, OverlayConfig} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, ElementRef, Injectable, InjectionToken, Injector, StaticProvider} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {\n NATURAL_DROPDOWN_CONTAINER_DATA,\n NaturalDropdownContainerComponent,\n NaturalDropdownContainerData,\n} from './dropdown-container.component';\nimport {NaturalDropdownRef} from './dropdown-ref';\nimport {DropdownComponent} from '../types/dropdown-component';\n\nexport interface NaturalDropdownData<C = any> {\n condition: FilterGroupConditionField | null;\n configuration: C;\n title?: string;\n}\n\nexport const NATURAL_DROPDOWN_DATA = new InjectionToken<NaturalDropdownData>('NaturalDropdownData');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDropdownService {\n public constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n public open(\n component: ComponentType<DropdownComponent>,\n connectedElement: ElementRef<HTMLElement>,\n customProviders: StaticProvider[],\n showValidateButton: boolean,\n ): NaturalDropdownRef {\n // Container data\n const containerData: NaturalDropdownContainerData = {\n showValidateButton: showValidateButton,\n };\n\n const injectionTokens: StaticProvider[] = [\n {\n provide: NATURAL_DROPDOWN_CONTAINER_DATA,\n useValue: containerData,\n },\n ];\n\n const containerInjector = Injector.create({providers: injectionTokens, parent: this.injector});\n\n // Container\n const overlayRef = this.overlay.create(this.getOverlayConfig(connectedElement));\n const containerPortal = new ComponentPortal(NaturalDropdownContainerComponent, undefined, containerInjector);\n const containerRef: ComponentRef<NaturalDropdownContainerComponent> = overlayRef.attach(containerPortal);\n\n const dropdownContainer = containerRef.instance;\n const dropdownRef = new NaturalDropdownRef(\n dropdownContainer,\n component,\n customProviders,\n this.injector,\n containerRef,\n );\n\n // Start animation that shows menu\n dropdownContainer.startAnimation();\n\n const close = (): void => {\n if (dropdownRef.componentInstance.isValid() && dropdownRef.componentInstance.isDirty()) {\n dropdownRef.close({\n condition: dropdownRef.componentInstance.getCondition(),\n });\n } else {\n dropdownRef.close();\n }\n };\n\n // When parent closes, remove overlay from dom and update \"return\" valu\n dropdownContainer.closed.subscribe(() => {\n overlayRef.dispose();\n close();\n });\n\n // When click on backdrop, validate result.. ?\n overlayRef\n .backdropClick()\n .pipe(takeUntil(dropdownContainer.closed))\n .subscribe(() => dropdownContainer.close());\n\n return dropdownRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n */\n private getOverlayConfig(element: ElementRef<HTMLElement>): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this.getPosition(element),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n }\n\n private getPosition(element: ElementRef<HTMLElement>): FlexibleConnectedPositionStrategy {\n return this.overlay\n .position()\n .flexibleConnectedTo(element)\n .withFlexibleDimensions(true)\n .withViewportMargin(30)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 10,\n },\n ]);\n }\n}\n","import {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\n\nexport type PossibleComparableOpertorKeys = keyof Pick<\n FilterGroupConditionField,\n 'less' | 'lessOrEqual' | 'equal' | 'greaterOrEqual' | 'greater'\n>;\n\nexport interface PossibleComparableOperator {\n key: PossibleComparableOpertorKeys;\n label: string;\n}\n\nexport const possibleComparableOperators: PossibleComparableOperator[] = [\n {\n key: 'less',\n label: '<',\n },\n {\n key: 'lessOrEqual',\n label: '≤',\n },\n {\n key: 'equal',\n label: '=',\n },\n {\n key: 'greaterOrEqual',\n label: '≥',\n },\n {\n key: 'greater',\n label: '>',\n },\n];\n\nexport type PossibleDiscreteOperatorKeys = 'is' | 'isnot' | 'any' | 'none';\n\nexport interface PossibleDiscreteOperator {\n key: PossibleDiscreteOperatorKeys;\n label: string;\n}\n\nexport const possibleDiscreteOperators: PossibleDiscreteOperator[] = [\n {\n key: 'is',\n label: $localize`est`,\n },\n {\n key: 'isnot',\n label: $localize`n'est pas`,\n },\n {\n key: 'any',\n label: $localize`avec`,\n },\n {\n key: 'none',\n label: $localize`sans`,\n },\n];\n","import {DateAdapter} from '@angular/material/core';\nimport {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * Get only date, without time and ignoring entirely the timezone\n */\nexport function serialize<D>(dateAdapter: DateAdapter<D>, value: D | null): string {\n if (!value) {\n return '';\n }\n\n const y = dateAdapter.getYear(value);\n const m = dateAdapter.getMonth(value) + 1;\n const d = dateAdapter.getDate(value);\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Min date validator\n */\nexport function dateMin<D>(dateAdapter: DateAdapter<D>, min: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, min) < 0) {\n return {min: true};\n }\n\n return null;\n };\n}\n\n/**\n * Max date validator\n */\nexport function dateMax<D>(dateAdapter: DateAdapter<D>, max: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, max) > 0) {\n return {max: true};\n }\n\n return null;\n };\n}\n","import {Component, Inject} from '@angular/core';\nimport {FormControl, FormGroup, ValidatorFn, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats, MatOptionModule} from '@angular/material/core';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {possibleComparableOperators, PossibleComparableOpertorKeys} from '../types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatInputModule} from '@angular/material/input';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport interface TypeDateConfiguration<D = Date> {\n min?: D | null;\n max?: D | null;\n}\n\n@Component({\n templateUrl: './type-date.component.html',\n styleUrls: ['./type-date.component.scss'],\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n MatInputModule,\n MatDatepickerModule,\n NgIf,\n MatCheckboxModule,\n ],\n})\nexport class TypeDateComponent<D = any> implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateConfiguration<D>>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOpertorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl<D | null>(null);\n public readonly todayCtrl = new FormControl(false);\n public readonly operators = possibleComparableOperators;\n\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n today: this.todayCtrl,\n });\n\n private readonly defaults: Required<TypeDateConfiguration<D>> = {\n min: null,\n max: null,\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeDateConfiguration<D>>,\n private dateAdapter: DateAdapter<D>,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n this.todayCtrl.valueChanges.pipe(takeUntilDestroyed()).subscribe(isToday => {\n if (isToday) {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.valueCtrl.disable();\n } else {\n this.valueCtrl.enable();\n }\n });\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges, this.todayCtrl.valueChanges)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.renderedValue.next(this.getRenderedValue()));\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.valueCtrl.value) {\n return {};\n }\n\n const condition: FilterGroupConditionField = {};\n let operator = this.operatorCtrl.value;\n let date: string;\n let dayAfter: string;\n\n if (this.todayCtrl.value) {\n date = 'today';\n dayAfter = 'tomorrow';\n } else {\n date = serialize(this.dateAdapter, this.valueCtrl.value);\n dayAfter = serialize(this.dateAdapter, this.getDayAfter(this.valueCtrl.value));\n }\n\n if (operator === 'equal') {\n condition.greaterOrEqual = {value: date};\n condition.less = {value: dayAfter};\n } else {\n // Transparently adapt exclusive/inclusive ranges\n if (date !== 'today') {\n if (operator === 'greater') {\n operator = 'greaterOrEqual';\n date = dayAfter;\n } else if (operator === 'lessOrEqual') {\n operator = 'less';\n date = dayAfter;\n }\n }\n\n condition[operator] = {value: date};\n }\n\n return condition;\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n // Special case for '='\n if (condition.greaterOrEqual && condition.less) {\n this.operatorCtrl.setValue('equal');\n this.setTodayOrDate(condition.greaterOrEqual.value);\n\n return;\n }\n\n for (const operator of this.operators) {\n const reloadedOperator = condition[operator.key];\n if (reloadedOperator) {\n this.operatorCtrl.setValue(operator.key);\n this.setTodayOrDate(reloadedOperator.value);\n }\n }\n }\n\n private setTodayOrDate(value: Scalar): void {\n if (value === 'today') {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.todayCtrl.setValue(true);\n } else {\n this.valueCtrl.setValue(this.dateAdapter.deserialize(value));\n this.todayCtrl.setValue(false);\n }\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(dateMin(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax(this.dateAdapter, this.configuration.max));\n }\n\n this.valueCtrl.setValidators(validators);\n }\n\n private getDayAfter(date: D): D {\n return this.dateAdapter.addCalendarDays(this.dateAdapter.clone(date), 1);\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n\n let value = '';\n if (this.todayCtrl.value) {\n value = $localize`Aujourd'hui`;\n } else if (this.valueCtrl.value) {\n value = this.dateAdapter.format(this.valueCtrl.value, this.dateFormats.display.dateInput);\n }\n\n if (operator && value) {\n return operator.label + ' ' + value;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Date</mat-label>\n <input\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n [required]=\"true\"\n matInput\n />\n <mat-datepicker-toggle [for]=\"value\" matIconSuffix></mat-datepicker-toggle>\n <mat-datepicker #value></mat-datepicker>\n <mat-error *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-checkbox [formControl]=\"todayCtrl\" i18n>Aujourd'hui</mat-checkbox>\n</form>\n","import {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection, NaturalSearchSelections} from '../types/values';\nimport {\n Filter,\n FilterGroup,\n FilterGroupCondition,\n FilterGroupConditionField,\n JoinOn,\n LogicalOperator,\n} from './graphql-doctrine.types';\nimport {deepClone, getFacetFromSelection} from './utils';\nimport {replaceToday} from './transformers';\nimport {TypeDateComponent, TypeDateConfiguration} from '../../dropdown-components/type-date/type-date.component';\n\nexport function toGraphQLDoctrineFilter(\n facets: NaturalSearchFacets | null,\n selections: NaturalSearchSelections | null,\n): Filter {\n selections = deepClone(selections);\n\n const filter: Filter = {};\n if (!selections || selections.length === 0) {\n selections = [[]];\n }\n\n for (const groupSelections of selections) {\n const group: FilterGroup = {};\n const neededInversedFlags = facets ? facets.filter(isInvertedFlag) : [];\n\n for (const selection of groupSelections) {\n const facet = getFacetFromSelection(facets, selection);\n const transformedSelection = transformSelection(facet, selection);\n\n // Skip inverted flag and remove it from needed inverted flags\n if (isInvertedFlag(facet)) {\n neededInversedFlags.splice(neededInversedFlags.indexOf(facet), 1);\n } else {\n applyJoinAndCondition(group, transformedSelection);\n }\n }\n\n for (const facet of neededInversedFlags) {\n const transformedSelection = transformSelection(facet, {\n field: facet.field,\n name: facet.name,\n condition: deepClone(facet.condition),\n });\n applyJoinAndCondition(group, transformedSelection);\n }\n\n addGroupToFilter(filter, group);\n }\n\n return filter;\n}\n\nfunction applyJoinAndCondition(group: FilterGroup, selection: NaturalSearchSelection): void {\n // Apply join, then apply operator on that join, if field name has a '.'\n const [joinedRelation, joinedField] = selection.field.split('.');\n let container;\n let wrappedCondition;\n if (joinedField) {\n container = addJoinToGroup(group, joinedRelation);\n wrappedCondition = wrapWithFieldName(joinedField, selection.condition);\n } else {\n container = group;\n wrappedCondition = wrapWithFieldName(selection.field, selection.condition);\n }\n\n addConditionToContainer(container, wrappedCondition);\n}\n\n/**\n * Only add join if it does not already exists\n */\nfunction addJoinToGroup(group: FilterGroup, joinedRelation: string): JoinOn {\n if (!group.joins) {\n group.joins = {};\n }\n\n if (!group.joins[joinedRelation]) {\n group.joins[joinedRelation] = {};\n }\n\n return group.joins[joinedRelation];\n}\n\n/**\n * Only add condition to group or join if it's valid\n */\nfunction addConditionToContainer(container: FilterGroup | JoinOn, condition: FilterGroupCondition): void {\n if (!condition) {\n return;\n }\n\n if (!container.conditions) {\n container.conditions = [];\n }\n\n container.conditions.push(condition);\n}\n\n/**\n * Only add the group if there is something meaningful\n */\nfunction addGroupToFilter(filter: Filter, group: FilterGroup): void {\n if (group.conditions || group.joins) {\n if (!filter.groups) {\n filter.groups = [];\n }\n\n filter.groups.push(group);\n\n if (filter.groups.length > 1) {\n group.groupLogic = LogicalOperator.OR;\n }\n }\n}\n\nfunction wrapWithFieldName(field: string, condition: FilterGroupConditionField): FilterGroupCondition {\n const result: FilterGroupCondition = {};\n\n // We assume a custom operator \"search\"\n if (field === 'search' && condition.like) {\n return {custom: {search: {value: condition.like.value}}};\n } else {\n result[field] = condition;\n }\n\n return result;\n}\n\nfunction transformSelection(facet: Facet | null, selection: NaturalSearchSelection): NaturalSearchSelection {\n const newSelection = facet && facet.transform ? facet.transform(selection) : selection;\n\n return isDateFacet(facet) ? replaceToday(newSelection) : selection;\n}\n\nfunction isInvertedFlag(facet: Facet | null): facet is FlagFacet<FilterGroupConditionField> {\n return (!!facet && 'inversed' in facet && facet.inversed) || false;\n}\n\nfunction isDateFacet(facet: Facet | null): facet is DropdownFacet<TypeDateConfiguration> {\n return !!facet && 'component' in facet && facet.component === TypeDateComponent;\n}\n","import {NaturalSearchSelections} from '../types/values';\nimport {deepClone} from './utils';\nimport {Literal} from '../../../types/types';\nimport {Params} from '@angular/router';\n\n/**\n * Returns a string representation of the selection that can be used in URL.\n *\n * The string can be parsed back with `fromUrl()`\n */\nexport function toUrl(selections: NaturalSearchSelections | null): string | null {\n if (!selections || !selections.length) {\n return null;\n }\n\n const s = deepClone(selections);\n for (const a of s) {\n for (const b of a) {\n (b as Literal)['f'] = b.field;\n (b as Literal)['c'] = b.condition;\n\n delete (b as Literal).field;\n delete (b as Literal).condition;\n }\n }\n\n const result = JSON.stringify(s);\n\n return result === '[[]]' ? null : result;\n}\n\n/**\n * Parse a string, probably coming from URL, into a selection\n */\nexport function fromUrl(selections: string | null): NaturalSearchSelections {\n if (!selections || !selections.length) {\n return [[]];\n }\n\n const result = JSON.parse(selections) as NaturalSearchSelections;\n\n for (const a of result) {\n for (const b of a) {\n b.field = (b as Literal)['f'];\n b.condition = (b as Literal)['c'];\n\n delete (b as Literal)['f'];\n delete (b as Literal)['c'];\n }\n }\n\n if (result.length === 0) {\n result.push([]);\n }\n\n return result;\n}\n\n/**\n * Transform a search selection to navigation parameters to be used in URL.\n *\n * This is typically useful to craft URL to pre-filtered lists.\n */\nexport function toNavigationParameters(selections: NaturalSearchSelections): Params {\n const value = toUrl(selections);\n\n return value ? {ns: JSON.stringify(value)} : {};\n}\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const SESSION_STORAGE = new InjectionToken<NaturalStorage>(\n 'Session storage that can be shimed when running on server or in tests',\n);\n\nexport const LOCAL_STORAGE = new InjectionToken<NaturalStorage>(\n 'Local storage that can be shimed when running on server or in tests',\n);\n\n/**\n * Normal `Storage` type, but without array access\n */\nexport type NaturalStorage = Pick<Storage, 'length' | 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem'>;\n\n/**\n * Memory storage to keep store volatile things in memory\n *\n * Should be used to shim sessionStorage when running on server or in our tests\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMemoryStorage implements NaturalStorage {\n private readonly data = new Map<string, string>();\n\n public get length(): number {\n return this.data.size;\n }\n\n public clear(): void {\n this.data.clear();\n }\n\n public getItem(key: string): string | null {\n const value = this.data.get(key);\n return value === undefined ? null : value;\n }\n\n public key(index: number): string | null {\n let i = 0;\n for (const key of this.data.keys()) {\n if (i++ === index) {\n return key;\n }\n }\n\n return null;\n }\n\n public removeItem(key: string): void {\n this.data.delete(key);\n }\n\n public setItem(key: string, value: string): void {\n this.data.set(key, value);\n }\n}\n\nexport function sessionStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof sessionStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return sessionStorage;\n }\n } catch (e) {\n // nothing do to\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `sessionStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `sessionStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const sessionStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: SESSION_STORAGE,\n useFactory: sessionStorageFactory,\n};\n\n/**\n * Provide in-memory session storage to be used only in tests or SSR\n */\nexport const memorySessionStorageProvider: Provider = {\n provide: SESSION_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n\nexport function localStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof localStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return localStorage;\n }\n } catch (e) {\n // Do nothing\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `localStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `localStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const localStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: LOCAL_STORAGE,\n useFactory: localStorageFactory,\n};\n\n/**\n * Provide in-memory local storage to be used only in tests or SSR\n */\nexport const memoryLocalStorageProvider: Provider = {\n provide: LOCAL_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n","import {Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {ActivatedRoute, NavigationExtras, Router} from '@angular/router';\nimport {clone} from 'lodash-es';\nimport {NaturalStorage, SESSION_STORAGE} from '../modules/common/services/memory-storage';\n\n/**\n * Validator for persisted values retrieved from NaturalPersistenceService. If returns false, the persisted value\n * will be ignored, and instead `null` will be returned.\n *\n * `storageKey` is only given if the value is coming from session storage (and not from URL).\n */\nexport type PersistenceValidator = (key: string, storageKey: string | null, value: unknown) => boolean;\n\nexport const NATURAL_PERSISTENCE_VALIDATOR = new InjectionToken<PersistenceValidator>(\n 'Validator for persisted value retrieved from NaturalPersistenceService. If returns false, the persisted value will never be returned.',\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPersistenceService {\n public constructor(\n private readonly router: Router,\n @Inject(SESSION_STORAGE) private readonly sessionStorage: NaturalStorage,\n @Optional() @Inject(NATURAL_PERSISTENCE_VALIDATOR) private readonly isValid: PersistenceValidator,\n ) {\n // By default, anything is valid\n this.isValid = this.isValid ?? (() => true);\n }\n\n /**\n * Persist in url and local storage the given value with the given key.\n * When stored in storage, we need more \"key\" to identify the controller.\n */\n public persist(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n storageKey: string,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n this.persistInStorage(key, value, storageKey);\n return this.persistInUrl(key, value, route, navigationExtras);\n }\n\n /**\n * Return object with persisted data in url or in session storage\n * Url has priority over session storage because of url sharing. When url is provided, session storage is ignored.\n * Url and storage are synced when arriving in a component :\n * - When loading with url parameters, storage is updated to stay synced\n * - When loading without url, but with storage data, the url is updated\n */\n public get(key: string, route: ActivatedRoute, storageKey: string): any | null {\n // From url\n let params = this.getFromUrl(key, route);\n if (!this.isFalseyValue(params)) {\n this.persistInStorage(key, params, storageKey);\n return params;\n }\n\n // From storage\n params = this.getFromStorage(key, storageKey);\n if (!this.isFalseyValue(params)) {\n this.persistInUrl(key, params, route);\n return params;\n }\n\n return null;\n }\n\n /**\n * Get given key from the url parameters\n */\n public getFromUrl(key: string, route: ActivatedRoute): any | null {\n const value = route.snapshot.paramMap.get(key);\n\n return this.deserialize(key, null, value);\n }\n\n /**\n * Add/override given pair key-value in the url\n * Always JSON.stringify() the given value\n * If the value is falsey, the pair key-value is removed from the url.\n */\n public persistInUrl(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n const params = clone(route.snapshot.url[route.snapshot.url.length - 1].parameters);\n\n if (this.isFalseyValue(value)) {\n delete params[key];\n } else {\n params[key] = JSON.stringify(value);\n }\n\n navigationExtras = Object.assign(navigationExtras || {}, {relativeTo: route});\n\n return this.router.navigate(['.', params], navigationExtras);\n }\n\n public getFromStorage(key: string, storageKey: string): any | null {\n const value = this.sessionStorage.getItem(this.getStorageKey(key, storageKey));\n\n return this.deserialize(key, storageKey, value);\n }\n\n /**\n * Store value in session storage.\n * If value is falsy, the entry is removed\n */\n public persistInStorage(key: string, value: unknown, storageKey: string): void {\n if (this.isFalseyValue(value)) {\n this.sessionStorage.removeItem(this.getStorageKey(key, storageKey));\n } else {\n this.sessionStorage.setItem(this.getStorageKey(key, storageKey), JSON.stringify(value));\n }\n }\n\n private getStorageKey(key: string, storageKey: string): string {\n return storageKey + '-' + key;\n }\n\n // Returns if the given value is falsey\n // Falsey values are : null, undefined and empty string.\n // This cause usually the parameter to be removed from url/storage instead of being stored with no value. Url would be polluted.\n private isFalseyValue(value: unknown): boolean {\n return value == null || value === ''; // == means null or undefined;\n }\n\n private deserialize(key: string, storageKey: string | null, value: string | null): unknown | null {\n if (!value) {\n return null;\n }\n\n let result = null;\n try {\n result = JSON.parse(value);\n } catch (e) {\n // noop\n }\n\n return this.isValid(key, storageKey, result) ? result : null;\n }\n}\n","import {DataSource} from '@angular/cdk/collections';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {Literal} from '../types/types';\n\nexport interface PaginatedData<T> {\n readonly items: readonly T[];\n readonly offset?: number | null;\n readonly pageSize: number;\n readonly pageIndex: number;\n readonly length: number;\n}\n\n/**\n * A NaturalDataSource will connect immediately, in order to know as soon as possible if\n * we need to show a template at all (as seen in my-ichtus)\n *\n * It also allow some extra data manipulation\n */\nexport class NaturalDataSource<T extends PaginatedData<Literal> = PaginatedData<Literal>> extends DataSource<\n T['items'][0]\n> {\n private readonly ngUnsubscribe = new Subject<void>();\n\n private readonly internalData: BehaviorSubject<T | null>;\n\n public constructor(value: Observable<T> | T) {\n super();\n\n if (value instanceof Observable) {\n this.internalData = new BehaviorSubject<T | null>(null);\n value.pipe(takeUntil(this.ngUnsubscribe)).subscribe(res => (this.data = res));\n } else {\n this.internalData = new BehaviorSubject<T | null>(value);\n }\n }\n\n public get internalDataObservable(): Observable<T | null> {\n return this.internalData;\n }\n\n /**\n * Array of data that should be rendered by the table, where each object represents one row.\n */\n public get data(): T | null {\n return this.internalData.value;\n }\n\n public set data(data: T | null) {\n this.internalData.next(data);\n }\n\n public connect(): Observable<T['items']> {\n return this.internalData.pipe(\n takeUntil(this.ngUnsubscribe),\n map(data => (data ? data.items : [])),\n );\n }\n\n public disconnect(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n\n public push(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n fullList.push(item);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n\n public pop(): T['items'][0] | undefined {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n const removedElement = fullList.pop();\n this.data = {...this.data, items: fullList, length: fullList.length};\n\n return removedElement;\n }\n\n public remove(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const index = this.data.items.indexOf(item);\n if (index > -1) {\n const fullList = [...this.data.items];\n fullList.splice(index, 1);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n }\n}\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {Directive, inject, Input, OnDestroy, OnInit} from '@angular/core';\nimport {PageEvent} from '@angular/material/paginator';\nimport {Sort} from '@angular/material/sort';\nimport {ActivatedRoute, Data, NavigationEnd, NavigationExtras, NavigationStart, Router} from '@angular/router';\nimport {defaults, isEmpty, isEqual, pick} from 'lodash-es';\nimport {Observable, Subject} from 'rxjs';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {toGraphQLDoctrineFilter} from '../modules/search/classes/graphql-doctrine';\nimport {fromUrl, toUrl} from '../modules/search/classes/url';\nimport {NaturalSearchFacets} from '../modules/search/types/facet';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalPersistenceService} from '../services/persistence.service';\nimport {NaturalDataSource, PaginatedData} from './data-source';\nimport {\n NaturalQueryVariablesManager,\n PaginationInput,\n QueryVariables,\n Sorting,\n SortingOrder,\n} from './query-variable-manager';\nimport {ExtractTall, ExtractVall, Literal} from '../types/types';\nimport {NavigableItem} from './abstract-navigable-list';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {AvailableColumn} from '../modules/columns-picker/types';\n\ntype MaybeNavigable = Literal | NavigableItem<Literal>;\n\nfunction unwrapNavigable(item: MaybeNavigable): Literal {\n if ('item' in item && 'hasNavigation' in item) {\n return item.item;\n }\n\n return item;\n}\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * Components inheriting from this class can be used as standalone with input attributes.\n *\n * Usage :\n * <natural-my-listing [forcedVariables]=\"{filter:...}\" [selectedColumns]=\"['col1']\" [persistSearch]=\"false\">\n */\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // In most case this should not be specified by inheriting classes.\n // It should only be specified to override default if the service items are\n // mapped to a different structure like in NaturalAbstractNavigableList\n Tall extends PaginatedData<MaybeNavigable> = ExtractTall<TService>,\n >\n extends NaturalAbstractPanel\n implements OnInit, OnDestroy\n{\n /**\n * Wherever search should be loaded from url/storage and persisted in it too.\n */\n @Input() public persistSearch = true;\n\n /**\n * List of columns that are available to the end-user to select from, via `<natural-columns-picker>`\n */\n @Input() public availableColumns: AvailableColumn[] = [];\n\n /**\n * Columns list after interaction with `<natural-columns-picker>`\n */\n public columnsForTable: string[] = [];\n\n /**\n * The default column selection that automatically happened after `<natural-columns-picker>` initialization\n */\n private defaultSelectedColumns: string[] | null = null;\n\n /**\n * Visible (checked) columns\n *\n * Instead of using this, you should consider correctly configuring `AvailableColumn.checked`.\n */\n @Input() public selectedColumns?: string[];\n\n /**\n * Source of the list\n */\n public dataSource?: NaturalDataSource<Tall>;\n\n /**\n * Selection for bulk actions\n */\n public readonly selection = new SelectionModel<ExtractTall<TService>['items'][0]>(true, []);\n\n /**\n * Next executed action from bulk menu\n */\n public bulkActionSelected: string | null = null;\n\n /**\n * Centralisation of query variables\n */\n public variablesManager: NaturalQueryVariablesManager<ExtractVall<TService>> = new NaturalQueryVariablesManager<\n ExtractVall<TService>\n >();\n\n /**\n * Configuration for natural-search facets\n */\n public naturalSearchFacets: NaturalSearchFacets = [];\n\n /**\n * Result of a search (can be provided as input for initialisation)\n */\n public naturalSearchSelections: NaturalSearchSelections = [[]];\n\n /**\n * Data attribute provided by activated route snapshot\n */\n public routeData?: Data;\n\n /**\n * List of page sizes\n */\n public readonly pageSizeOptions = [5, 25, 50, 100, 200];\n\n /**\n * Initial pagination setup\n */\n protected defaultPagination: Required<PaginationInput> = {\n offset: null,\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Initial sorting\n */\n protected defaultSorting?: Array<Sorting>;\n\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly alertService = inject(NaturalAlertService);\n protected readonly persistenceService = inject(NaturalPersistenceService);\n\n public constructor(public readonly service: TService) {\n super();\n }\n\n /**\n * Variables that are always forced on a list, in addition to whatever the end-user might select\n */\n @Input()\n public set forcedVariables(variables: QueryVariables | null | undefined) {\n if (variables) {\n this.applyForcedVariables(variables);\n }\n }\n\n /**\n * If change, check DocumentsComponent that overrides this function without calling super.ngOnInit().\n */\n public ngOnInit(): void {\n this.routeData = this.route.snapshot.data;\n\n this.initFromRoute();\n this.initFromPersisted();\n\n this.variablesManager.defaults('pagination', {pagination: this.defaultPagination} as ExtractVall<TService>);\n this.variablesManager.defaults('sorting', {sorting: this.defaultSorting} as ExtractVall<TService>);\n\n this.dataSource = new NaturalDataSource<Tall>(this.getDataObservable());\n this.selection.clear();\n\n // Update natural search when history changes (back/forward buttons)\n // History state is detectable only on NavigationStart (popstate trigger)\n // But we need parameters from url after NavigationEnd. So proceed in two steps with a flag.\n let isPopState = false;\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(event => event instanceof NavigationStart && event.navigationTrigger === 'popstate'),\n )\n .subscribe(() => {\n isPopState = true;\n });\n\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(event => event instanceof NavigationEnd && isPopState),\n )\n .subscribe(() => {\n isPopState = false; // reset flag\n this.naturalSearchSelections = fromUrl(this.persistenceService.getFromUrl('ns', this.route));\n });\n }\n\n /**\n * Persist search and then launch whatever is required to refresh the list\n */\n public search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // Reset page index to restart the pagination (preserve pageSize)\n\n if (resetPagination) {\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n }\n\n // Persist if activated\n // Two parallel navigations conflict. We first persist the search, then the pagination\n if (this.persistSearch && !this.isPanel) {\n const promise = this.persistenceService.persist(\n 'ns',\n toUrl(naturalSearchSelections),\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise, navigationExtras);\n }\n\n this.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n /**\n * Change sorting variables for query and persist the new value in url and local storage\n * The default value is not persisted\n * @param sortingEvents List of material sorting events\n */\n public sorting(sortingEvents: (Sort & Partial<Pick<Sorting, 'nullAsHighest' | 'emptyStringAsHighest'>>)[]): void {\n // Reset page index to restart the pagination (preserve pageSize)\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n\n // Preserve only sorting events with direction and convert into natural/graphql Sorting type\n let sorting: Sorting[] = sortingEvents\n .filter(e => !!e.direction)\n .map(sortingEvent => {\n const s: Sorting = {\n field: sortingEvent.active,\n };\n\n if (sortingEvent.direction === 'asc') {\n s.order = SortingOrder.ASC;\n } else if (sortingEvent.direction === 'desc') {\n s.order = SortingOrder.DESC;\n }\n\n if ('nullAsHighest' in sortingEvent) {\n s.nullAsHighest = sortingEvent.nullAsHighest;\n }\n\n if ('emptyStringAsHighest' in sortingEvent) {\n s.emptyStringAsHighest = sortingEvent.emptyStringAsHighest;\n }\n\n return s;\n });\n\n // Empty sorting fallbacks on default\n if (sorting.length === 0 && this.defaultSorting) {\n sorting = this.defaultSorting;\n }\n\n // Set sorting as search variable\n this.variablesManager.set('sorting', {sorting: sorting} as ExtractVall<TService>);\n\n if (this.persistSearch && !this.isPanel) {\n // If sorting is equal to default sorting, nullify it to remove from persistence (url and session storage)\n const promise = this.persistenceService.persist(\n 'so',\n isEqual(sorting, this.defaultSorting) ? null : sorting,\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise);\n }\n }\n\n /**\n * Return current pagination, either the user defined one, or the default one\n */\n private getPagination(): PaginationInput {\n const paginationChannel: Partial<ExtractVall<TService>> | undefined = this.variablesManager.get('pagination');\n\n if (paginationChannel && paginationChannel.pagination) {\n // The cast should not be necessary because Typescript correctly narrow down the type to `PaginationInput`\n // but somehow still get confused when returning it\n return paginationChannel.pagination as PaginationInput;\n }\n\n return this.defaultPagination;\n }\n\n /**\n * Change pagination variables for query and persist in url and local storage the new value\n * The default value not persisted\n *\n * @param event Natural or Paginator PageEvent\n * @param defer Promise (usually a route promise) that defers the redirection from this call to prevent route navigation collision\n * @param navigationExtras Angular router navigation options. Is relevant only if persistSearch is true\n */\n public pagination(\n event: PaginationInput | PageEvent,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n let pagination: PaginationInput = this.defaultPagination;\n let forPersistence: PaginationInput | null = null;\n\n // Convert to natural/graphql format, adding missing attributes\n let naturalEvent: PaginationInput = pick(event, Object.keys(this.defaultPagination)); // object with only PaginationInput attributes\n naturalEvent = defaults(naturalEvent, this.defaultPagination); // Default with controller values\n\n if (!isEqual(naturalEvent, this.defaultPagination)) {\n pagination = forPersistence = naturalEvent;\n }\n\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n\n this.persistPagination(forPersistence, defer, navigationExtras);\n }\n\n protected persistPagination(\n pagination: PaginationInput | null,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n if (this.persistSearch && !this.isPanel) {\n // Declare persist function\n const persist = (value: PaginationInput | null): Promise<boolean> =>\n this.persistenceService.persist('pa', value, this.route, this.getStorageKey(), navigationExtras);\n\n // Call function directly or when promise is resolved\n if (defer) {\n defer.then(() => persist(pagination));\n } else {\n persist(pagination);\n }\n }\n }\n\n /**\n * Selects all rows if they are not all selected; otherwise clear selection\n */\n public masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n this.selection.select(unwrapped);\n }\n });\n }\n }\n\n /**\n * Whether the number of selected elements matches the total number of rows\n */\n public isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n let numRows = 0;\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n numRows++;\n }\n });\n\n return numSelected === numRows;\n }\n\n /**\n * Called when a bulk action is selected\n */\n public bulkAction(): void {\n if (!this.bulkActionSelected) {\n throw new Error('Trying to execute a bulk action without selecting one');\n }\n\n if (!(this.bulkActionSelected in this)) {\n throw new Error('Trying to execute a bulk action that does not exist: ' + this.bulkActionSelected);\n }\n\n (this as any)[this.bulkActionSelected]();\n }\n\n /**\n * In non-panel context, header is always visible.\n * In panel context, header is hidden when no results.\n */\n public showHeader(): boolean {\n return !this.isPanel || (this.isPanel && this.showTable());\n }\n\n /**\n * Search is visible in most cases, but hidden on a panel\n */\n public showSearch(): boolean {\n return !this.isPanel;\n }\n\n /**\n * Table should be shown only when there is data\n */\n public showTable(): boolean {\n return !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length > 0;\n }\n\n /**\n * No results is shown when there is no items, but only in non-panel context only.\n * In panels we want discrete mode, there is no search and no \"no-results\"\n */\n public showNoResults(): boolean {\n return !this.isPanel && !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length === 0;\n }\n\n /**\n * Initialize from route.\n *\n * Uses data provided by router such as:\n *\n * - `route.data.forcedVariables`\n * - `route.data.availableColumns`\n * - `route.data.selectedColumns`\n */\n protected initFromRoute(): void {\n // Variables\n if (this.route.snapshot.data.forcedVariables) {\n this.applyForcedVariables(this.route.snapshot.data.forcedVariables);\n }\n\n // Available columns\n if (this.route.snapshot.data.availableColumns) {\n this.availableColumns = this.route.snapshot.data.availableColumns;\n }\n\n // Columns\n if (this.route.snapshot.data.selectedColumns) {\n this.selectedColumns = this.route.snapshot.data.selectedColumns;\n }\n }\n\n protected getDataObservable(): Observable<Tall> {\n // Here the casting is a bit unfortunate but required because NaturalAbstractNavigableList\n // breaks the data structure convention (by wrapping items in a structure). Ideally we should remove\n // the casting and resolve things in a better way, but that's too much work for now\n return this.service\n .watchAll(this.variablesManager as unknown as any)\n .pipe(takeUntil(this.ngUnsubscribe)) as unknown as Observable<Tall>;\n }\n\n protected initFromPersisted(): void {\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n const storageKey = this.getStorageKey();\n\n // Pagination : pa\n const pagination = this.persistenceService.get('pa', this.route, storageKey);\n if (pagination) {\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n }\n\n // Sorting : so\n const sorting = this.persistenceService.get('so', this.route, storageKey);\n if (sorting) {\n this.variablesManager.set('sorting', {sorting} as ExtractVall<TService>);\n }\n\n // Columns\n const persistedColumns = this.persistenceService.get('col', this.route, storageKey);\n if (typeof persistedColumns === 'string') {\n this.selectedColumns = persistedColumns.split(',');\n }\n\n // Natural search : ns\n this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));\n this.translateSearchAndRefreshList(this.naturalSearchSelections, true);\n }\n\n protected translateSearchAndRefreshList(\n naturalSearchSelections: NaturalSearchSelections,\n ignoreEmptyFilter = false,\n ): void {\n const filter = toGraphQLDoctrineFilter(this.naturalSearchFacets, naturalSearchSelections);\n\n if (ignoreEmptyFilter && isEmpty(filter)) {\n return;\n }\n\n this.variablesManager.set('natural-search', {filter} as ExtractVall<TService>);\n }\n\n /**\n * Return current url excluding last route parameters;\n */\n protected getStorageKey(): string {\n const urlTree = this.router.parseUrl(this.router.url);\n urlTree.root.children.primary.segments[urlTree.root.children.primary.segments.length - 1].parameters = {};\n return urlTree.toString();\n }\n\n protected bulkdDeleteConfirmation(): Observable<boolean | undefined> {\n return this.alertService.confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement les éléments sélectionnés ?`,\n $localize`Supprimer définitivement`,\n );\n }\n\n /**\n * Delete multiple items at once\n */\n protected bulkDelete(): Observable<void> {\n const subject = new Subject<void>();\n this.bulkdDeleteConfirmation().subscribe(confirmed => {\n this.bulkActionSelected = null;\n if (confirmed) {\n // Assume that our objects have ID. This is true in almost all cases. But if\n // it is not, like AttributeReportComponent, then the inheriting class must\n // never call this method.\n const selection = this.selection.selected as {id: string}[];\n\n this.service.delete(selection).subscribe(() => {\n this.selection.clear();\n this.alertService.info($localize`Supprimé`);\n subject.next();\n subject.complete();\n });\n }\n });\n\n return subject;\n }\n\n private applyForcedVariables(variables: QueryVariables): void {\n if (variables.filter) {\n this.variablesManager.set('forced-filter', {filter: variables.filter} as ExtractVall<TService>);\n }\n\n if (variables.pagination) {\n this.variablesManager.set('pagination', {pagination: variables.pagination} as ExtractVall<TService>);\n }\n\n if (variables.sorting) {\n this.variablesManager.set('sorting', {sorting: variables.sorting} as ExtractVall<TService>);\n }\n }\n\n public selectColumns(columns: string[]): void {\n this.columnsForTable = columns;\n\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n // The first selection we receive is the default one made by `<natural-columns-picker>`\n if (!this.defaultSelectedColumns) {\n this.defaultSelectedColumns = columns;\n } else {\n // Persist only if wanted columns are different from default selection\n const value = isEqual(this.defaultSelectedColumns, columns) ? null : columns.join(',');\n this.persistenceService.persist('col', value, this.route, this.getStorageKey());\n }\n }\n}\n","import {Directive, Input, OnDestroy, OnInit} from '@angular/core';\nimport {NavigationExtras, RouterLink} from '@angular/router';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalAbstractList} from './abstract-list';\nimport {PaginatedData} from './data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTall, ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {first, Observable} from 'rxjs';\n\ntype BreadcrumbItem = {\n id: string;\n name: string;\n} & Literal;\n\nexport type NavigableItem<T> = {\n item: T;\n hasNavigation: boolean;\n};\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractNavigableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<{id: string}>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends NaturalAbstractList<TService, PaginatedData<NavigableItem<ExtractTall<TService>['items'][0]>>>\n implements OnInit, OnDestroy\n{\n /**\n * Name of filter for child items to access ancestor item\n */\n @Input() public ancestorRelationName = 'parent';\n\n private oldAncertorId: string | null = null;\n\n public breadcrumbs: BreadcrumbItem[] = [];\n\n public constructor(service: TService) {\n super(service);\n }\n\n public override ngOnInit(): void {\n // In fact, \"na\" and \"ns\" key may exist at the same time in url (but shouldn't).\n // When this happens, on page reload, search is priority.\n // \"na\" is a trailing param, and should be considered only when there is no search\n this.route.params.subscribe(params => {\n // \"ns\" stands for natural-search to be shorter in url\n if (params['ns']) {\n return;\n }\n\n let navigationConditionValue: any | null = null;\n\n // \"na\" stands for \"navigation\" (relation) in url\n if (params['na']) {\n navigationConditionValue = {have: {values: [params['na']]}};\n this.service.getOne(params['na']).subscribe(\n // TODO casting should disappear and instead this class should enforce\n // the service to support Tone with a new generic\n (ancestor: BreadcrumbItem) => (this.breadcrumbs = this.getBreadcrumb(ancestor)),\n );\n\n const hasAncestorChanged = params['na'] !== this.oldAncertorId;\n this.oldAncertorId = params['na'];\n this.clearSearch(hasAncestorChanged);\n } else {\n navigationConditionValue = {empty: {}};\n this.breadcrumbs = [];\n }\n\n const condition: Literal = {};\n condition[this.ancestorRelationName] = navigationConditionValue;\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n // todo : check why without \"as Vall\" it errors. Vall is supposed to be QueryVariables, and filter too.\n this.variablesManager.set('navigation', variables as ExtractVall<TService>);\n });\n\n super.ngOnInit();\n }\n\n protected override getDataObservable(): Observable<PaginatedData<NavigableItem<ExtractTallOne<TService>>>> {\n return this.service.watchAll(this.variablesManager as unknown as any).pipe(\n takeUntil(this.ngUnsubscribe),\n map(result => {\n // On each data arriving, we query children count to show/hide chevron\n const navigableItems: NavigableItem<ExtractTallOne<TService>>[] = result.items.map(item => {\n const navigableItem: NavigableItem<ExtractTallOne<TService>> = {\n item: item as ExtractTallOne<TService>,\n hasNavigation: false,\n };\n\n const condition: Literal = {};\n condition[this.ancestorRelationName] = {have: {values: [item.id]}};\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n this.service\n .count(qvm)\n .pipe(first())\n .subscribe(count => (navigableItem.hasNavigation = count > 0));\n\n return navigableItem;\n });\n\n const navigableResult: PaginatedData<NavigableItem<ExtractTallOne<TService>>> = {\n ...result,\n items: navigableItems,\n };\n\n return navigableResult;\n }),\n );\n }\n\n protected override translateSearchAndRefreshList(naturalSearchSelections: NaturalSearchSelections): void {\n // Clear navigation filter if there is a search\n if (naturalSearchSelections.some(s => s.length)) {\n this.variablesManager.set('navigation', null);\n this.breadcrumbs = [];\n }\n\n super.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n public clearSearch(resetPagination = true): void {\n this.naturalSearchSelections = [[]];\n super.search([[]], undefined, resetPagination);\n this.persistenceService.persistInStorage('ns', null, this.getStorageKey());\n }\n\n public override search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // na stands for navigation\n this.persistenceService.persistInUrl('na', null, this.route).then(() => {\n super.search(naturalSearchSelections, navigationExtras, resetPagination);\n });\n }\n\n /**\n * Return an array for router link usage\n */\n public getChildLink(ancestor: {id: string} | null): RouterLink['routerLink'] {\n if (ancestor && ancestor.id) {\n return ['.', {na: ancestor.id}];\n } else {\n return ['.', {}];\n }\n }\n\n /**\n * Depth is limited by queries\n * @param item with an ancestor relation (must match ancestorRelationName attribute)\n */\n protected getBreadcrumb(item: BreadcrumbItem): BreadcrumbItem[] {\n const ancestor = item[this.ancestorRelationName];\n if (ancestor) {\n return this.getBreadcrumb(ancestor).concat([item]);\n }\n\n return [item];\n }\n}\n","import {DocumentNode} from '@apollo/client/core';\nimport {isObject} from 'lodash-es';\nimport {formatIsoDateTime} from './utility';\n\nfunction isFile(value: any): boolean {\n return (\n (typeof File !== 'undefined' && value instanceof File) ||\n (typeof Blob !== 'undefined' && value instanceof Blob) ||\n (typeof FileList !== 'undefined' && value instanceof FileList)\n );\n}\n\n/**\n * Detect if the given variables have a file to be uploaded or not, and\n * also convert date to be serialized with their timezone.\n */\nexport function hasFilesAndProcessDate(variables: unknown): boolean {\n let fileFound = false;\n if (!isObject(variables)) {\n return false;\n }\n\n Object.values(variables).forEach(value => {\n if (value instanceof Date) {\n // Replace native toJSON() function by our own implementation\n value.toJSON = () => formatIsoDateTime(value);\n }\n\n if (isFile(value)) {\n fileFound = true;\n }\n\n if (hasFilesAndProcessDate(value)) {\n fileFound = true;\n }\n });\n\n return fileFound;\n}\n\n/**\n * Whether the given GraphQL document contains at least one mutation\n */\nexport function isMutation(query: DocumentNode): boolean {\n return query.definitions.some(\n definition => definition.kind === 'OperationDefinition' && definition.operation === 'mutation',\n );\n}\n","import {MonoTypeOperatorFunction, Observable, timer} from 'rxjs';\nimport {map, take, takeUntil, tap} from 'rxjs/operators';\n\n/**\n * Behave like setTimeout(), but with a mandatory cancel mechanism.\n *\n * This is typically useful to replace setTimeout() in components where the callback\n * would crash if executed after the component destruction. That can easily happen\n * when the user navigate quickly between pages.\n *\n * Typical usage in a component would be:\n *\n * ```ts\n * cancellableTimeout(this.ngUnsubscribe).subscribe(myCallback);\n * ```\n *\n * Instead of the more error prone:\n *\n * ```ts\n * public foo(): void {\n * this.timeout = setTimeout(myCallBack);\n * }\n *\n * public ngOnDestroy(): void {\n * if (this.timeout) {\n * clearTimeout(this.timeout);\n * this.timeout = null;\n * }\n * }\n * ```\n */\nexport function cancellableTimeout(canceller: Observable<unknown>, milliSeconds = 0): Observable<void> {\n return timer(milliSeconds).pipe(\n take(1),\n takeUntil(canceller),\n map(() => {\n return;\n }),\n );\n}\n\n/**\n * For debugging purpose only, will dump in console everything that happen to\n * the observable\n */\nexport function debug<T>(debugName: string): MonoTypeOperatorFunction<T> {\n return tap<T>({\n subscribe: () => console.log('SUBSCRIBE', debugName),\n unsubscribe: () => console.log('UNSUBSCRIBE', debugName),\n next: value => console.log('NEXT', debugName, value),\n error: error => console.log('ERROR', debugName, error),\n complete: () => console.log('COMPLETE', debugName),\n });\n}\n","import {Apollo, gql, MutationResult} from 'apollo-angular';\nimport {FetchResult, NetworkStatus, WatchQueryFetchPolicy} from '@apollo/client/core';\nimport {AbstractControl, AsyncValidatorFn, UntypedFormControl, UntypedFormGroup, ValidatorFn} from '@angular/forms';\nimport {DocumentNode} from 'graphql';\nimport {defaults, merge, mergeWith, omit, pick} from 'lodash-es';\nimport {catchError, combineLatest, EMPTY, first, from, Observable, of, OperatorFunction} from 'rxjs';\nimport {debounceTime, filter, map, shareReplay, switchMap, takeWhile, tap} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../classes/query-variable-manager';\nimport {Literal} from '../types/types';\nimport {makePlural, mergeOverrideArray, relationsToIds, upperCaseFirstLetter} from '../classes/utility';\nimport {PaginatedData} from '../classes/data-source';\nimport {NaturalDebounceService} from './debounce.service';\n\nexport interface FormValidators {\n [key: string]: ValidatorFn[];\n}\n\nexport interface FormAsyncValidators {\n [key: string]: AsyncValidatorFn[];\n}\n\nexport interface VariablesWithInput {\n input: Literal;\n}\n\nexport interface FormControls {\n [key: string]: AbstractControl;\n}\n\ninterface Resolve<TOne> {\n model: TOne;\n}\n\nexport type WithId<T> = {id: string} & T;\n\nexport abstract class NaturalAbstractModelService<\n Tone,\n Vone extends {id: string},\n Tall extends PaginatedData<Literal>,\n Vall extends QueryVariables,\n Tcreate,\n Vcreate extends VariablesWithInput,\n Tupdate,\n Vupdate extends {id: string; input: Literal},\n Tdelete,\n Vdelete extends {ids: string[]},\n> {\n /**\n * Store the creation mutations that are pending\n */\n private readonly creatingCache = new Map<Vcreate['input'] | WithId<Vupdate['input']>, Observable<Tcreate>>();\n\n public constructor(\n protected readonly apollo: Apollo,\n protected readonly naturalDebounceService: NaturalDebounceService,\n protected readonly name: string,\n protected readonly oneQuery: DocumentNode | null,\n protected readonly allQuery: DocumentNode | null,\n protected readonly createMutation: DocumentNode | null,\n protected readonly updateMutation: DocumentNode | null,\n protected readonly deleteMutation: DocumentNode | null,\n ) {}\n\n public getConsolidatedForClient(): Literal {\n return Object.assign(this.getDefaultForServer(), this.getDefaultForClient());\n }\n\n /**\n * List of individual fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormValidators(model?: Literal): FormValidators {\n return {};\n }\n\n /**\n * List of individual async fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormAsyncValidators(model?: Literal): FormAsyncValidators {\n return {};\n }\n\n /**\n * List of grouped fields validators (like password + confirm password)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupValidators(model?: Literal): ValidatorFn[] {\n return [];\n }\n\n /**\n * List of async group fields validators (like unique constraint on multiple columns)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupAsyncValidators(model?: Literal): AsyncValidatorFn[] {\n return [];\n }\n\n public getFormConfig(model: Literal): FormControls {\n const values = this.getConsolidatedForClient();\n const validators = this.getFormValidators(model);\n const asyncValidators = this.getFormAsyncValidators(model);\n const controls: FormControls = {};\n const disabled = model.permissions ? !model.permissions.update : false;\n\n if (model.id) {\n controls['id'] = new UntypedFormControl({value: model.id, disabled: true});\n }\n\n // Configure form for each field of model\n for (const key of Object.keys(values)) {\n const value = model[key] !== undefined ? model[key] : values[key];\n const formState = {\n value: value,\n disabled: disabled,\n };\n const validator = typeof validators[key] !== 'undefined' ? validators[key] : null;\n const asyncValidator = typeof asyncValidators[key] !== 'undefined' ? asyncValidators[key] : null;\n\n controls[key] = new UntypedFormControl(formState, validator, asyncValidator);\n }\n\n // Configure form for extra validators that are not on a specific field\n for (const key of Object.keys(validators)) {\n if (!controls[key]) {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, validators[key]);\n }\n }\n\n for (const key of Object.keys(asyncValidators)) {\n if (controls[key] && asyncValidators[key]) {\n controls[key].setAsyncValidators(asyncValidators[key]);\n } else {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, null, asyncValidators[key]);\n }\n }\n\n return controls;\n }\n\n /**\n * Create the final FormGroup for the object, including all validators\n *\n * This method should **not** be overridden, but instead `getFormConfig`,\n * `getFormGroupValidators`, `getFormGroupAsyncValidators` might be.\n */\n public getFormGroup(model: Literal): UntypedFormGroup {\n const formConfig = this.getFormConfig(model);\n return new UntypedFormGroup(formConfig, {\n validators: this.getFormGroupValidators(model),\n asyncValidators: this.getFormGroupAsyncValidators(model),\n });\n }\n\n /**\n * Get a single object\n *\n * If available it will emit object from cache immediately, then it\n * will **always** fetch from network and then the observable will be completed\n */\n public getOne(id: string): Observable<Tone> {\n this.throwIfObservable(id);\n this.throwIfNotQuery(this.oneQuery);\n\n return this.getVariablesForOne(id).pipe(\n switchMap(variables => {\n this.throwIfNotQuery(this.oneQuery);\n\n return this.apollo.watchQuery<unknown, Vone>({\n query: this.oneQuery,\n variables: variables,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-only',\n }).valueChanges;\n }),\n filter(result => !!result.data),\n takeWhile(result => result.networkStatus !== NetworkStatus.ready, true),\n map(result => (result.data as Literal)[this.name]),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * It will **always** fetch from network and then the observable will be completed.\n * No cache is ever used, so it's slow but correct.\n */\n public getAll(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return this.getPartialVariablesForAll().pipe(\n first(),\n switchMap(partialVariables => {\n this.throwIfNotQuery(this.allQuery);\n\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n this.mapAll(),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * Every time the observable variables change, and they are not undefined,\n * it will return result from cache, then it will **always** fetch from network.\n *\n * You must subscribe to start getting results (and fetch from network).\n *\n * The observable result will only complete when unsubscribing. That means you **must** unsubscribe.\n */\n public watchAll(\n queryVariablesManager: NaturalQueryVariablesManager<Vall>,\n fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network',\n ): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return combineLatest({\n variables: queryVariablesManager.variables.pipe(\n // Ignore very fast variable changes\n debounceTime(20),\n // Wait for variables to be defined to prevent duplicate query: with and without variables\n // Null is accepted value for \"no variables\"\n filter(variables => typeof variables !== 'undefined'),\n ),\n partialVariables: this.getPartialVariablesForAll(),\n }).pipe(\n switchMap(result => {\n // Apply partial variables from service\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', result.partialVariables);\n\n this.throwIfNotQuery(this.allQuery);\n\n return this.apollo\n .watchQuery<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: fetchPolicy,\n })\n .valueChanges.pipe(\n catchError(() => EMPTY),\n filter(r => !!r.data),\n this.mapAll(),\n );\n }),\n );\n }\n\n /**\n * This functions allow to quickly create or update objects.\n *\n * Manages a \"creation is pending\" status, and update when creation is ready.\n * Uses regular update/updateNow and create methods.\n * Used mainly when editing multiple objects in same controller (like in editable arrays)\n */\n public createOrUpdate(\n object: Vcreate['input'] | WithId<Vupdate['input']>,\n now = false,\n ): Observable<Tcreate | Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n this.throwIfNotQuery(this.updateMutation);\n\n // If creation is pending, listen to creation observable and when ready, fire update\n const pendingCreation = this.creatingCache.get(object);\n if (pendingCreation) {\n return pendingCreation.pipe(\n switchMap(() => {\n return this.update(object as WithId<Vupdate['input']>);\n }),\n );\n }\n\n // If object has Id, just save it\n if ('id' in object && object.id) {\n if (now) {\n // used mainly for tests, because lodash debounced used in update() does not work fine with fakeAsync and tick()\n return this.updateNow(object as WithId<Vupdate['input']>);\n } else {\n return this.update(object as WithId<Vupdate['input']>);\n }\n }\n\n // If object was not saving, and has no ID, create it\n const creation = this.create(object).pipe(\n tap(() => {\n this.creatingCache.delete(object); // remove from cache\n }),\n );\n\n // stores creating observable in a cache replayable version of the observable,\n // so several update() can subscribe to the same creation\n this.creatingCache.set(object, creation.pipe(shareReplay()));\n\n return creation;\n }\n\n /**\n * Create an object in DB and then refetch the list of objects\n */\n public create(object: Vcreate['input']): Observable<Tcreate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n\n const variables = merge(\n {},\n {input: this.getInput(object)},\n this.getPartialVariablesForCreation(object),\n ) as Vcreate;\n\n return this.apollo\n .mutate<Tcreate, Vcreate>({\n mutation: this.createMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n const newObject = this.mapCreation(result);\n\n if (newObject) {\n return mergeWith(object, newObject, mergeOverrideArray);\n } else {\n return newObject;\n }\n }),\n );\n }\n\n /**\n * Update an object, after a short debounce\n */\n public update(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n // Keep a single instance of the debounced update function\n const id = object.id;\n\n return this.naturalDebounceService.debounce(this, id, this.updateNow(object));\n }\n\n /**\n * Update an object immediately when subscribing\n */\n public updateNow(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n const variables = merge(\n {\n id: object.id,\n input: this.getInput(object),\n },\n this.getPartialVariablesForUpdate(object),\n ) as Vupdate;\n\n return this.apollo\n .mutate<Tupdate, Vupdate>({\n mutation: this.updateMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n const mappedResult = this.mapUpdate(result);\n\n return mergeWith(object, mappedResult, mergeOverrideArray);\n }),\n );\n }\n\n /**\n * Update an object but without automatically injecting values coming\n * from `getDefaultForServer()`.\n */\n public updatePartially(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n const variables = {\n id: object.id,\n input: omit(relationsToIds(object), 'id'),\n } as Vupdate;\n\n return this.apollo\n .mutate<Tupdate, Vupdate>({\n mutation: this.updateMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n return this.mapUpdate(result);\n }),\n );\n }\n\n /**\n * Delete objects and then refetch the list of objects\n */\n public delete(objects: {id: string}[]): Observable<Tdelete> {\n this.throwIfObservable(objects);\n this.throwIfNotQuery(this.deleteMutation);\n\n const ids = objects.map(o => {\n // Cancel pending update\n this.naturalDebounceService.cancel(this, o.id);\n\n return o.id;\n });\n const variables = merge(\n {\n ids: ids,\n },\n this.getPartialVariablesForDelete(objects),\n ) as Vdelete;\n\n return this.apollo\n .mutate<Tdelete, Vdelete>({\n mutation: this.deleteMutation,\n variables: variables,\n })\n .pipe(\n // Delay the observable until Apollo refetch is completed\n switchMap(result => {\n const mappedResult = this.mapDelete(result);\n\n return from(this.apollo.client.reFetchObservableQueries()).pipe(map(() => mappedResult));\n }),\n );\n }\n\n /**\n * Resolve model and items related to the model, if the id is provided, in order to show a form\n */\n public resolve(id: string): Observable<Resolve<Tone>> {\n // Load model if id is given\n let observable: Observable<Tone>;\n if (id) {\n observable = this.getOne(id);\n } else {\n observable = of(this.getConsolidatedForClient() as Tone);\n }\n\n return observable.pipe(\n map(result => {\n return {model: result};\n }),\n );\n }\n\n /**\n * Return an object that match the GraphQL input type.\n * It creates an object with manually filled data and add uncompleted data (like required attributes that can be empty strings)\n */\n public getInput(object: Literal): Vcreate['input'] | Vupdate['input'] {\n // Convert relations to their IDs for mutation\n object = relationsToIds(object);\n\n // Pick only attributes that we can find in the empty object\n // In other words, prevent to select data that has unwanted attributes\n const emptyObject = this.getDefaultForServer();\n let input = pick(object, Object.keys(emptyObject));\n\n // Complete a potentially uncompleted object with default values\n input = defaults(input, emptyObject);\n\n return input;\n }\n\n /**\n * Return the number of objects matching the query. It may never complete.\n *\n * This is used for the unique validator\n */\n public count(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<number> {\n const plural = makePlural(this.name);\n const queryName = 'Count' + upperCaseFirstLetter(plural);\n const filterType = upperCaseFirstLetter(this.name) + 'Filter';\n\n const query = gql`\n query ${queryName} ($filter: ${filterType}) {\n count: ${plural} (filter: $filter, pagination: {pageSize: 0, pageIndex: 0}) {\n length\n }\n }`;\n\n return this.getPartialVariablesForAll().pipe(\n switchMap(partialVariables => {\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<{count: {length: number}}, Vall>({\n query: query,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n map(result => result.data.count.length),\n );\n }\n\n /**\n * Return empty object with some default values from server perspective\n *\n * This is typically useful when showing a form for creation\n */\n protected getDefaultForServer(): Vcreate['input'] | Vupdate['input'] {\n return {};\n }\n\n /**\n * Return empty object with some default values from frontend perspective\n *\n * Where empty object must respect graphql XXXInput type, may need some default values for other fields\n */\n protected getDefaultForClient(): Literal {\n return {};\n }\n\n /**\n * This is used to extract only the array of fetched objects out of the entire fetched data\n */\n protected mapAll(): OperatorFunction<FetchResult<unknown>, Tall> {\n const plural = makePlural(this.name);\n return map(result => (result.data as any)[plural]); // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the created object out of the entire fetched data\n */\n protected mapCreation(result: MutationResult<unknown>): Tcreate {\n const name = 'create' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the updated object out of the entire fetched data\n */\n protected mapUpdate(result: MutationResult<unknown>): Tupdate {\n const name = 'update' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only flag when deleting an object\n */\n protected mapDelete(result: MutationResult<unknown>): Tdelete {\n const name = 'delete' + makePlural(upperCaseFirstLetter(this.name));\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * Returns additional variables to be used when getting a single object\n *\n * This is typically a site or state ID, and is needed to get appropriate access rights\n */\n protected getPartialVariablesForOne(): Observable<Partial<Vone>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when getting multiple objects\n *\n * This is typically a site or state ID, but it could be something else to further filter the query\n */\n public getPartialVariablesForAll(): Observable<Partial<Vall>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when creating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForCreation(object: Literal): Partial<Vcreate> {\n return {};\n }\n\n /**\n * Returns additional variables to be used when updating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForUpdate(object: Literal): Partial<Vupdate> {\n return {};\n }\n\n /**\n * Return additional variables to be used when deleting an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForDelete(objects: Literal[]): Partial<Vdelete> {\n return {};\n }\n\n /**\n * Throw exception to prevent executing queries with invalid variables\n */\n protected throwIfObservable(value: unknown): void {\n if (value instanceof Observable) {\n throw new Error(\n 'Cannot use Observable as variables. Instead you should use .subscribe() to call the method with a real value',\n );\n }\n }\n\n /**\n * Merge given ID with additional partial variables if there is any\n */\n private getVariablesForOne(id: string): Observable<Vone> {\n return this.getPartialVariablesForOne().pipe(\n map(partialVariables => merge({}, {id: id} as Vone, partialVariables)),\n );\n }\n\n /**\n * Throw exception to prevent executing null queries\n */\n private throwIfNotQuery(query: DocumentNode | null): asserts query {\n if (!query) {\n throw new Error('GraphQL query for this method was not configured in this service constructor');\n }\n }\n}\n","import {\n catchError,\n debounceTime,\n EMPTY,\n forkJoin,\n map,\n mergeMap,\n Observable,\n of,\n raceWith,\n ReplaySubject,\n shareReplay,\n Subject,\n take,\n} from 'rxjs';\nimport {Injectable} from '@angular/core';\nimport {NaturalAbstractModelService} from './abstract-model.service';\n\ntype Debounced<T> = {\n source: Observable<T>;\n debouncer: Subject<void>;\n canceller: Subject<void>;\n result: Observable<T>;\n};\ntype Key = NaturalAbstractModelService<unknown, any, any, any, unknown, any, unknown, any, unknown, any>;\n\n/**\n * Debounce subscriptions to observable, with possibility to cancel one, or flush all of them. Typically,\n * observables are object updates, so `NaturalAbstractModelService.updateNow()`.\n *\n * `key` must be an instance of `NaturalAbstractModelService` to separate objects by their types. So User with ID 1 is\n * not confused with Product with ID 1. It has no other purpose.\n *\n * `id` should be the ID of the object that will be updated.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDebounceService {\n private readonly flusher = new Subject<void>();\n\n /**\n * Stores the debounced update function\n */\n private readonly allDebouncedUpdateCache = new Map<Key, Map<string, Debounced<unknown>>>();\n\n /**\n * Debounce the given source observable for a short time. If called multiple times with the same key and id,\n * it will postpone the subscription to the source observable.\n *\n * Giving the same key and id but a different source observable will replace the original observable, but\n * keep the same debouncing timeline.\n */\n public debounce<T>(key: Key, id: string, source: Observable<T>): Observable<T> {\n const debouncedUpdateCache = this.getMap(key) as Map<string, Debounced<T>>;\n let debounced = debouncedUpdateCache.get(id);\n\n if (debounced) {\n debounced.source = source;\n } else {\n const debouncer = new ReplaySubject<void>(1);\n let wasCancelled = false;\n const canceller = new Subject<void>();\n canceller.subscribe(() => {\n wasCancelled = true;\n debouncer.complete();\n canceller.complete();\n this.delete(key, id);\n });\n\n debounced = {\n debouncer,\n canceller,\n source,\n result: debouncer.pipe(\n debounceTime(2000), // Wait 2 seconds...\n raceWith(this.flusher), // ...unless flusher is triggered\n take(1),\n mergeMap(() => {\n this.delete(key, id);\n\n if (wasCancelled || !debounced) {\n return EMPTY;\n }\n\n return debounced.source;\n }),\n shareReplay(), // All attempts to update will share the exact same single result from API\n ),\n };\n\n debouncedUpdateCache.set(id, debounced);\n }\n\n // Notify our debounced update each time we ask to update\n debounced.debouncer.next();\n\n // Return and observable that is updated when mutation is done\n return debounced.result;\n }\n\n public cancel(key: Key, id: string): void {\n const debounced = this.allDebouncedUpdateCache.get(key)?.get(id);\n debounced?.canceller.next();\n }\n\n /**\n * Immediately execute all pending updates.\n *\n * It should typically be called before login out.\n *\n * The returned observable will complete when all updates complete, even if some of them error.\n */\n public flush(): Observable<void> {\n const all: Observable<unknown>[] = [];\n this.allDebouncedUpdateCache.forEach(map =>\n map.forEach(debounced => {\n all.push(debounced.result.pipe(catchError(() => of(undefined))));\n }),\n );\n\n if (!all.length) {\n all.push(of(undefined));\n }\n\n return new Observable(subscriber => {\n const subscription = forkJoin(all)\n .pipe(map(() => undefined))\n .subscribe(subscriber);\n\n // Flush only after subscription process is finished\n this.flusher.next();\n\n return subscription;\n });\n }\n\n /**\n * Count of pending updates\n */\n public get count(): number {\n let count = 0;\n this.allDebouncedUpdateCache.forEach(map => (count += map.size));\n\n return count;\n }\n\n private getMap(key: Key): Map<string, Debounced<unknown>> {\n let debouncedUpdateCache = this.allDebouncedUpdateCache.get(key);\n if (!debouncedUpdateCache) {\n debouncedUpdateCache = new Map<string, Debounced<unknown>>();\n this.allDebouncedUpdateCache.set(key, debouncedUpdateCache);\n }\n\n return debouncedUpdateCache;\n }\n\n private delete(key: Key, id: string): void {\n const map = this.allDebouncedUpdateCache.get(key);\n if (!map) {\n return;\n }\n\n map.delete(id);\n\n if (!map.size) {\n this.allDebouncedUpdateCache.delete(key);\n }\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {Injectable} from '@angular/core';\n\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nconst enumTypeQuery = gql`\n query EnumType($name: String!) {\n __type(name: $name) {\n __typename\n enumValues {\n name\n description\n }\n }\n }\n`;\n\ninterface EnumType {\n __type: null | {\n __typename: string;\n enumValues: null | Array<{\n name: string;\n description: null | string;\n }>;\n };\n}\n\nexport interface IEnum {\n value: string;\n name: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalEnumService {\n public constructor(private readonly apollo: Apollo) {}\n\n /**\n * Return a list of observable enumerables considering the given name\n */\n public get(name: string): Observable<IEnum[]> {\n // Load possible action statuses\n return this.apollo\n .query<EnumType>({\n query: enumTypeQuery,\n variables: {name: name},\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(result => {\n const values: IEnum[] = [];\n if (result.data.__type && result.data.__type.enumValues) {\n for (const enumValue of result.data.__type.enumValues) {\n values.push({\n value: enumValue.name,\n name: enumValue.description || '',\n });\n }\n }\n\n return values;\n }),\n );\n }\n\n /**\n * Returns the enum user-friendly name, instead of its value.\n */\n public getValueName(value: string, enumName: string): Observable<string> {\n return this.get(enumName).pipe(\n map(values => {\n for (const v of values) {\n if (v.value === value) {\n return v.name;\n }\n }\n\n return '';\n }),\n );\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {FetchResult} from '@apollo/client/core';\nimport {Injectable} from '@angular/core';\n\nimport {clone} from 'lodash-es';\nimport {forkJoin, Observable, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {Literal} from '../types/types';\nimport {upperCaseFirstLetter} from '../classes/utility';\n\n/**\n * Query to get list of mutations\n */\nconst queriesQuery = gql`\n query Mutations {\n __type(name: \"Mutation\") {\n fields {\n name\n args {\n name\n type {\n ofType {\n name\n }\n }\n }\n }\n }\n }\n`;\n\ntype IntrospectedArg = {\n name: string;\n type: {\n ofType: null | {\n name: null | string;\n };\n };\n};\n\ninterface IntrospectedMutations {\n __type: null | {\n fields: null | Array<{\n name: string;\n args: Array<IntrospectedArg>;\n }>;\n };\n}\n\nexport interface LinkableObject {\n id: string;\n __typename: string;\n}\n\ninterface MutationArg {\n name: string;\n type: string;\n}\n\ninterface Mutation {\n name: string;\n arg1: MutationArg;\n arg2: MutationArg;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalLinkMutationService {\n /**\n * Receives the list of available mutations\n */\n private allMutations?: Mutation[];\n\n public constructor(private readonly apollo: Apollo) {}\n\n /**\n * Link two objects together\n */\n public link(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>> {\n // clone prevents to affect the original reference\n const clonedVariables = clone(variables);\n\n return this.getMutation('link', obj1, obj2, otherName, clonedVariables).pipe(\n switchMap(mutation => this.execute(mutation)),\n );\n }\n\n /**\n * Link many objects\n */\n public linkMany(\n obj1: LinkableObject,\n objects: LinkableObject[],\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>[]> {\n return forkJoin(objects.map(obj2 => this.link(obj1, obj2, otherName, variables)));\n }\n\n /**\n * Unlink two objects\n */\n public unlink(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n ): Observable<FetchResult<{id: string}>> {\n return this.getMutation('unlink', obj1, obj2, otherName).pipe(switchMap(mutation => this.execute(mutation)));\n }\n\n /**\n * Return the list of all available mutation names\n */\n private getAllMutationNames(): Observable<Mutation[]> {\n if (this.allMutations) {\n return of(this.allMutations);\n }\n\n const mapArg = (arg: IntrospectedArg): MutationArg => {\n return {\n name: arg.name,\n type: arg.type?.ofType?.name?.replace(/ID$/, '') || 'should-never-happen',\n };\n };\n\n return this.apollo\n .query<IntrospectedMutations>({\n query: queriesQuery,\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(({data}) => {\n if (data.__type && data.__type.fields) {\n this.allMutations = data.__type.fields\n .filter(v => v.name.match(/^(link|unlink)/))\n .map(v => {\n return {\n name: v.name,\n arg1: mapArg(v.args[0]),\n arg2: mapArg(v.args[1]),\n };\n });\n } else {\n this.allMutations = [];\n }\n\n return this.allMutations;\n }),\n );\n }\n\n /**\n * Generate mutation using patterns and replacing variables\n */\n private getMutation(\n action: string,\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null,\n variables: Literal = {},\n ): Observable<string> {\n otherName = otherName ? upperCaseFirstLetter(otherName) : otherName;\n const mutationName = action + obj1.__typename + (otherName || obj2.__typename);\n const reversedMutationName = action + obj2.__typename + (otherName || obj1.__typename);\n\n return this.getAllMutationNames().pipe(\n map(allMutationNames => {\n const mutation =\n allMutationNames.find(mut => mut.name === mutationName) ||\n allMutationNames.find(mut => mut.name === reversedMutationName);\n\n if (mutation) {\n return this.buildTemplate(mutation, obj1, obj2, variables);\n }\n\n throw TypeError('API does not allow to ' + action + ' ' + obj1.__typename + ' and ' + obj2.__typename);\n }),\n );\n }\n\n /**\n * Execute mutation\n */\n private execute(mutation: string): Observable<FetchResult<{id: string}>> {\n return this.apollo\n .mutate<{id: string}>({\n mutation: gql(mutation),\n })\n .pipe(\n map(r => {\n this.apollo.client.reFetchObservableQueries();\n return r;\n }),\n );\n }\n\n /**\n * Build the actual mutation string\n */\n private buildTemplate(\n mutation: Mutation,\n obj1: LinkableObject,\n obj2: LinkableObject,\n variables: Literal = {},\n ): string {\n let name1;\n let name2;\n if (obj1.__typename === mutation.arg1.type) {\n name1 = mutation.arg1.name;\n name2 = mutation.arg2.name;\n } else {\n name1 = mutation.arg2.name;\n name2 = mutation.arg1.name;\n }\n variables[name1] = obj1.id;\n variables[name2] = obj2.id;\n\n let serializedVariables = '';\n for (const key of Object.keys(variables)) {\n serializedVariables += key + ': ' + JSON.stringify(variables[key]) + ' ';\n }\n\n return `mutation linkAndUnlink {\n ${mutation.name}(${serializedVariables}) {\n id\n }\n }`;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NativeDateAdapter} from '@angular/material/core';\n\nconst patterns: readonly RegExp[] = [\n /^(?<day>\\d{1,2})\\.(?<month>\\d{1,2})\\.(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})-(?<month>\\d{1,2})-(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\/(?<month>\\d{1,2})\\/(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\\\(?<month>\\d{1,2})\\\\(?<year>\\d{4}|\\d{2})$/,\n // strict ISO format\n /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/,\n];\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSwissParsingDateAdapter extends NativeDateAdapter {\n /**\n * Parse commonly accepted swiss format, such as:\n *\n * - 24.12.2018\n * - 1.4.18\n * - 2018-12-24\n */\n public override parse(value: unknown): Date | null {\n if (typeof value === 'number') {\n return new Date(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n for (const pattern of patterns) {\n const m = trimmed.match(pattern);\n if (m?.groups) {\n const year = +m.groups.year;\n const month = +m.groups.month;\n const day = +m.groups.day;\n\n return this.createDateIfValid(year, month, day);\n }\n }\n }\n\n return null;\n }\n\n private createDateIfValid(year: number, month: number, date: number): Date | null {\n // Assume year 2000 if only two digits\n if (year < 100) {\n year += 2000;\n }\n\n month = month - 1;\n if (month >= 0 && month <= 11 && date >= 1 && date <= 31) {\n return this.createDate(year, month, date);\n }\n\n return null;\n }\n\n public override getFirstDayOfWeek(): number {\n // Always starts on Monday, even though it is not true for Canada, U.S., Mexico and many more\n // Also see https://github.com/tc39/ecma402/issues/6\n return 1;\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './alert.service';\nexport * from './confirm.component';\n","import {Directive, Host, HostBinding, Inject, InjectionToken, Input, Optional, Self} from '@angular/core';\nimport {MatIcon, MatIconRegistry} from '@angular/material/icon';\nimport {DomSanitizer} from '@angular/platform-browser';\n\ninterface NaturalIconType {\n name: string;\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n}\n\nexport interface NaturalIconConfig {\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n}\n\nexport interface NaturalIconsConfig {\n [key: string]: NaturalIconConfig;\n}\n\nexport const NATURAL_ICONS_CONFIG = new InjectionToken<NaturalIconsConfig>('Configuration for Natural Icons');\n\nconst naturalRegistered: unique symbol = Symbol('Natural icon registered');\n\n/**\n * Allows to use `<mat-icon>` without knowing where an icon comes from (SVG or font) or with aliases for Material font.\n *\n * SVG icons and Material font aliases must be configured ahead of time, via `NATURAL_ICONS_CONFIG`.\n *\n * It also make it easy to give a specific size to the icon via `[size]`.\n *\n * Usage:\n *\n * ```html\n * <mat-icon naturalIcon=\"search\"></mat-icon>\n * <mat-icon naturalIcon=\"my-svg-icon-name\"></mat-icon>\n * <mat-icon naturalIcon=\"my-alias-for-search\"></mat-icon>\n * <mat-icon naturalIcon=\"search\" [size]=\"150\"></mat-icon>\n * ```\n */\n@Directive({\n selector: 'mat-icon[naturalIcon]',\n standalone: true,\n})\nexport class NaturalIconDirective {\n @HostBinding('style.font-size.px')\n @HostBinding('style.min-height.px')\n @HostBinding('style.min-width.px')\n private _size: number | undefined = undefined;\n\n @HostBinding('class') private classes = '';\n\n public constructor(\n private readonly matIconRegistry: MatIconRegistry,\n private readonly domSanitizer: DomSanitizer,\n @Optional() @Inject(NATURAL_ICONS_CONFIG) private readonly config: NaturalIconsConfig | null,\n @Host() @Self() public readonly matIconComponent: MatIcon,\n ) {\n this.registerIcons(config ?? {});\n }\n\n @Input({required: true})\n public set naturalIcon(value: string) {\n const newIcon: NaturalIconType = {\n name: value,\n ...(this.config?.[value] ?? {font: value}),\n };\n\n if (newIcon.class) {\n this.classes = newIcon.class;\n }\n\n this.matIconComponent.fontIcon = undefined!;\n this.matIconComponent.svgIcon = undefined!;\n\n if (newIcon.font) {\n this.matIconComponent.fontIcon = newIcon.font;\n } else if (newIcon.svg) {\n this.matIconComponent.svgIcon = newIcon.name;\n }\n }\n\n @Input()\n public set size(size: number | undefined | null) {\n this._size = size ?? undefined;\n }\n\n private registerIcons(config: NaturalIconsConfig): void {\n // Ensure that this specific instance of registry has our our icons\n // exactly once, not less and not more\n const registry = this.matIconRegistry as any;\n if (registry[naturalRegistered]) {\n return;\n }\n registry[naturalRegistered] = true;\n\n for (const key of Object.keys(config)) {\n const svg = config[key].svg;\n if (svg) {\n this.matIconRegistry.addSvgIcon(key, this.domSanitizer.bypassSecurityTrustResourceUrl(svg));\n }\n }\n }\n}\n","import {Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {AvailableColumn, Button} from './types';\nimport {cancellableTimeout} from '../../classes/rxjs';\nimport {map, Subject} from 'rxjs';\nimport {ThemePalette} from '@angular/material/core';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {FormsModule} from '@angular/forms';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NgIf, NgFor, NgClass, AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'natural-columns-picker',\n templateUrl: './columns-picker.component.html',\n styleUrls: ['./columns-picker.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatButtonModule,\n MatMenuModule,\n MatIconModule,\n NaturalIconDirective,\n NgFor,\n NgClass,\n MatCheckboxModule,\n MatTooltipModule,\n FormsModule,\n AsyncPipe,\n ],\n})\nexport class NaturalColumnsPickerComponent implements OnChanges, OnDestroy {\n private _selections?: string[];\n private _availableColumns: Required<AvailableColumn>[] = [];\n\n @Input()\n public buttons: Readonly<Readonly<Button>[]> | null = [];\n\n /**\n * Set all the columns that are available.\n */\n @Input()\n public set availableColumns(columns: Readonly<Readonly<AvailableColumn>[]> | undefined) {\n this._availableColumns =\n columns?.map(column => {\n return {\n checked: true,\n hidden: false,\n ...column,\n };\n }) ?? [];\n }\n\n /**\n * Set the columns that we would like to select but might be unavailable.\n *\n * If a column is unavailable it will be ignored silently. To know what columns were actually applied\n * you should use `selectionChange`.\n *\n * It is often set once on component initialization, but it can also be set again later in the lifespan of the component.\n */\n @Input()\n public set selections(columns: string[] | undefined) {\n this._selections = columns;\n\n if (!columns || !this._availableColumns.length) {\n return;\n }\n\n this._availableColumns.forEach(col => {\n col.checked = columns.includes(col.id);\n });\n }\n\n /**\n * Emit a list of valid and selected column keys whenever the selection changes\n */\n @Output() public readonly selectionChange = new EventEmitter<string[]>();\n\n /**\n * Displayed options in the dropdown menu\n */\n public displayedColumns: Required<AvailableColumn>[] = [];\n\n private readonly ngUnsubscribe = new Subject<void>();\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n public constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n private initColumns(): void {\n this._availableColumns?.forEach(col => {\n col.checked = this._selections?.length ? this._selections.includes(col.id) : col.checked;\n });\n\n // Show options only for columns that are not hidden\n this.displayedColumns = this._availableColumns.filter(col => !col.hidden) ?? [];\n }\n\n public updateColumns(): void {\n const selectedColumns = this._availableColumns.filter(col => col.checked).map(col => col.id);\n this.selectionChange.emit(selectedColumns);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Unfortunately need a timeout to avoid an ExpressionChangedAfterItHasBeenCheckedError on /state/4989/process\n cancellableTimeout(this.ngUnsubscribe).subscribe(() => {\n if (changes.availableColumns) {\n this.initColumns();\n this.updateColumns();\n } else if (changes.selections) {\n this.updateColumns();\n }\n });\n }\n\n public defaultTrue(value: boolean | undefined): boolean {\n return value ?? true;\n }\n\n public color(button: Button): ThemePalette | null {\n return button.checked ? 'primary' : null;\n }\n\n public useCheckbox(button: Button): boolean {\n return 'checked' in button;\n }\n\n public needMargin(button: Button | null = null): string {\n return this.buttons?.some(this.useCheckbox) && (!button || !this.useCheckbox(button))\n ? 'align-with-checkbox'\n : '';\n }\n\n public someVisibleButtons(): boolean {\n const visibleButtons = this.buttons?.reduce((sum, button) => (this.defaultTrue(button.show) ? 1 : 0), 0) ?? 0;\n\n return visibleButtons > 0;\n }\n}\n","<div>\n <ng-container *ngIf=\"(isMobile | async) && someVisibleButtons(); else elseBlock\">\n <button mat-icon-button [matMenuTriggerFor]=\"mobileMenu\">\n <mat-icon naturalIcon=\"more_vert\"></mat-icon>\n </button>\n\n <mat-menu #mobileMenu=\"matMenu\">\n <ng-template matMenuContent>\n <ng-container *ngFor=\"let button of buttons\">\n <a\n mat-menu-item\n *ngIf=\"button.href\"\n [href]=\"defaultTrue(button.show) && button.href\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [ngClass]=\"needMargin(button)\"\n >\n <mat-checkbox *ngIf=\"useCheckbox(button)\" [checked]=\"button.checked\"></mat-checkbox>\n\n {{ button.label }}\n </a>\n\n <button\n mat-menu-item\n *ngIf=\"defaultTrue(button.show) && !button.href && !button.buttons\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [ngClass]=\"needMargin(button)\"\n >\n <mat-checkbox *ngIf=\"useCheckbox(button)\" [checked]=\"button.checked\"></mat-checkbox>\n\n {{ button.label }}\n </button>\n\n <ng-container *ngIf=\"defaultTrue(button.show) && button.buttons\">\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n (click)=\"button.click?.(button, $event)\"\n [ngClass]=\"needMargin(button)\"\n >\n <mat-checkbox *ngIf=\"useCheckbox(button)\" [checked]=\"button.checked\"></mat-checkbox>\n\n {{ button.label }}\n </button>\n\n <mat-menu #subMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a\n *ngFor=\"let subButton of button.buttons\"\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n </ng-template>\n </mat-menu>\n </ng-container>\n </ng-container>\n\n <button\n *ngIf=\"displayedColumns.length\"\n [matMenuTriggerFor]=\"columnMenu\"\n mat-menu-item\n [ngClass]=\"needMargin(null)\"\n >\n <span i18n>Colonnes</span>\n </button>\n </ng-template>\n </mat-menu>\n </ng-container>\n\n <ng-template #elseBlock>\n <ng-container *ngFor=\"let button of buttons\">\n <a\n mat-icon-button\n *ngIf=\"button.href\"\n [href]=\"defaultTrue(button.show) && button.href\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n >\n <mat-icon [naturalIcon]=\"button.icon\"></mat-icon>\n </a>\n\n <button\n mat-icon-button\n *ngIf=\"defaultTrue(button.show) && !button.href && !button.buttons\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n >\n <mat-icon [naturalIcon]=\"button.icon\"></mat-icon>\n </button>\n\n <ng-container *ngIf=\"defaultTrue(button.show) && button.buttons\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n >\n <mat-icon [naturalIcon]=\"button.icon\"></mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n <ng-template matMenuContent>\n <a\n *ngFor=\"let subButton of button.buttons\"\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n </ng-template>\n </mat-menu>\n </ng-container>\n </ng-container>\n\n <button\n *ngIf=\"displayedColumns.length\"\n [matMenuTriggerFor]=\"columnMenu\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Sélectionner les colonnes\"\n >\n <mat-icon naturalIcon=\"view_column\"></mat-icon>\n </button>\n </ng-template>\n</div>\n\n<mat-menu #columnMenu=\"matMenu\">\n <ng-template matMenuContent>\n <div\n (click)=\"$event.stopPropagation(); column.checked = !column.checked; updateColumns()\"\n *ngFor=\"let column of displayedColumns\"\n mat-menu-item\n >\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"updateColumns()\" [(ngModel)]=\"column.checked\">{{\n column.label\n }}</mat-checkbox>\n </div>\n </ng-template>\n</mat-menu>\n","/*\n * Public API Surface of natural\n */\n\nexport {AvailableColumn, Button, SubButton} from './types';\nexport * from './columns-picker.component';\n","import {AfterViewInit, Directive, Input} from '@angular/core';\nimport {MatTab, MatTabGroup} from '@angular/material/tabs';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {clone} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\n\n/**\n * Returns an identifier for the tab\n */\nfunction getTabId(tab: MatTab): string {\n return tab.content?.viewContainerRef.element.nativeElement.id ?? '';\n}\n\n/**\n * Usage :\n *\n * <mat-tab-group mat-stretch-tabs=\"false\" [naturalLinkableTab]=\"!isPanel\">\n * <mat-tab label=\"Third 1\">third 1</mat-tab> // First tab doesn't need id. This keeps url clean on default one\n * <mat-tab label=\"Third 2\" id=\"third2\">Third 2</mat-tab>\n * ...\n * </mat-tab-group>\n */\n@Directive({\n selector: 'mat-tab-group[naturalLinkableTab]',\n standalone: true,\n})\nexport class NaturalLinkableTabDirective extends NaturalAbstractController implements AfterViewInit {\n /**\n * If false, disables the persistent navigation\n */\n @Input() public naturalLinkableTab: boolean | '' = true;\n\n public constructor(\n private readonly component: MatTabGroup,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n ) {\n super();\n }\n\n public ngAfterViewInit(): void {\n if (this.naturalLinkableTab === false) {\n return;\n }\n\n // When url params change, update the mat-tab-group selected tab\n this.route.fragment.pipe(takeUntil(this.ngUnsubscribe)).subscribe(fragment => {\n // Get index of tab that matches wanted name\n const tabIndex = this.getTabIndex(fragment);\n\n // If tab index is valid (>= 0) go to given fragment\n // If there is no fragment at all, go to first tab (index is -1 in this case)\n if (tabIndex >= 0 || !fragment) {\n this.component.selectedIndex = tabIndex;\n }\n });\n\n // When mat-tab-groups selected tab change, update url\n this.component.selectedTabChange.pipe(takeUntil(this.ngUnsubscribe)).subscribe(event => {\n const activatedTabName = getTabId(event.tab);\n const segments = this.route.snapshot.url;\n if (!segments.length) {\n // This should never happen in normal usage, because it would means there is no route at all in the app\n throw new Error('Cannot update URL for tabs without any segments in URL');\n }\n\n // Get url matrix params (/segment;matrix=param) only without route params (segment/:id)\n const params = clone(segments[segments.length - 1].parameters);\n\n this.router.navigate(['.', params], {\n relativeTo: this.route,\n queryParamsHandling: 'preserve',\n fragment: activatedTabName && activatedTabName.length ? activatedTabName : undefined,\n });\n });\n }\n\n private getTabIndex(fragment: string | null): number {\n return this.component._tabs.toArray().findIndex(tab => fragment === getTabId(tab));\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {upperCaseFirstLetter} from '../../../classes/utility';\n\n/**\n * Returns the string with the first letter as capital\n */\n@Pipe({\n name: 'capitalize',\n standalone: true,\n})\nexport class NaturalCapitalizePipe implements PipeTransform {\n public transform(value: string | null): string | null {\n if (value) {\n return upperCaseFirstLetter(value);\n }\n\n return value;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'ellipsis',\n standalone: true,\n})\nexport class NaturalEllipsisPipe implements PipeTransform {\n public transform(value: string, limit: number): string {\n return value.substr(0, limit - 1) + (value.length > limit ? '…' : '');\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {NaturalEnumService} from '../../../services/enum.service';\nimport {Observable} from 'rxjs';\n\n/**\n * A pipe to output an enum user-friendly name, instead of its value.\n *\n * Usage would be: {{ element.priority | enum: 'Priority' | async }}\n */\n@Pipe({\n name: 'enum',\n standalone: true,\n})\nexport class NaturalEnumPipe implements PipeTransform {\n public constructor(private readonly enumService: NaturalEnumService) {}\n\n public transform(value: any, enumName: string): Observable<string> {\n return this.enumService.getValueName(value, enumName);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {DatePipe} from '@angular/common';\n\n/**\n * A normal DatePipe but with default formatting to be '12.24.2020 23:30' to match the most common use-cases\n */\n@Pipe({\n name: 'swissDate',\n standalone: true,\n})\nexport class NaturalSwissDatePipe extends DatePipe implements PipeTransform {\n public override transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n public override transform(\n value: Date | string | number | null | undefined,\n format?: string,\n timezone?: string,\n locale?: string,\n ): string | null;\n public override transform(\n value: Date | string | number | null | undefined,\n format = 'dd.MM.y HH:mm',\n timezone?: string,\n locale?: string,\n ): string | null {\n return super.transform(value, format, timezone, locale);\n }\n}\n","import {Inject, Optional, Pipe, PipeTransform} from '@angular/core';\n\nfunction isDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * Returns a string to approximately describe the date.\n *\n * Eg:\n *\n * - \"il y a quelques minutes\"\n * - \"dans 3 jours\"\n * - \"dans 3 ans\"\n */\n@Pipe({\n name: 'timeAgo',\n standalone: true,\n})\nexport class NaturalTimeAgoPipe implements PipeTransform {\n public constructor(\n @Optional() @Inject('SHOULD_NEVER_BE_INJECTED') private readonly fakedNow: number | null = null,\n ) {}\n\n private getNow(): number {\n return this.fakedNow ?? Date.now();\n }\n\n public transform(date: Date | string | null | undefined): string {\n if (!date) {\n return '';\n }\n\n const stamp = isDate(date) ? date.getTime() : Date.parse(date);\n const now = this.getNow();\n\n const $seconds = (stamp - now) / 1000;\n const minutes = $seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n const weeks = days / 7;\n const months = days / 31;\n const years = days / 365;\n\n // Find out the best unit to use for display\n if (years <= -2) {\n const value = Math.round(Math.abs(years));\n return $localize`il y a ${value} ans`;\n } else if (years <= -1) {\n return $localize`il y a un an`;\n } else if (months <= -2) {\n const value = Math.round(Math.abs(months));\n return $localize`il y a ${value} mois`;\n } else if (months <= -1) {\n return $localize`il y a un mois`;\n } else if (weeks <= -2) {\n const value = Math.round(Math.abs(weeks));\n return $localize`il y a ${value} semaines`;\n } else if (weeks <= -1) {\n return $localize`il y a une semaine`;\n } else if (days <= -2) {\n const value = Math.round(Math.abs(days));\n return $localize`il y a ${value} jours`;\n } else if (days <= -1) {\n return $localize`il y a un jour`;\n } else if (hours <= -2) {\n const value = Math.round(Math.abs(hours));\n return $localize`il y a ${value} heures`;\n } else if (hours <= -1) {\n return $localize`il y a une heure`;\n } else if (minutes <= -5) {\n const value = Math.round(Math.abs(minutes));\n return $localize`il y a ${value} minutes`;\n } else if (minutes <= 0) {\n return $localize`il y a quelques minutes`;\n } else if (years > 2) {\n const value = Math.round(years);\n return $localize`dans ${value} ans`;\n } else if (years > 1) {\n return $localize`dans un an`;\n } else if (months > 2) {\n const value = Math.round(months);\n return $localize`dans ${value} mois`;\n } else if (months > 1) {\n return $localize`dans un mois`;\n } else if (weeks > 2) {\n const value = Math.round(weeks);\n return $localize`dans ${value} semaines`;\n } else if (weeks > 1) {\n return $localize`dans une semaine`;\n } else if (days > 2) {\n const value = Math.round(days);\n return $localize`dans ${value} jours`;\n } else if (days > 1) {\n return $localize`dans un jour`;\n } else if (hours > 2) {\n const value = Math.round(hours);\n return $localize`dans ${value} heures`;\n } else if (hours > 1) {\n return $localize`dans une heure`;\n } else if (minutes > 5) {\n const value = Math.round(minutes);\n return $localize`dans ${value} minutes`;\n } else if (minutes > 0) {\n return $localize`dans quelques minutes`;\n } else {\n throw new Error('Time travelling just happened');\n }\n }\n}\n","import {Directive, ElementRef, Input} from '@angular/core';\n\n@Directive({\n selector: 'img[naturalSrcDensity]',\n standalone: true,\n})\nexport class NaturalSrcDensityDirective {\n /**\n * Automatically apply image selection based on screen density.\n *\n * The given URL **MUST** be the normal density URL. And it **MUST** include\n * the size as last path segment. That size will automatically be changed\n * for other screen densities. That means that the server **MUST** be able to\n * serve an image of the given size.\n *\n * Usage:\n *\n * ```html\n * <img [naturalSrcDensity]=\"'/api/image/123/200'\" />\n * ```\n *\n * Will generate something like:\n *\n * ```html\n * <img\n * src=\"/api/image/123/200\"\n * srcset=\"/api/image/123/200, /api/image/123/300 1.5x, /api/image/123/400 2x, /api/image/123/600 3x, /api/image/123/800 4x\"\n * />\n * ```\n *\n * See https://web.dev/codelab-density-descriptors/\n */\n @Input({required: true})\n public set naturalSrcDensity(src: string) {\n if (!src) {\n return;\n }\n\n const match = src.match(/^(.*\\/)(\\d+)$/);\n const base = match?.[1];\n const size = +(match?.[2] ?? 0);\n\n let srcset = '';\n if (base && size) {\n // This should cover most common densities according to https://www.mydevice.io/#tab1\n const size15 = Math.round(size * 1.5);\n const size2 = size * 2;\n const size3 = size * 3;\n const size4 = size * 4;\n\n srcset = `${base}${size}, ${base}${size15} 1.5x, ${base}${size2} 2x, ${base}${size3} 3x, ${base}${size4} 4x`;\n }\n\n this.elementRef.nativeElement.src = src;\n this.elementRef.nativeElement.srcset = srcset;\n }\n\n public constructor(private readonly elementRef: ElementRef<HTMLImageElement>) {}\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Component, OnDestroy} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {ActivatedRoute, Router, RouterLink} from '@angular/router';\n\nexport interface NaturalDialogTriggerRoutingData<T, D> {\n component: ComponentType<T>;\n afterClosedRoute?: RouterLink['routerLink'];\n dialogConfig: MatDialogConfig<D>;\n}\n\nexport type NaturalDialogTriggerProvidedData<D> = {\n data?: Readonly<D> | null;\n activatedRoute: ActivatedRoute;\n};\n\nexport type NaturalDialogTriggerRedirectionValues = RouterLink['routerLink'] | null | undefined | '' | -1;\n\n@Component({\n template: '',\n standalone: true,\n})\nexport class NaturalDialogTriggerComponent<T, D> implements OnDestroy {\n private readonly dialogRef: MatDialogRef<T, NaturalDialogTriggerRedirectionValues>;\n\n private readonly triggerConfig: NaturalDialogTriggerRoutingData<T, D>;\n\n public constructor(\n private readonly dialog: MatDialog,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n ) {\n // Data from activated route\n this.triggerConfig = this.route.snapshot.data.trigger as NaturalDialogTriggerRoutingData<T, D>;\n\n // Get data relative to dialog service configuration\n const {data, ...config} = this.triggerConfig.dialogConfig;\n const dialogConfig: MatDialogConfig<NaturalDialogTriggerProvidedData<D>> = {\n ...config,\n data: {\n data: data,\n // Set data accessible into component instantiated by the dialog service\n activatedRoute: this.route,\n },\n };\n\n this.dialogRef = this.dialog.open<\n T,\n NaturalDialogTriggerProvidedData<D>,\n NaturalDialogTriggerRedirectionValues\n >(this.triggerConfig.component, dialogConfig);\n\n // Redirect on closing (if applicable)\n this.dialogRef.beforeClosed().subscribe(exitValue => this.redirect(exitValue));\n }\n\n /**\n * Called when router leaves route, and so on, closes the modal with undefined value to prevent a new redirection\n */\n public ngOnDestroy(): void {\n if (this.dialogRef) {\n this.dialogRef.close(-1); // -1 = no redirection\n }\n }\n\n /**\n * Redirects on modal closing under following rules/conditions\n *\n * If -1 : no redirection\n * If undefined, null or empty string : uses the router provided redirection route or fallbacks on parent route if router don't provide\n * If a value is provided, should be of type any[] and it's used for redirection.\n */\n public redirect(exitValue: NaturalDialogTriggerRedirectionValues): void {\n const isEmptyExitValue = exitValue == null || exitValue === ''; // undefined, null or ''\n\n if (exitValue === -1) {\n // if -1, don't redirect\n return;\n } else if (!isEmptyExitValue) {\n // If value provided, redirect to that route\n this.router.navigate(exitValue as any[]);\n } else if (isEmptyExitValue && this.triggerConfig.afterClosedRoute) {\n // If value is not provided (null) and router context specified default redirection route, use it\n this.router.navigate(this.triggerConfig.afterClosedRoute as any[]);\n } else if (isEmptyExitValue) {\n // If neither of component or router provides redirection, go to parent (care : parent can't have empty path : ''),\n this.router.navigate(['.'], {relativeTo: this.route.parent});\n }\n }\n}\n","import {Inject, Injectable, InjectionToken} from '@angular/core';\nimport {Meta, Title} from '@angular/platform-browser';\nimport {ActivatedRouteSnapshot, Data, NavigationEnd, PRIMARY_OUTLET, Router} from '@angular/router';\nimport {filter} from 'rxjs/operators';\nimport {NaturalDialogTriggerComponent} from '../../dialog-trigger/dialog-trigger.component';\n\nexport type NaturalSeo = NaturalSeoBasic | NaturalSeoCallback | NaturalSeoResolve;\n\n/**\n * Typically used for \"static\" pages where there is not a single resolved object. So\n * all pages such as \"About\", or list of objects (list of risks, etc.).\n *\n * This should be the most common used variant.\n */\nexport type NaturalSeoBasic = Robots & {\n /**\n * The page title, that will be concatenated with application name\n */\n title: string;\n /**\n * If given will be used as page description, otherwise fallback on default value\n */\n description?: string;\n};\n\n/**\n * Typically used for a \"dynamic\" page where a single object is resolved. So a detail page, such\n * as the detail of a risk and so on.\n */\nexport type NaturalSeoResolve = Robots & {\n /**\n * The key to be used in the resolved data to find the resolved object. The fullName\n * or name of the object will be used for page title, and the object description, if any,\n * will be used for page description.\n */\n resolveKey: string;\n};\n\n/**\n * Rarely used for a page that has very specific needs and need to build title and description in a custom way.\n * The callback back will be given the resolved data, and it is up to the callback to find whatever it needs.\n */\nexport type NaturalSeoCallback = (routeData: Data) => NaturalSeoBasic;\n\ninterface Robots {\n /**\n * If given will be used as robots meta tag, otherwise fallback on default value\n */\n robots?: string;\n}\n\nexport interface NaturalSeoConfig {\n /**\n * The name of the application that will always appear in the page title\n */\n applicationName: string;\n\n /**\n * Default value for description meta that is used for pages without value\n */\n defaultDescription?: string;\n\n /**\n * Default value for robots meta that is used for pages without value\n */\n defaultRobots?: string;\n\n /**\n * If given, the callback will be called for each route and must return a string that will\n * be inserted between the page title and the application name.\n *\n * It should be used to complete the title with info that are often, but not necessarily always,\n * available throughout the entire application. Typically used for the site/state in OKpilot.\n */\n extraPart?: (routeData: Data) => string;\n}\n\nexport const NATURAL_SEO_CONFIG = new InjectionToken<NaturalSeoConfig>('Configuration for SEO service');\n\nexport function stripTags(str: string): string {\n return str.replace(/<\\/?[^>]+>/g, '');\n}\n\ntype ResolvedData = {\n model?: {\n name?: string;\n fullName?: string;\n description?: string;\n };\n};\n\n/**\n * This service is responsible to keep up to date the page title and page description according\n * to what is configured in routing or default values.\n *\n * It **must** be injected in the root module of the application to have effects in all modules. And it\n * must be provided a configuration.\n *\n * The full title has the following structure:\n *\n * dialog title - page title - extra part - app name\n *\n * `dialog title` only exists if a `NaturalDialogTriggerComponent` is currently open, and that some SEO is\n * configured for it in the routing.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSeoService {\n private routeData?: Data;\n\n public constructor(\n @Inject(NATURAL_SEO_CONFIG) private readonly config: NaturalSeoConfig,\n private readonly router: Router,\n private readonly titleService: Title,\n private readonly metaTagService: Meta,\n ) {\n this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {\n const root = this.router.routerState.root.snapshot;\n this.routeData = this.getRouteData(root);\n const seo: NaturalSeo = this.routeData.seo ?? {title: ''};\n\n const dialogRouteData = this.getDialogRouteData(root);\n const dialogSeo: NaturalSeo = dialogRouteData?.seo;\n\n let basic = this.toBasic(seo, this.routeData);\n if (dialogRouteData && dialogSeo) {\n const dialogBasic = this.toBasic(dialogSeo, dialogRouteData);\n basic = {\n ...dialogBasic,\n title: this.join([dialogBasic.title, basic.title]),\n };\n }\n\n this.update(basic);\n });\n }\n\n /**\n * Update the SEO with given info. The extra part and app name will be appended automatically.\n *\n * In most cases this should not be used, and instead the SEO should be configured in the routing,\n * possibly with the callback variant for some dynamism.\n *\n * But in rare cases only the Component is able to build a proper page title, after it gather everything it\n * needed. For those cases the Component can inject this service and update the SEO directly.\n */\n public update(seo: NaturalSeoBasic): void {\n // Title\n const parts = [\n seo.title,\n this.config.extraPart && this.routeData ? this.config.extraPart(this.routeData) : '',\n this.config.applicationName,\n ];\n\n const title = this.join(parts);\n this.titleService.setTitle(title);\n\n // Description\n const description = seo?.description ?? this.config.defaultDescription;\n this.updateTag('description', description);\n\n // Robots\n const robots = seo?.robots ?? this.config.defaultRobots;\n this.updateTag('robots', robots);\n }\n\n private join(parts: string[]): string {\n return parts.filter(s => !!s).join(' - ');\n }\n\n private updateTag(name: string, value?: string): void {\n if (value) {\n this.metaTagService.updateTag({\n name: name,\n value: stripTags(value),\n });\n } else {\n this.metaTagService.removeTag(`name=\"${name}\"`);\n }\n }\n\n /**\n * Returns the data from the most deep/specific activated route\n */\n private getRouteData(route: ActivatedRouteSnapshot): Data {\n if (route.firstChild) {\n return this.getRouteData(route.firstChild);\n } else {\n return route.data;\n }\n }\n\n /**\n * Returns the data from the `NaturalDialogTriggerComponent` if one is open\n */\n private getDialogRouteData(route: ActivatedRouteSnapshot): Data | null {\n if (route.component === NaturalDialogTriggerComponent && route.outlet !== PRIMARY_OUTLET) {\n return route.data;\n }\n\n for (const child of route.children) {\n const data = this.getDialogRouteData(child);\n if (data) {\n return data;\n }\n }\n\n return null;\n }\n\n private toBasic(seo: NaturalSeo, routeData: Data): NaturalSeoBasic {\n if (typeof seo === 'function') {\n return seo(routeData);\n } else if ('resolveKey' in seo) {\n const data: ResolvedData | undefined = routeData[seo.resolveKey];\n if (!data) {\n throw new Error('Could not find resolved data for SEO service with key: ' + seo.resolveKey);\n }\n\n return {\n title: data.model?.fullName ?? data.model?.name ?? '',\n description: data.model?.description,\n robots: seo.robots,\n };\n }\n\n return seo;\n }\n}\n","import {APP_INITIALIZER, inject, Provider} from '@angular/core';\nimport {NATURAL_SEO_CONFIG, NaturalSeoConfig, NaturalSeoService} from './seo.service';\n\n/**\n * Configure and starts `NaturalSeoService`\n */\nexport function provideSeo(config: NaturalSeoConfig): Provider[] {\n return [\n {\n provide: NATURAL_SEO_CONFIG,\n useValue: config,\n },\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: (): (() => void) => {\n // injection required, but works without doing anything else\n inject(NaturalSeoService);\n\n return () => undefined;\n },\n },\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './directives/linkable-tab.directive';\nexport * from './pipes/capitalize.pipe';\nexport * from './pipes/ellipsis.pipe';\nexport * from './pipes/enum.pipe';\nexport * from './pipes/swiss-date.pipe';\nexport {NaturalTimeAgoPipe} from './pipes/time-ago.pipe';\nexport * from './services/memory-storage';\nexport {NaturalSrcDensityDirective} from './directives/src-density.directive';\nexport {\n NATURAL_SEO_CONFIG,\n NaturalSeoConfig,\n NaturalSeoService,\n NaturalSeo,\n NaturalSeoBasic,\n NaturalSeoResolve,\n NaturalSeoCallback,\n} from './services/seo.service';\nexport {provideSeo} from './services/seo.provider';\n","import {Component, Input} from '@angular/core';\nimport {Literal} from '../../types/types';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {RouterLink} from '@angular/router';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NgIf, NgFor} from '@angular/common';\n\n@Component({\n selector: 'natural-detail-header',\n templateUrl: './detail-header.component.html',\n styleUrls: ['./detail-header.component.scss'],\n standalone: true,\n imports: [NgIf, MatButtonModule, RouterLink, NgFor, MatIconModule, NaturalIconDirective],\n})\nexport class NaturalDetailHeaderComponent {\n /**\n * Base URL used to build links, defaults to '/'\n */\n @Input() public currentBaseUrl?: string;\n\n /**\n * Must be set to get proper links when used in panels\n */\n @Input() public isPanel = false;\n\n /**\n * If given will show icon before title\n */\n @Input() public icon = '';\n /**\n * Title shown if model has no name, or empty name.\n *\n * Typically should be the human name for the object type, eg: 'Product'\n */\n @Input() public label = '';\n\n /**\n * Label of the root of the breadcrumb, defaults to the value of `label`.\n *\n * Typically should be the plural form of the object type, eg: 'Products'\n */\n @Input() public rootLabel = '';\n\n /**\n * Title shown if model has no id.\n *\n * Typically should be similar to 'New product'.\n */\n @Input() public newLabel = '';\n @Input({required: true}) public model!: Literal;\n @Input() public breadcrumbs: Literal[] = [];\n @Input() public listRoute: any[] = [];\n @Input() public listFragment: string | undefined;\n @Input() public link?: (id: string) => any[];\n\n public getRootLink(): string[] {\n return [this.currentBaseUrl || '/'].concat(this.listRoute);\n }\n\n public getLink(id: string): any[] {\n if (this.link) {\n return this.getRootLink().concat(this.link(id));\n }\n\n return this.getRootLink().concat([id]);\n }\n}\n","<div class=\"breadcrumb\">\n <a\n *ngIf=\"rootLabel || label\"\n [routerLink]=\"isPanel ? [] : getRootLink()\"\n [fragment]=\"listFragment\"\n color=\"primary\"\n mat-button\n >{{ rootLabel || label }}</a\n >\n <ng-container *ngFor=\"let parent of breadcrumbs\">\n /\n <a [routerLink]=\"isPanel ? [] : getLink(parent.id)\" color=\"primary\" mat-button>\n {{ parent?.fullName || parent?.name }}</a\n >\n </ng-container>\n</div>\n\n<div class=\"body\">\n <div *ngIf=\"icon\" style=\"width: 30px\">\n <mat-icon [naturalIcon]=\"icon\"></mat-icon>\n </div>\n <div *ngIf=\"!model.id\" class=\"mat-headline-5 no-margin newLabel\">{{ newLabel }}</div>\n <div *ngIf=\"model.id\" class=\"mat-headline-5 no-margin label\">{{ model.name || model.fullName || label }}</div>\n <div>\n <ng-content></ng-content>\n </div>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './detail-header.component';\n","import {AfterViewInit, Component, Inject, OnDestroy, ViewChild} from '@angular/core';\nimport {MatSelectionList, MatListModule} from '@angular/material/list';\nimport {BehaviorSubject, merge, Observable, of} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {FormControl, FormGroup, ValidatorFn, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\nimport {map, startWith, takeUntil} from 'rxjs/operators';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from '../types';\nimport {MatOptionModule} from '@angular/material/core';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {NgIf, NgFor} from '@angular/common';\n\nexport type TypeSelectItem =\n | Scalar\n | {\n id: Scalar;\n name: Scalar;\n }\n | {\n value: Scalar;\n name: Scalar;\n };\n\nexport interface TypeSelectConfiguration {\n items: TypeSelectItem[] | Observable<TypeSelectItem[]>;\n multiple?: boolean;\n /**\n * If true (default) a selectbox allows to choose an operator. Otherwise, the selectbox is hidden and the operator will always be `is`.\n */\n operators?: boolean;\n}\n\n@Component({\n templateUrl: './type-select.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n NgIf,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n MatListModule,\n ],\n})\nexport class TypeSelectComponent\n extends NaturalAbstractController\n implements DropdownComponent, AfterViewInit, OnDestroy\n{\n public readonly renderedValue = new BehaviorSubject<string>('');\n @ViewChild(MatSelectionList, {static: false}) public list!: MatSelectionList;\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public items: TypeSelectItem[] = [];\n public readonly configuration: Required<TypeSelectConfiguration>;\n\n private readonly defaults: Required<TypeSelectConfiguration> = {\n items: [],\n multiple: true,\n operators: true,\n };\n\n public constructor(@Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeSelectConfiguration>) {\n super();\n this.configuration = {...this.defaults, ...data.configuration};\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n public ngAfterViewInit(): void {\n if (!this.isMultiple() && this.list) {\n (this.list.selectedOptions as any)._multiple = false;\n }\n }\n\n public getId(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item) {\n return (item as any).id || (item as any).value;\n }\n\n return item as Scalar;\n }\n\n public getDisplay(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item && item.name) {\n return item.name;\n }\n\n return item as Scalar;\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const values = this.valueCtrl.value;\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private isMultiple(): boolean {\n return this.configuration.multiple;\n }\n\n private getItemById(id: Scalar): TypeSelectItem | undefined {\n return this.items.find(item => this.getId(item) === id);\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (condition) {\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n }\n\n // Always reload value, even without condition because we need to load list of available items in all cases\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n private reloadValue(condition: FilterGroupConditionField | null): Observable<Scalar[]> {\n const wantedIds = condition?.in?.values ?? [];\n\n const items$ = Array.isArray(this.configuration.items)\n ? of(this.configuration.items)\n : this.configuration.items;\n\n return items$.pipe(\n takeUntil(this.ngUnsubscribe),\n map(items => {\n this.items = items;\n\n // Reload selection, according to possible values from configuration\n const possibleIds = this.items.map(item => this.getId(item));\n const wantedAndPossibleIds = wantedIds.filter(id => possibleIds.some(i => i === id));\n\n return wantedAndPossibleIds;\n }),\n );\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection =\n this.valueCtrl.value\n ?.map((id: Scalar) => {\n const item = this.getItemById(id);\n if (item) {\n return this.getDisplay(item);\n }\n })\n .join(', ') ?? null;\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (!this.configuration.operators) {\n return 'is';\n }\n\n if (condition.in && !condition.in.not) {\n return 'is';\n } else if (condition.in && condition.in.not) {\n return 'isnot';\n } else if (condition.null && condition.null.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n private operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: Scalar[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {in: {values: values}};\n case 'isnot':\n return {in: {values: values, not: true}};\n case 'any':\n return {null: {not: true}};\n case 'none':\n return {null: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + key);\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" *ngIf=\"configuration.operators\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-selection-list *ngIf=\"requireValueCtrl\" [formControl]=\"valueCtrl\">\n <mat-list-option *ngFor=\"let item of items\" [value]=\"getId(item)\" checkboxPosition=\"before\">\n {{ getDisplay(item) }}\n </mat-list-option>\n </mat-selection-list>\n</form>\n","import {Directive, Inject} from '@angular/core';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../search/types/dropdown-component';\nimport {FormControl, FormGroup, ValidatorFn, Validators} from '@angular/forms';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from './types';\nimport {startWith} from 'rxjs/operators';\n\n@Directive()\nexport abstract class AbstractAssociationSelectComponent<C> implements DropdownComponent {\n public readonly configuration: C;\n public readonly renderedValue = new BehaviorSubject<string>('');\n\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public constructor(@Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<C>) {\n this.configuration = data.configuration;\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n protected abstract reloadValue(condition: FilterGroupConditionField): Observable<unknown>;\n\n protected abstract renderValueWithoutOperator(): string;\n\n public abstract getCondition(): FilterGroupConditionField;\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n protected getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection = this.renderValueWithoutOperator();\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n protected conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (condition.have && !condition.have.not) {\n return 'is';\n } else if (condition.have && condition.have.not) {\n return 'isnot';\n } else if (condition.empty && condition.empty.not) {\n return 'any';\n } else if (condition.empty && !condition.empty.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n protected operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: string[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {have: {values: values}};\n case 'isnot':\n return {have: {values: values, not: true}};\n case 'any':\n return {empty: {not: true}};\n case 'none':\n return {empty: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + key);\n }\n }\n}\n","import {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, DoCheck, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormControlDirective,\n FormControlName,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\n\n/**\n * This will completely ignore internal formControl and instead use the one from the component\n * which comes from outside of this component. This basically allows us to **not** depend on\n * touched status propagation between outside and inside world, and thus get rid of our legacy\n * custom FormControl class (\"NaturalFormControl\").\n */\nclass ExternalFormControlMatcher<T, I> extends ErrorStateMatcher {\n public constructor(private readonly component: AbstractSelect<T, I>) {\n super();\n }\n\n public override isErrorState(): boolean {\n const externalCtrl = this.component.ngControl?.control || this.component.internalCtrl;\n if (externalCtrl) {\n return !!(externalCtrl.errors && (externalCtrl.touched || externalCtrl.dirty));\n }\n\n return false;\n }\n}\n\n@Directive()\nexport abstract class AbstractSelect<V, I>\n extends NaturalAbstractController\n implements OnInit, OnDestroy, ControlValueAccessor, DoCheck\n{\n @Input() public placeholder?: string;\n\n /**\n * If the field is required\n */\n @Input()\n public set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.applyRequired();\n }\n\n public get required(): boolean {\n return !!this._required;\n }\n\n private _required: boolean | undefined;\n\n /**\n * Add a suffix button that is a link to given destination\n */\n @Input() public navigateTo?: any[] | string | null;\n\n /**\n * If provided cause a new clear button to appear\n */\n @Input() public clearLabel?: string;\n\n /**\n * Whether to show the search icon\n */\n @Input() public showIcon = true;\n\n /**\n * Icon name\n */\n @Input() public icon = 'search';\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n @Input() public displayWith?: (item: V | null) => string;\n\n /**\n * Emit the selected value whenever it changes\n */\n @Output() public readonly selectionChange = new EventEmitter<V | null>();\n\n /**\n * Emits when internal input is blurred\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() public readonly blur = new EventEmitter<void>();\n\n /**\n * Contains internal representation for current selection AND searched text (for autocomplete)\n *\n * It is **not** necessarily `V | null`.\n *\n * - NaturalSelectComponent: `string | V | null`. We allow `string`\n * only when `optionRequired` is false, so most of the time it is `V | null`.\n * - NaturalSelectHierarchicComponent: `string | null`.\n * - NaturalSelectEnumComponent: `V | null`.\n *\n * In natural-select context, we use pristine and dirty to identify if the displayed value is search or committed model :\n * - Pristine status (unchanged value) means the model is displayed and propagated = the selection is committed\n * - Dirty status (changed value) means we are in search/autocomplete mode\n */\n public readonly internalCtrl = new FormControl<I | null>(null);\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onChange?: (item: V | null) => void;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onTouched?: () => void;\n\n public readonly matcher: ExternalFormControlMatcher<V, I>;\n\n public constructor(@Optional() @Self() public readonly ngControl: NgControl | null) {\n super();\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.matcher = new ExternalFormControlMatcher(this);\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.applyRequired();\n }\n }\n\n public writeValue(value: I | null): void {\n this.internalCtrl.setValue(value);\n }\n\n public ngOnInit(): void {\n const isReactive = this.ngControl instanceof FormControlDirective || this.ngControl instanceof FormControlName;\n if (isReactive && typeof this._required !== 'undefined') {\n console.warn('<natural-select-*> should not be used as ReactiveForm and with the [required] attribute');\n }\n }\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public registerOnChange(fn: (item: V | null) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public abstract getDisplayFn(): (item: V | null) => string;\n\n /**\n * Commit the model to null\n * Emit and event to update the model\n */\n public clear(): void {\n this.internalCtrl.setValue(null);\n this.propagateValue(null);\n }\n\n /**\n * If input is dirty (search running) restore to model value\n */\n public onBlur(): void {\n this.touch();\n this.blur.emit();\n }\n\n /**\n * Commit the model change\n */\n public propagateValue(value: V | null): void {\n // before selectionChange to allow formControl to update before change is effectively emitted\n if (this.onChange) {\n this.onChange(value);\n }\n\n this.selectionChange.emit(value);\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel && !!this.internalCtrl.value;\n }\n\n public touch(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n public hasRequiredError(): boolean {\n const control = this.ngControl?.control ? this.ngControl?.control : this.internalCtrl;\n\n return control.hasError('required');\n }\n\n /**\n * Apply Validators.required on the internal form, based on ngControl or [required] attribute, giving priority to attribute.\n */\n private applyRequired(): void {\n // Required status on parent validator\n const outerRequiredStatus = this?.ngControl?.control?.validator?.({} as AbstractControl)?.required;\n\n // Wanted required status, giving priority to template\n const newRequiredStatus = typeof this._required !== 'undefined' ? this._required : outerRequiredStatus;\n\n // Actual internal validation status\n const currentRequiredStatus = this.internalCtrl?.validator?.({} as AbstractControl)?.required;\n\n // If wanted status is similar to actual status, stop everything\n if (currentRequiredStatus === newRequiredStatus) {\n return;\n }\n\n // Apply only if changed\n if (newRequiredStatus) {\n this.internalCtrl.setValidators(Validators.required);\n } else {\n this.internalCtrl.clearValidators();\n }\n\n this.internalCtrl.updateValueAndValidity();\n }\n}\n","import {AfterViewInit, Component, ContentChild, Input, OnDestroy, OnInit, TemplateRef, ViewChild} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocompleteTrigger, MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {merge} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, finalize, map, takeUntil} from 'rxjs/operators';\nimport {PaginatedData} from '../../../classes/data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall, Literal} from '../../../types/types';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgTemplateOutlet, NgIf, AsyncPipe} from '@angular/common';\n\ntype V<TService> = string | ExtractTallOne<TService>;\n\n/**\n * Default usage:\n * ```html\n * <natural-select [service]=\"myServiceInstance\" [(model)]=\"myModel\" (modelChange)=myChangeFn($event)></natural-select>\n * ```\n *\n * Custom template usage :\n * ```html\n * <natural-select [service]=\"svc\" [(ngModel)]=\"model\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-select>\n * ```\n *\n * `[(ngModel)]` and `(ngModelChange)` are optional.\n *\n * Placeholder :\n * ```html\n * <natural-select placeholder=\"my placeholder\"></natural-select>\n * ```\n *\n * Search with like %xxx% on specified field `name` instead of custom filter on whole object\n * ```html\n * <natural-select searchField=\"name\"></natural-select>\n * ```\n *\n * Allows to input free string without selecting an option from autocomplete suggestions\n * ```html\n * <natural-select [optionRequired]=\"false\"></natural-select>\n * ```\n */\n@Component({\n selector: 'natural-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n standalone: true,\n imports: [\n MatAutocompleteModule,\n NgFor,\n MatOptionModule,\n NgTemplateOutlet,\n NgIf,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n ReactiveFormsModule,\n MatIconModule,\n NaturalIconDirective,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatTooltipModule,\n RouterLink,\n AsyncPipe,\n ],\n})\nexport class NaturalSelectComponent<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends AbstractSelect<V<TService>, V<TService>>\n implements OnInit, OnDestroy, ControlValueAccessor, AfterViewInit\n{\n @ViewChild(MatAutocompleteTrigger) public autoTrigger!: MatAutocompleteTrigger;\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<any>;\n\n /**\n * Service with watchAll function that accepts queryVariables.\n */\n @Input({required: true}) public service!: TService;\n\n /**\n * If false, allows to input free string without selecting an option from autocomplete suggestions\n */\n @Input() public optionRequired = true;\n\n /**\n * The field on which to search for, default to 'custom'.\n */\n @Input() public searchField: 'custom' | string = 'custom';\n\n /**\n * The operator with which to search for, default to 'search' if `searchField` is 'custom', else 'like'.\n */\n @Input() public searchOperator: 'search' | string | null = null;\n\n /**\n * Cache the committed value during search mode.\n * It's used to be restored in case we cancel the selection\n */\n private lastValidValue: V<TService> | null = null;\n\n /**\n * Additional filter for query\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter'] | null | undefined) {\n this.variablesManager.set('additional-filter', {filter: filter});\n }\n\n /**\n * Items returned by server to show in listing\n */\n public items: null | Observable<readonly any[]> = null;\n\n /**\n * Whether we are searching something\n */\n public loading = false;\n\n /**\n * Number of items not shown in result list\n * Shows a message after list if positive\n */\n public moreNbItems = 0;\n\n /**\n * Default page size\n */\n private pageSize = 10;\n\n /**\n * Init search options\n */\n private variablesManager = new NaturalQueryVariablesManager<QueryVariables>();\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public override set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public ngAfterViewInit(): void {\n this.internalCtrl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged(), debounceTime(300))\n .subscribe(val => this.search(val));\n }\n\n public onInternalFormChange(): void {\n // If we allow free string typing, then we propagate it as it is being typed\n if (!this.optionRequired) {\n this.propagateValue(this.internalCtrl.value);\n }\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.initService();\n }\n\n public override onBlur(): void {\n if (this.internalCtrl.dirty) {\n this.reset();\n }\n super.onBlur();\n }\n\n /**\n * Reset form to it's initial value\n * Discard searched text (in autocomplete use case)\n * Doest not commit the change to the model (no change event is emitted)\n */\n public reset(): void {\n this.internalCtrl.setValue(this.lastValidValue);\n this.internalCtrl.markAsPristine();\n }\n\n /**\n * Enter semantic means we want to validate something.\n * If we hit ENTER while typing a text, the stroke is ignored because the value is invalid (it's accepted in free text mode)\n * If we hit ENTER while the input field is empty, we validate the unselection (empty is a valid value)\n */\n public onKeyEnter(): void {\n if (!this.internalCtrl.value) {\n this.clear();\n this.autoTrigger.closePanel();\n }\n }\n\n public override writeValue(value: V<TService> | null): void {\n super.writeValue(value);\n this.lastValidValue = this.internalCtrl.value;\n }\n\n private initService(): void {\n // Assert given service has a watchAll function\n if (typeof this.service.watchAll !== 'function') {\n throw new TypeError('Provided service does not contain watchAll function');\n }\n\n const defaultPagination = {\n pagination: {\n pageIndex: 0,\n pageSize: this.pageSize,\n },\n };\n\n const variables = merge(defaultPagination, this.getSearchFilter(null));\n this.variablesManager.set('variables', variables);\n }\n\n public startSearch(): void {\n // Start search only once\n if (this.items) {\n return;\n }\n\n // Init query, and when query results arrive, finish loading, and count items\n this.items = this.service.watchAll(this.variablesManager).pipe(\n takeUntil(this.ngUnsubscribe),\n finalize(() => (this.loading = false)),\n map(data => {\n this.loading = false;\n const nbTotal = data.length;\n const nbListed = Math.min(data.length, this.pageSize);\n this.moreNbItems = nbTotal - nbListed;\n\n return data.items;\n }),\n );\n\n this.loading = true;\n this.items.subscribe();\n }\n\n /**\n * Commit the model change\n * Set internal form as pristine to reflect that the visible value match the model\n */\n public override propagateValue(value: V<TService> | null): void {\n this.internalCtrl.markAsPristine();\n this.lastValidValue = this.internalCtrl.value;\n this.loading = false;\n\n // If we cleared value via button, but we allow free string typing, then force to empty string\n if (!this.optionRequired && value === null) {\n value = '';\n }\n\n super.propagateValue(value);\n }\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: V<TService> | null) => string {\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return (item: any) => {\n if (!item) {\n return '';\n }\n\n if (typeof item === 'string') {\n return item;\n }\n\n return item.fullName || item.name || item.iban || item[this.searchField] || item.id;\n };\n }\n\n public override clear(): void {\n this.search(null);\n super.clear();\n }\n\n public search(term: V<TService> | null): void {\n if (typeof term === 'string' || term === null) {\n if (term) {\n this.loading = !!this.items;\n }\n\n this.variablesManager.merge('variables', this.getSearchFilter(term));\n }\n }\n\n public override showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel && !!this.internalCtrl.value;\n }\n\n private getSearchFilter(term: string | null): QueryVariables {\n const searchOperator = this.searchOperator ?? (this.searchField === 'custom' ? 'search' : 'like');\n if (term && searchOperator === 'like') {\n term = '%' + term + '%';\n }\n\n return {\n filter: {\n groups: [\n {\n conditions: [\n {\n [this.searchField]: term\n ? {\n [searchOperator]: {value: term},\n }\n : null,\n },\n ],\n },\n ],\n },\n };\n }\n\n public getVariablesForDebug(): Readonly<QueryVariables> | undefined {\n return this.variablesManager.variables.value;\n }\n}\n","<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n <mat-option *ngFor=\"let item of items | async\" [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n ></ng-template>\n </mat-option>\n <div *ngIf=\"moreNbItems > 0\" class=\"mat-caption\" i18n style=\"padding: 5px 10px\"\n >{{ moreNbItems }} élément(s) supplémentaire(s)</div\n >\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n <!-- Meta data -->\n <mat-icon *ngIf=\"!loading && showIcon\" [naturalIcon]=\"icon\" matIconPrefix></mat-icon>\n\n <div class=\"loading-wrapper\" matIconPrefix *ngIf=\"loading\">\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\"></mat-progress-spinner>\n </div>\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matIconSuffix>\n <button\n *ngIf=\"internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel\"\n (click)=\"clear()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Désélectionner\"\n >\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.dirty && internalCtrl.enabled && optionRequired\"\n (click)=\"reset()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Annuler la recherche\"\n >\n <mat-icon naturalIcon=\"undo\"></mat-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.pristine && internalCtrl.value && navigateTo\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\"></mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error>\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n<div *ngIf=\"showClearButton()\" class=\"external-buttons\">\n <button (click)=\"clear()\" *ngIf=\"showClearButton()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n</div>\n","import {Component} from '@angular/core';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {ExtractTone, ExtractVall} from '../../../types/types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {NaturalSelectComponent} from '../../select/select/select.component';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport interface TypeSelectNaturalConfiguration<\n TService extends NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>,\n> {\n service: TService;\n placeholder: string;\n filter?: ExtractVall<TService>['filter'];\n}\n\n@Component({\n templateUrl: './type-natural-select.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n NgIf,\n NaturalSelectComponent,\n ],\n})\nexport class TypeNaturalSelectComponent<\n TService extends NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>,\n> extends AbstractAssociationSelectComponent<TypeSelectNaturalConfiguration<TService>> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const id = this.valueCtrl.value?.id;\n const values = id ? [id] : [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n protected reloadValue(condition: FilterGroupConditionField): Observable<ExtractTone<TService>> {\n if (!condition.have) {\n return EMPTY;\n }\n\n return this.configuration.service.getOne(condition.have.values[0]);\n }\n\n protected renderValueWithoutOperator(): string {\n const selected: {id: string; name?: string; fullName?: string} | null = this.valueCtrl.value;\n const selectedName = selected?.fullName || selected?.name || '';\n\n return selectedName;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <natural-select\n style=\"display: inline\"\n *ngIf=\"configuration && requireValueCtrl\"\n [formControl]=\"valueCtrl\"\n [placeholder]=\"configuration.placeholder\"\n [service]=\"configuration.service\"\n [filter]=\"configuration.filter\"\n ></natural-select>\n</form>\n","import {Component, Inject} from '@angular/core';\nimport {FormControl, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {NgIf} from '@angular/common';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport class InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl | null): boolean {\n return control && control.invalid && control.value;\n }\n}\n\n@Component({\n templateUrl: './type-text.component.html',\n styleUrls: ['./type-text.component.scss'],\n standalone: true,\n imports: [MatFormFieldModule, MatInputModule, FormsModule, ReactiveFormsModule, NgIf],\n})\nexport class TypeTextComponent implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly formCtrl = new FormControl('', {nonNullable: true});\n public readonly matcher = new InvalidWithValueStateMatcher();\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<never>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.formCtrl.valueChanges.subscribe(value => {\n this.renderedValue.next(value === null ? '' : this.formCtrl.value + '');\n });\n\n this.formCtrl.setValidators([Validators.required]);\n\n if (data.condition && data.condition.like) {\n this.formCtrl.setValue('' + data.condition.like.value);\n }\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.formCtrl.value) {\n return {};\n }\n\n return {like: {value: this.formCtrl.value}};\n }\n\n public isValid(): boolean {\n return this.formCtrl.valid;\n }\n\n public isDirty(): boolean {\n return this.formCtrl.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n}\n","<mat-form-field>\n <mat-label i18n>Valeur</mat-label>\n <input\n (keydown.enter)=\"close()\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"formCtrl\"\n [required]=\"true\"\n matInput\n type=\"text\"\n />\n <mat-error *ngIf=\"formCtrl.hasError('required')\">*</mat-error>\n</mat-form-field>\n","import {Component, Inject} from '@angular/core';\nimport {FormControl, FormGroup, ValidatorFn, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {possibleComparableOperators, PossibleComparableOpertorKeys} from '../types';\nimport {InvalidWithValueStateMatcher} from '../type-text/type-text.component';\nimport {decimal} from '../../../classes/validators';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport interface TypeNumberConfiguration {\n min?: number | null;\n max?: number | null;\n step?: number | null;\n}\n\n@Component({\n templateUrl: './type-number.component.html',\n styleUrls: ['./type-number.component.scss'],\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n MatInputModule,\n NgIf,\n ],\n})\nexport class TypeNumberComponent implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeNumberConfiguration>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOpertorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n public readonly operators = possibleComparableOperators;\n\n private readonly defaults: Required<TypeNumberConfiguration> = {\n min: null,\n max: null,\n step: null,\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeNumberConfiguration>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const condition: FilterGroupConditionField = {};\n condition[this.operatorCtrl.value] = {\n value: this.valueCtrl.value,\n };\n\n return condition;\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(Validators.min(this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(Validators.max(this.configuration.max));\n }\n\n if (this.configuration.step) {\n const decimals = ('' + this.configuration.step).match(/\\.(\\d+)$/)?.[1] ?? '';\n const decimalCount = decimals.length;\n validators.push(decimal(decimalCount));\n }\n\n this.valueCtrl.setValidators(validators);\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n for (const operator of this.operators) {\n const reloadedCondition = condition[operator.key];\n if (reloadedCondition) {\n this.operatorCtrl.setValue(operator.key);\n this.valueCtrl.setValue(reloadedCondition.value);\n }\n }\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (this.valueCtrl.value === null || !operator) {\n return '';\n } else {\n return operator.label + ' ' + this.valueCtrl.value;\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 4em; margin-right: 1em\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Valeur</mat-label>\n <input\n (keydown.enter)=\"close()\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"valueCtrl\"\n [attr.max]=\"configuration.max\"\n [attr.min]=\"configuration.min\"\n [required]=\"true\"\n [step]=\"configuration.step\"\n matInput\n type=\"number\"\n />\n <mat-error *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</mat-error>\n </mat-form-field>\n</form>\n","import {HierarchicModelNode} from './model-node';\n\nexport class HierarchicFlatNode {\n public loading = false;\n\n public constructor(\n public readonly node: HierarchicModelNode,\n public readonly name: string,\n public readonly level: number = 0,\n public expandable: boolean = false,\n public readonly selectable: boolean = true,\n public deselectable: boolean = true,\n ) {}\n}\n","import {BehaviorSubject} from 'rxjs';\nimport {NaturalHierarchicConfiguration} from './hierarchic-configuration';\nimport {NameOrFullName} from '../../../types/types';\n\nexport type HierarchicModel = {__typename: string} & NameOrFullName;\n\nexport class HierarchicModelNode {\n public childrenChange: BehaviorSubject<HierarchicModelNode[]> = new BehaviorSubject<HierarchicModelNode[]>([]);\n\n public constructor(\n public readonly model: HierarchicModel,\n public readonly config: NaturalHierarchicConfiguration,\n ) {}\n\n public get children(): HierarchicModelNode[] {\n return this.childrenChange.value;\n }\n}\n","import {Injectable, Injector} from '@angular/core';\nimport {intersection} from 'lodash-es';\nimport {BehaviorSubject, first, forkJoin, Observable} from 'rxjs';\n\nimport {finalize, map} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {HierarchicFlatNode} from '../classes/flat-node';\nimport {\n NaturalHierarchicConfiguration,\n NaturalHierarchicServiceConfiguration,\n} from '../classes/hierarchic-configuration';\nimport {\n HierarchicFilterConfiguration,\n HierarchicFiltersConfiguration,\n} from '../classes/hierarchic-filters-configuration';\nimport {HierarchicModel, HierarchicModelNode} from '../classes/model-node';\nimport {Literal} from '../../../types/types';\nimport {FilterGroupCondition} from '../../search/classes/graphql-doctrine.types';\n\nexport interface OrganizedModelSelection {\n [key: string]: any[];\n}\n\ninterface ContextualizedConfig {\n configuration: NaturalHierarchicServiceConfiguration;\n variablesManager: NaturalQueryVariablesManager;\n}\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorService {\n /**\n * Stores the global result of the tree\n * This observable contains Node.\n * When it's updated, the TreeController and TreeFlattener process the new array to generate the flat tree.\n */\n public readonly dataChange: BehaviorSubject<HierarchicModelNode[]> = new BehaviorSubject<HierarchicModelNode[]>([]);\n\n /**\n * Configuration for relations and selection constraints\n *\n * The list should be sorted in the order of the hierarchic (list first parent rules, then child rules)\n */\n private configuration: NaturalHierarchicConfiguration[] = [];\n\n public constructor(private readonly injector: Injector) {}\n\n /**\n * Init component by saving the complete configuration, and then retrieving root elements.\n * Updates **another** observable (this.dataChange) when data is retrieved.\n */\n public init(\n config: NaturalHierarchicConfiguration[],\n contextFilter: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n ): Observable<unknown> {\n this.validateConfiguration(config);\n this.configuration = this.injectServicesInConfiguration(config);\n return this.getList(null, contextFilter, searchVariables).pipe(map(data => this.dataChange.next(data)));\n }\n\n /**\n * Get list of children, considering given FlatNode id as a parent.\n * Mark loading status individually on nodes.\n */\n public loadChildren(\n flatNode: HierarchicFlatNode,\n contextFilter: HierarchicFiltersConfiguration | null = null,\n ): void {\n // Dont refetch children. Improve performances\n // Prevents interferences between HierarchicModelNode structure and angular components navigation.\n // Prevents a bug where grand children were lost if closing root\n if (flatNode.node.children.length) {\n return;\n }\n\n flatNode.loading = true;\n this.getList(flatNode, contextFilter)\n .pipe(finalize(() => (flatNode.loading = false)))\n .subscribe(items => {\n flatNode.node.childrenChange.next(items);\n this.dataChange.next(this.dataChange.value);\n });\n }\n\n public search(searchVariables: QueryVariables, contextFilter: HierarchicFiltersConfiguration | null = null): void {\n this.getList(null, contextFilter, searchVariables).subscribe(items => {\n this.dataChange.next(items);\n });\n }\n\n /**\n * Retrieve elements from the server\n * Get root elements if node is null, or child elements if node is given\n */\n private getList(\n node: HierarchicFlatNode | null = null,\n contextFilters: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n ): Observable<HierarchicModelNode[]> {\n const configurations = this.getContextualizedConfigs(node, contextFilters, searchVariables);\n const observables = configurations.map(c => c.configuration.injectedService.getAll(c.variablesManager));\n\n // Fire queries, and merge results, transforming apollo items into Node Object.\n return forkJoin(observables).pipe(\n map(results => {\n const listing: HierarchicModelNode[] = [];\n\n // For each result of an observable\n for (let i = 0; i < results.length; i++) {\n // For each item of the result, convert into Node object\n for (const item of results[i].items) {\n listing.push(this.getOrCreateModelNode(item, configurations[i].configuration));\n }\n }\n\n return listing;\n }),\n );\n }\n\n public countItems(node: HierarchicFlatNode, contextFilters: HierarchicFiltersConfiguration | null = null): void {\n const configurations = this.getContextualizedConfigs(node, contextFilters, null);\n const observables = configurations.map(c =>\n c.configuration.injectedService.count(c.variablesManager).pipe(first()),\n );\n\n forkJoin(observables).subscribe(results => {\n const totalItems = results.reduce((total, length) => total + length, 0);\n node.expandable = totalItems > 0;\n });\n }\n\n private getContextualizedConfigs(\n node: HierarchicFlatNode | null = null,\n contextFilters: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n ): ContextualizedConfig[] {\n const configsAndServices: ContextualizedConfig[] = [];\n\n // Considering the whole configuration may cause queries with no/wrong results we have imperatively to avoid !\n // e.g there are cross dependencies between equipments and taxonomies filters. Both have \"parents\" and \"taxonomies\" filters...\n // When clicking on a equipment, the configuration of taxonomies with match \"parents\" filter, but use the id of the equipment\n // To fix this, we should only consider configuration after the one given by the node passed as argument.\n // That would mean : no child can affect parent.\n // That would mean : sorting in the configuration have semantic/hierarchy implications\n const configs = node ? this.getNextConfigs(node.node.config) : this.configuration;\n\n const pagination = {pageIndex: 0, pageSize: 999};\n\n for (const config of configs) {\n const item: ContextualizedConfig = {} as ContextualizedConfig;\n const contextFilter = this.getFilterByService(config, contextFilters);\n const filter = this.getServiceFilter(node, config, contextFilter, !!searchVariables);\n\n if (!filter || !config.injectedService) {\n continue;\n }\n\n const variablesManager = new NaturalQueryVariablesManager();\n\n variablesManager.set('variables', {filter: filter, pagination: pagination});\n variablesManager.set('config-filter', {filter: config.filter});\n\n if (searchVariables) {\n variablesManager.set('natural-search', searchVariables);\n }\n\n // Cast NaturalHierarchicServiceConfiguration because the undefined\n // injectedServices are filtered earlier and we can validate value\n item.configuration = config as NaturalHierarchicServiceConfiguration;\n item.variablesManager = variablesManager;\n configsAndServices.push(item);\n }\n\n return configsAndServices;\n }\n\n /**\n * Return models matching given FlatNodes\n * Returns a Literal of models grouped by their configuration attribute \"selectableAtKey\"\n */\n public toOrganizedSelection(nodes: HierarchicModelNode[]): OrganizedModelSelection {\n const selection = this.configuration.reduce((group, config) => {\n if (config.selectableAtKey) {\n group[config.selectableAtKey] = [];\n }\n return group;\n }, {} as Literal);\n\n for (const node of nodes) {\n if (node.config.selectableAtKey) {\n selection[node.config.selectableAtKey].push(node.model);\n }\n }\n\n return selection;\n }\n\n /**\n * Transforms an OrganizedModelSelection into a list of ModelNodes\n */\n public fromOrganizedSelection(organizedModelSelection: OrganizedModelSelection): HierarchicModelNode[] {\n if (!organizedModelSelection) {\n return [];\n }\n\n const result: HierarchicModelNode[] = [];\n for (const selectableAtKey of Object.keys(organizedModelSelection)) {\n const config = this.getConfigurationBySelectableKey(selectableAtKey);\n if (config) {\n for (const model of organizedModelSelection[selectableAtKey]) {\n result.push(new HierarchicModelNode(model, config));\n }\n }\n }\n return result;\n }\n\n private injectServicesInConfiguration(\n configurations: NaturalHierarchicConfiguration[],\n ): NaturalHierarchicConfiguration[] {\n for (const config of configurations) {\n if (!config.injectedService) {\n config.injectedService = this.injector.get(config.service);\n }\n }\n\n return configurations;\n }\n\n /**\n * Checks that each configuration.selectableAtKey attribute is unique\n */\n private validateConfiguration(configurations: NaturalHierarchicConfiguration[]): void {\n const selectableAtKeyAttributes: string[] = [];\n for (const config of configurations) {\n if (config.selectableAtKey) {\n const keyIndex = selectableAtKeyAttributes.indexOf(config.selectableAtKey);\n\n if (keyIndex === -1 && config.selectableAtKey) {\n selectableAtKeyAttributes.push(config.selectableAtKey);\n }\n\n // TODO : remove ?\n // This behavior maybe dangerous in case we re-open hierarchical selector with the last returned config having non-unique\n // keys\n if (keyIndex < -1) {\n console.warn('Invalid hierarchic configuration : selectableAtKey attribute should be unique');\n }\n }\n }\n }\n\n /**\n * Return configurations setup in the list after the given one\n */\n private getNextConfigs(config: NaturalHierarchicConfiguration): NaturalHierarchicConfiguration[] {\n const configIndex = this.configuration.findIndex(c => c === config);\n return this.configuration.slice(configIndex);\n }\n\n /**\n * Builds queryVariables filter for children query\n */\n private getServiceFilter(\n flatNode: HierarchicFlatNode | null,\n config: NaturalHierarchicConfiguration,\n contextFilter: HierarchicFilterConfiguration['filter'] | null = null,\n allDeeps = false,\n ): HierarchicFilterConfiguration['filter'] | null {\n const fieldCondition: FilterGroupCondition = {};\n\n // if no parent, filter empty elements\n if (!flatNode) {\n if (!config.parentsRelationNames) {\n return contextFilter ? contextFilter : {};\n }\n\n if (!allDeeps) {\n config.parentsRelationNames.forEach(f => {\n fieldCondition[f] = {empty: {}};\n });\n }\n } else {\n if (!flatNode.node.config.childrenRelationNames || !config.parentsRelationNames) {\n return null;\n }\n\n const matchingFilters = intersection(\n flatNode.node.config.childrenRelationNames,\n config.parentsRelationNames,\n );\n if (!matchingFilters.length) {\n return null;\n }\n fieldCondition[matchingFilters[0]] = {have: {values: [flatNode.node.model.id]}};\n }\n\n const filters = {groups: [{conditions: [fieldCondition]}]};\n\n // todo : is it right ? shouldn't it be managed with QueryVariablesManager's channels ? ?\n if (contextFilter) {\n filters.groups.push(...contextFilter.groups);\n }\n\n return filters;\n }\n\n /**\n * Return a context filter applicable to the service for given config\n *\n * @param config Applicable config\n * @param contextFilters List of context filters\n */\n private getFilterByService(\n config: NaturalHierarchicConfiguration,\n contextFilters: HierarchicFilterConfiguration[] | null,\n ): HierarchicFilterConfiguration['filter'] | null {\n if (!contextFilters || !config) {\n return null;\n }\n\n const filter = contextFilters.find(f => f.service === config.service);\n return filter ? filter.filter : null;\n }\n\n /**\n * Search in configurations.selectableAtKey attribute to find given key and return the configuration\n */\n private getConfigurationBySelectableKey(\n key: NaturalHierarchicConfiguration['selectableAtKey'],\n ): NaturalHierarchicConfiguration | null {\n if (!this.configuration) {\n return null;\n }\n\n return this.configuration.find(conf => conf.selectableAtKey === key) || null;\n }\n\n private getOrCreateModelNode(\n item: HierarchicModel,\n configuration: NaturalHierarchicConfiguration,\n ): HierarchicModelNode {\n const node = this.dataChange.value.find(n => n.model.id === item.id && n.model.__typename === item.__typename);\n return node || new HierarchicModelNode(item, configuration);\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {Facet, NaturalSearchFacets} from '../types/facet';\nimport {MatListModule} from '@angular/material/list';\nimport {NgIf, NgFor} from '@angular/common';\n\n/**\n * Configuration for facet selection\n */\nexport interface FacetSelectorConfiguration {\n facets: NaturalSearchFacets;\n}\n\n@Component({\n templateUrl: './facet-selector.component.html',\n styleUrls: ['./facet-selector.component.scss'],\n standalone: true,\n imports: [NgIf, MatListModule, NgFor],\n})\nexport class FacetSelectorComponent implements DropdownComponent {\n // Never has a real value\n public renderedValue = new BehaviorSubject<string>('');\n public facets: NaturalSearchFacets;\n public selection: Facet | null = null;\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) public data: NaturalDropdownData<FacetSelectorConfiguration>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.facets = data.configuration.facets;\n }\n\n /**\n * Get value, including rich object types\n */\n public getCondition(): FilterGroupConditionField {\n return {};\n }\n\n /**\n * Allow to close the dropdown with a valid value\n */\n public close(): void {\n if (this.selection) {\n this.dropdownRef.close({\n condition: {},\n facet: this.selection,\n });\n }\n }\n\n public isValid(): boolean {\n return !!this.selection;\n }\n\n public isDirty(): boolean {\n return true;\n }\n}\n","<div class=\"dropdown-title mat-body-2\" *ngIf=\"data.title\">{{ data.title }}</div>\n<mat-nav-list>\n <mat-list-item (click)=\"selection = facet; close()\" *ngFor=\"let facet of facets\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n</mat-nav-list>\n","import {\n Component,\n ComponentRef,\n createComponent,\n createEnvironmentInjector,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n StaticProvider,\n ViewChild,\n} from '@angular/core';\nimport {FormControl, ValidationErrors, ValidatorFn, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ErrorStateMatcher, MatRipple, MatRippleModule} from '@angular/material/core';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {getFacetFromSelection} from '../classes/utils';\nimport {NaturalDropdownRef} from '../dropdown-container/dropdown-ref';\nimport {\n NATURAL_DROPDOWN_DATA,\n NaturalDropdownData,\n NaturalDropdownService,\n} from '../dropdown-container/dropdown.service';\nimport {FacetSelectorComponent, FacetSelectorConfiguration} from '../facet-selector/facet-selector.component';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {DropdownResult, NaturalSearchSelection} from '../types/values';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {NgIf} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\n// Required to check invalid fields when initializing natural-search\nclass AlwaysErrorStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null): boolean {\n return !!control && control.invalid;\n }\n}\n\nfunction isComponentValid(component: DropdownComponent): ValidatorFn {\n return (): ValidationErrors | null => {\n if (!component.isValid()) {\n return {component: true};\n }\n\n return null;\n };\n}\n\n@Component({\n selector: 'natural-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatRippleModule,\n NgIf,\n MatInputModule,\n FormsModule,\n ReactiveFormsModule,\n MatIconModule,\n NaturalIconDirective,\n MatButtonModule,\n ],\n})\nexport class NaturalInputComponent implements OnInit, OnChanges, OnDestroy {\n /**\n * Controls the ripple effect, used when opening a dropdown\n */\n @ViewChild(MatRipple, {static: true}) public ripple!: MatRipple;\n\n /**\n * Native element ref for <input> related to this <natural-input> component\n */\n @ViewChild('input', {static: true}) public input!: ElementRef<HTMLInputElement>;\n\n /**\n * Label for this field\n */\n @Input() public placeholder?: string;\n\n /**\n * Name of the field on which do a global search (without facet)\n */\n @Input() public searchFieldName = 'search';\n\n /**\n * Selected setted for this component\n */\n @Input() public selection: NaturalSearchSelection | null = null;\n\n /**\n * Available facets, allows the user to pick one, than generated then a selection\n */\n @Input({required: true}) public facets!: NaturalSearchFacets;\n\n /**\n * Text display in the dropdown to select the facet\n */\n @Input() public dropdownTitle = '';\n\n /**\n * Emits when user a added/updated/deleted a search (from global context or from facet)\n */\n @Output() public readonly selectionChange = new EventEmitter<NaturalSearchSelection>();\n\n /**\n * Emits when user removes the search by pressing the cross icon\n */\n @Output() public readonly cleared = new EventEmitter<NaturalInputComponent>();\n\n /**\n * Selected facet from the list of available facets\n */\n public facet: Facet | null = null;\n\n /**\n * Controller for the input field\n */\n public readonly formCtrl = new FormControl<string | null>(null);\n\n /**\n * Customer error matcher that should validate on each change (including initialisation)\n */\n public readonly errorMatcher = new AlwaysErrorStateMatcher();\n\n /**\n * Reference of the opened dropdown container\n */\n private dropdownRef: NaturalDropdownRef | null = null;\n\n /**\n * Reference of the component inside the dropdown container\n */\n private dropdownComponentRef: ComponentRef<DropdownComponent> | null = null;\n\n /**\n * Minimum input length (number of chars)\n * See length attribute\n */\n private readonly minLength = 5;\n\n /**\n * Size of the input (number of chars)\n * Match the input.size attribute\n */\n public length = this.minLength;\n\n /**\n * Flag, that, if marked as yes, prevents the opening of the dropdown\n * Is used to prevent dropdown opening when natural-search takes the focus from parent context (like on modal opening)\n */\n private neutralizeDropdownOpening = false;\n\n /**\n * Custom management for taking the focus from parent context\n * When focusing manually on the <input>, a dropdown is opened\n * But when the focus is given from angular in a parent context (like a dialog) the dropdown would open and we don't want it.\n */\n @HostListener('focus')\n public focus(): void {\n this.neutralizeDropdownOpening = true;\n this.input.nativeElement.focus();\n this.neutralizeDropdownOpening = false;\n }\n\n public constructor(\n private readonly element: ElementRef<HTMLElement>,\n private readonly dropdownService: NaturalDropdownService,\n private readonly injector: EnvironmentInjector,\n ) {}\n\n public ngOnInit(): void {\n this.input.nativeElement.addEventListener('focus', () => {\n this.openDropdown();\n });\n\n this.input.nativeElement.addEventListener('keyup', () => {\n if (!this.dropdownRef) {\n return;\n }\n\n if (this.formCtrl.value !== '') {\n this.dropdownRef.close();\n }\n });\n\n if (!this.placeholder) {\n this.placeholder = $localize`Recherche`;\n }\n\n const placeholderSize = (this.facet ? this.facet.display.length : this.placeholder.length) * 0.66;\n this.length = Math.max(this.minLength, Math.ceil(placeholderSize));\n }\n\n public ngOnDestroy(): void {\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n }\n\n public ngOnChanges(): void {\n if (!this.facets && this.selection) {\n setTimeout(() => this.clear());\n } else if (this.facets && this.selection) {\n this.facet = getFacetFromSelection(this.facets, this.selection);\n\n if (this.isDropdown()) {\n const dropdownComponent = this.createComponent(this.facet as DropdownFacet<FacetSelectorConfiguration>);\n this.formCtrl.setValidators([isComponentValid(dropdownComponent)]);\n dropdownComponent.renderedValue.subscribe(value => {\n this.formCtrl.setValue(value);\n });\n } else if (this.isFlag()) {\n this.formCtrl.setValue('');\n } else if (\n this.selection &&\n this.selection.field === this.searchFieldName &&\n this.selection.condition.like\n ) {\n // global search mode\n this.formCtrl.setValue('' + this.selection.condition.like.value);\n } else {\n // If component is invalid (no facet and not a global search), clear from result and destroy component\n setTimeout(() => this.clear());\n }\n }\n }\n\n public search(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.formCtrl.value) {\n return;\n }\n\n if (this.isDropdown()) {\n return;\n }\n\n if (this.formCtrl.valid && this.formCtrl.dirty) {\n this.selectionChange.emit(this.getSelection({like: {value: this.formCtrl.value}}));\n }\n }\n\n public clear(): void {\n this.facet = null;\n this.selection = null;\n this.formCtrl.setValue(null);\n this.cleared.emit(this);\n }\n\n public openDropdown(): void {\n if (this.dropdownRef || this.neutralizeDropdownOpening) {\n // Prevent to open multiple dropdowns.\n // Happens as we open on \"focus\", and alt+tab re-activate focus on an element that already had\n // focus when leaving window with another alt+tab\n return;\n }\n\n this.launchRipple();\n\n // If there is no facet and no string typed, show panel to select the facet\n if (!this.facet && !this.formCtrl.value) {\n this.openFacetSelectorDropdown(this.dropdownTitle);\n } else {\n // If a facet is selected, open specific component dropdown\n this.openTypeDropdown();\n }\n }\n\n public isDropdown(): boolean {\n return !!(this.facet && (this.facet as DropdownFacet<unknown>).component);\n }\n\n public isFlag(): boolean {\n return !!(this.facet && (this.facet as FlagFacet<FilterGroupConditionField>).condition);\n }\n\n private createComponent(facet: DropdownFacet<unknown>): DropdownComponent {\n // Always destroy and recreate component\n // Todo : test if facet has changed, if not re-use the component\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n\n const condition = this.selection ? (this.selection.condition as FilterGroupConditionField) : null;\n const data: NaturalDropdownData = {\n condition: condition,\n configuration: facet.configuration,\n };\n\n const injector = createEnvironmentInjector(this.createProviders(data), this.injector);\n this.dropdownComponentRef = createComponent(facet.component, {\n environmentInjector: injector,\n });\n\n return this.dropdownComponentRef.instance;\n }\n\n private createProviders(data: NaturalDropdownData): StaticProvider[] {\n // Customize injector to allow data and dropdown reference injection in component\n return [\n {\n provide: NaturalDropdownRef,\n useValue: null,\n },\n {\n provide: NATURAL_DROPDOWN_DATA,\n useValue: data,\n },\n ];\n }\n\n private launchRipple(): void {\n const rippleRef = this.ripple.launch({\n persistent: true,\n centered: true,\n });\n\n rippleRef.fadeOut();\n }\n\n private openFacetSelectorDropdown(title: string | undefined): void {\n if (!this.facets || (this.facets && !this.facets.length)) {\n return;\n }\n\n const data: NaturalDropdownData<FacetSelectorConfiguration> = {\n condition: {},\n title: title,\n configuration: {\n facets: this.facets,\n },\n };\n\n const injectorTokens = this.createProviders(data);\n this.dropdownRef = this.dropdownService.open(FacetSelectorComponent, this.element, injectorTokens, false);\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n if (result.facet) {\n this.setFacet(result.facet);\n } else if (result.condition) {\n this.setValue(result);\n }\n }\n });\n }\n\n private openTypeDropdown(): void {\n if (!this.isDropdown()) {\n return;\n }\n\n const dropdownFacet = this.facet as DropdownFacet<unknown>;\n\n const data: NaturalDropdownData = {\n condition: this.selection ? this.selection.condition : null,\n configuration: dropdownFacet.configuration,\n };\n\n const injectorTokens = this.createProviders(data);\n const component = dropdownFacet.component;\n this.dropdownRef = this.dropdownService.open(\n component,\n this.element,\n injectorTokens,\n dropdownFacet.showValidateButton !== undefined ? dropdownFacet.showValidateButton : true,\n );\n\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n this.setValue(result);\n }\n });\n }\n\n private setFacet(facet: Facet): void {\n this.facet = facet;\n\n if (this.isDropdown()) {\n this.openTypeDropdown();\n } else if (this.isFlag()) {\n this.setValue({\n condition: (facet as FlagFacet<FilterGroupConditionField>).condition,\n });\n } else {\n this.input.nativeElement.focus();\n }\n }\n\n private setValue(result: DropdownResult): void {\n if (this.facet) {\n this.selectionChange.emit(this.getSelection(result.condition));\n }\n }\n\n private getSelection(condition: NaturalSearchSelection['condition']): NaturalSearchSelection {\n const selection: NaturalSearchSelection = {\n field: this.facet ? this.facet.field : this.searchFieldName,\n condition: condition,\n };\n\n if (this.facet && this.facet.name) {\n selection.name = this.facet.name;\n }\n\n return selection;\n }\n}\n","<!-- click condition should match to allow click action only when no other button is visible -->\n<mat-form-field #field matRipple (click)=\"!selection && !(facet && !selection) ? openDropdown() : null\">\n <mat-label *ngIf=\"facet\">{{ facet.display }}</mat-label>\n <mat-label *ngIf=\"!facet\">{{ placeholder }}</mat-label>\n\n <input\n #input\n (blur)=\"search($event)\"\n (keydown.enter)=\"search($event)\"\n [attr.size]=\"length\"\n [errorStateMatcher]=\"errorMatcher\"\n [formControl]=\"formCtrl\"\n [readonly]=\"(isDropdown() && !!selection) || isFlag()\"\n autocomplete=\"off\"\n matInput\n type=\"text\"\n />\n\n <mat-icon *ngIf=\"!facet && !selection\" naturalIcon=\"search\" matIconPrefix></mat-icon>\n\n <button (click)=\"clear()\" *ngIf=\"selection\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n\n <button (click)=\"clear()\" *ngIf=\"facet && !selection\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"undo\"></mat-icon>\n </button>\n</mat-form-field>\n<div class=\"hide\">{{ formCtrl.value ? formCtrl.value : facet ? facet.display : placeholder }}</div>\n","import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalInputComponent} from '../input/input.component';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelection} from '../types/values';\nimport {NgFor} from '@angular/common';\n\n@Component({\n selector: 'natural-group',\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n standalone: true,\n imports: [NgFor, NaturalInputComponent],\n})\nexport class NaturalGroupComponent {\n @ViewChild('newValueInput') public newValueInput!: NaturalInputComponent;\n\n /**\n * Text display in the dropdown to select the facet\n */\n @Input() public dropdownTitle = '';\n @Input({required: true}) public placeholder!: string;\n @Input({required: true}) public facets!: NaturalSearchFacets;\n @Output() public readonly selectionChange = new EventEmitter<GroupSelections>();\n public innerSelections: GroupSelections = [];\n\n @Input() public set selections(selection: GroupSelections) {\n this.innerSelections = deepClone(selection);\n }\n\n public updateInput(selection: NaturalSearchSelection, index: number): void {\n this.innerSelections[index] = selection;\n this.selectionChange.emit(this.innerSelections);\n }\n\n public addInput(selection: NaturalSearchSelection): void {\n this.newValueInput.clear();\n this.innerSelections.push(selection);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public removeInput(index: number): void {\n this.innerSelections.splice(index, 1);\n this.selectionChange.emit(this.innerSelections);\n }\n}\n","<natural-input\n (cleared)=\"removeInput(i)\"\n (selectionChange)=\"updateInput($event, i)\"\n *ngFor=\"let selection of innerSelections; let i = index\"\n [facets]=\"facets\"\n [selection]=\"selection\"\n></natural-input>\n\n<natural-input\n #newValueInput\n (selectionChange)=\"addInput($event)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n tabIndex=\"10\"\n cdkFocusInitial\n [dropdownTitle]=\"dropdownTitle\"\n></natural-input>\n","import {Component, EventEmitter, Input, OnChanges, Output} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelections} from '../types/values';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {map} from 'rxjs';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalGroupComponent} from '../group/group.component';\nimport {NgClass, NgFor, NgIf, AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'natural-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n NgFor,\n NaturalGroupComponent,\n NgIf,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n NaturalIconDirective,\n MatDividerModule,\n AsyncPipe,\n ],\n})\nexport class NaturalSearchComponent implements OnChanges {\n /**\n * Placeholder for last input (the free search input)\n */\n @Input() public placeholder = $localize`Rechercher`;\n\n /**\n * Exhaustive list of facets to be used in this <natural-search>\n */\n @Input() public facets: NaturalSearchFacets = [];\n\n /**\n * Whether to allow end-user to create multiple `OR` groups\n */\n @Input() public multipleGroups = false;\n\n /**\n * Text display in the dropdown to select the facet\n */\n @Input() public dropdownTitle = '';\n\n /**\n * Emits when some selection has been setted by the user\n */\n @Output() public readonly selectionChange = new EventEmitter<NaturalSearchSelections>();\n\n /**\n * Cleaned inputted selections. Allow valid selections to be manipulated inside component\n */\n public innerSelections: NaturalSearchSelections = [[]];\n\n /**\n * Input to display at component initialisation\n */\n @Input()\n public set selections(selections: NaturalSearchSelections) {\n this.innerSelections = selections && selections[0] ? deepClone(selections) : [[]];\n }\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n public constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n public ngOnChanges(): void {\n if (!this.facets) {\n this.facets = [];\n }\n }\n\n public updateGroup(groupSelections: GroupSelections, groupIndex: number): void {\n for (let i = 0; i < groupSelections.length; i++) {\n this.innerSelections[groupIndex][i] = groupSelections[i];\n }\n this.innerSelections[groupIndex].length = groupSelections.length;\n this.selectionChange.emit(this.innerSelections);\n }\n\n public addGroup(): void {\n this.innerSelections.push([]);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public removeGroup(index: number): void {\n this.innerSelections.splice(index, 1);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public clear(): void {\n this.innerSelections = [[]];\n this.selectionChange.emit([[]]);\n }\n}\n","<div class=\"natural-search\" [ngClass]=\"{mobile: isMobile | async, hasMultipleGroups: innerSelections.length > 1}\">\n <div class=\"groupsWrapper\">\n <ng-container *ngFor=\"let groupSelections of innerSelections; let i = index; let last = last\">\n <div class=\"groupWrapper\">\n <natural-group\n (selectionChange)=\"updateGroup($event, i)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n [selections]=\"groupSelections\"\n [dropdownTitle]=\"dropdownTitle\"\n ></natural-group>\n\n <div class=\"endOfRowButton\">\n <button\n (click)=\"removeGroup(i)\"\n *ngIf=\"innerSelections.length > 1\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Supprimer ce groupe\"\n >\n <mat-icon naturalIcon=\"remove\"></mat-icon>\n </button>\n </div>\n </div>\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </ng-container>\n </div>\n\n <div class=\"endOfRowButton\">\n <button\n (click)=\"addGroup()\"\n *ngIf=\"multipleGroups\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Ajouter un groupe\"\n >\n <mat-icon naturalIcon=\"add\"></mat-icon>\n </button>\n\n <button\n (click)=\"clear()\"\n mat-icon-button\n class=\"clear-button\"\n i18n-matTooltip\n matTooltip=\"Annuler la recherche\"\n >\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n </div>\n</div>\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {FlatTreeControl} from '@angular/cdk/tree';\nimport {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule} from '@angular/material/tree';\nimport {Observable} from 'rxjs';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\nimport {QueryVariables} from '../../../classes/query-variable-manager';\nimport {Literal} from '../../../types/types';\nimport {toGraphQLDoctrineFilter} from '../../search/classes/graphql-doctrine';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {HierarchicFlatNode} from '../classes/flat-node';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {HierarchicModelNode} from '../classes/model-node';\nimport {NaturalHierarchicSelectorService, OrganizedModelSelection} from './hierarchic-selector.service';\nimport {replaceObjectKeepingReference} from '../../../classes/utility';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {NgIf, NgClass, NgFor} from '@angular/common';\nimport {NaturalSearchComponent} from '../../search/search/search.component';\n\n@Component({\n selector: 'natural-hierarchic-selector',\n templateUrl: './hierarchic-selector.component.html',\n styleUrls: ['./hierarchic-selector.component.scss'],\n providers: [NaturalHierarchicSelectorService],\n standalone: true,\n imports: [\n NaturalSearchComponent,\n NgIf,\n MatProgressSpinnerModule,\n MatTreeModule,\n NgClass,\n MatButtonModule,\n MatIconModule,\n NaturalIconDirective,\n MatCheckboxModule,\n MatChipsModule,\n NgFor,\n ],\n})\nexport class NaturalHierarchicSelectorComponent extends NaturalAbstractController implements OnInit, OnChanges {\n /**\n * Function that receives a model and returns a string for display value\n */\n @Input() public displayWith?: (item: any) => string;\n\n /**\n * Config for items and relations arrangement\n */\n @Input({required: true}) public config!: NaturalHierarchicConfiguration[];\n\n /**\n * If multiple or single item selection\n */\n @Input() public multiple = false;\n\n /**\n * Selected items\n * Organized by key, containing each an array of selected items of same type\n */\n @Input() public selected: OrganizedModelSelection = {};\n\n /**\n * Wherever if selectable elements can be unselected\n */\n @Input() public allowUnselect = true;\n\n /**\n * Filters that apply to each query\n */\n @Input() public filters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Search facets\n */\n @Input() public searchFacets: NaturalSearchFacets = [];\n\n /**\n * Selections to apply on natural-search on component initialisation\n */\n @Input() public searchSelections: NaturalSearchSelections = [];\n\n /**\n * Emits when natural-search selections change\n */\n @Output() public readonly searchSelectionChange = new EventEmitter<NaturalSearchSelections>();\n\n /**\n * Inner representation of selected @Input() to allow flat listing as mat-chip.\n */\n public selectedNodes: HierarchicModelNode[] = [];\n\n /**\n * Emits selection change\n * Returns a Literal where selected models are organized by key\n */\n @Output() public readonly selectionChange = new EventEmitter<OrganizedModelSelection>();\n\n /**\n * Controller for nodes selection\n */\n public flatNodesSelection!: SelectionModel<HierarchicFlatNode>;\n\n public treeControl!: FlatTreeControl<HierarchicFlatNode>;\n public treeFlattener!: MatTreeFlattener<HierarchicModelNode, HierarchicFlatNode>;\n public dataSource!: MatTreeFlatDataSource<HierarchicModelNode, HierarchicFlatNode>;\n\n public loading = false;\n\n /**\n * Cache for transformed nodes\n */\n private flatNodeMap: Map<string, HierarchicFlatNode> = new Map<string, HierarchicFlatNode>();\n\n public constructor(private readonly hierarchicSelectorService: NaturalHierarchicSelectorService) {\n super();\n }\n\n /**\n * Angular OnInit implementation\n */\n public ngOnInit(): void {\n // Init tree checkbox selectors\n this.flatNodesSelection = new SelectionModel<any>(this.multiple);\n\n // Tree controllers and manipulators\n this.treeFlattener = new MatTreeFlattener(\n this.transformer(),\n this.getLevel(),\n this.isExpandable(),\n this.getChildren(),\n );\n this.treeControl = new FlatTreeControl<HierarchicFlatNode>(this.getLevel(), this.isExpandable());\n\n // The dataSource contains a nested ModelNodes list. Each ModelNode has a child attribute that returns an observable.\n // The dataSource contains a flat representation of the nested ModelNodes that is generated by the treeFlattener related functions\n this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\n\n // Update dataSource when receiving new list -> we assign the whole tree\n // The treeControl and treeFlattener will generate the displayed tree\n this.hierarchicSelectorService.dataChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => (this.dataSource.data = data));\n\n // Prevent empty screen on first load and init NaturalHierarchicSelectorService with inputted configuration\n let variables;\n if (this.searchSelections.some(s => s.length)) {\n variables = {filter: toGraphQLDoctrineFilter(this.searchFacets, this.searchSelections)};\n }\n this.loadRoots(variables);\n\n // OrganizedSelection into list usable by template\n this.updateInnerSelection(this.selected);\n }\n\n /**\n * Angular OnChange implementation\n */\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.selected && !changes.selected.firstChange) {\n this.updateInnerSelection(this.selected);\n }\n\n if (changes.filters && !changes.filters.firstChange) {\n this.loadRoots();\n }\n }\n\n /**\n * Toggle selection of a FlatNode, considering if multiple selection is activated or not\n */\n public toggleFlatNode(flatNode: HierarchicFlatNode): void {\n if (this.multiple) {\n // Is multiple allowed, just toggle element\n if (this.flatNodesSelection.isSelected(flatNode)) {\n this.unselectFlatNode(flatNode);\n } else {\n this.selectFlatNode(flatNode);\n }\n } else if (!this.multiple) {\n if (this.flatNodesSelection.isSelected(flatNode)) {\n this.unselectSingleFlatNode();\n } else {\n // If not multiple, and we want to select an element, unselect everything before to keep a single selection\n this.selectSingleFlatNode(flatNode);\n }\n }\n }\n\n /**\n * When unselecting an element from the mat-chips, it can be deep in the hierarchy, and the tree element may not exist...\n * ... but we still need to remove the element from the mat-chips list.\n */\n public unselectModelNode(node: HierarchicModelNode): void {\n const flatNode = this.getFlatNode(node);\n if (flatNode) {\n this.unselectFlatNode(flatNode);\n } else {\n // Remove from chips list only if no flatNode, because unselectFlatNode() already deals with it.\n this.removeModelNode(node);\n this.updateSelection(this.selectedNodes);\n }\n }\n\n public isNodeTogglable(flatNode: HierarchicFlatNode): boolean {\n if (this.isNodeSelected(flatNode.node)) {\n return flatNode.deselectable;\n } else {\n return flatNode.selectable;\n }\n }\n\n private getDisplayFn(config: NaturalHierarchicConfiguration): (item: any) => string {\n if (config.displayWith) {\n return config.displayWith;\n }\n\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return item => (item ? item.fullName || item.name : '');\n }\n\n public loadChildren(flatNode: HierarchicFlatNode): void {\n if (this.treeControl.isExpanded(flatNode)) {\n this.hierarchicSelectorService.loadChildren(flatNode, this.filters);\n }\n }\n\n /**\n * Created to collapse all children when closing a parent, but not sure it's good.\n */\n // public loadChildren(flatNode: HierarchicFlatNode) {\n // if (this.treeControl.isExpanded(flatNode)) {\n //\n // const cachedFlatNode = this.getFlatNode(flatNode.node);\n // if (cachedFlatNode) {\n // this.hierarchicSelectorService.loadChildren(cachedFlatNode, this.filters);\n //\n // // Close children\n // cachedFlatNode.node.children.forEach(child => {\n // const childNode = this.getFlatNode(child);\n // if (childNode) {\n // this.treeControl.collapse(childNode);\n // }\n // });\n // }\n // }\n // }\n\n private getChildren(): (node: HierarchicModelNode) => Observable<HierarchicModelNode[]> {\n return (node: HierarchicModelNode): Observable<HierarchicModelNode[]> => {\n return node.childrenChange;\n };\n }\n\n /**\n * Transforms a HierarchicModelNode into a FlatNode\n */\n private transformer(): (node: HierarchicModelNode, level: number) => HierarchicFlatNode {\n return (node: HierarchicModelNode, level: number) => {\n return this.getOrCreateFlatNode(node, level);\n };\n }\n\n /**\n * Return deep of the node in the tree\n */\n private getLevel(): (node: HierarchicFlatNode) => number {\n return (node: HierarchicFlatNode) => {\n return node.level;\n };\n }\n\n /**\n * Is always expandable because we load on demand, we don't know if there are children yet\n */\n private isExpandable(): (node: HierarchicFlatNode) => boolean {\n return (node: HierarchicFlatNode) => {\n return node.expandable;\n };\n }\n\n private getOrCreateFlatNode(node: HierarchicModelNode, level: number): HierarchicFlatNode {\n // Return FlatNode if exists\n const flatNode = this.getFlatNode(node);\n if (flatNode) {\n return flatNode;\n }\n\n // Return new FlatNode\n return this.createFlatNode(node, level);\n }\n\n public search(selections: NaturalSearchSelections): void {\n this.searchSelectionChange.emit(selections);\n if (selections.some(s => s.length)) {\n const variables = {filter: toGraphQLDoctrineFilter(this.searchFacets, selections)};\n this.hierarchicSelectorService.search(variables, this.filters);\n } else {\n this.loadRoots();\n }\n }\n\n private loadRoots(searchVariables?: QueryVariables): void {\n this.loading = true;\n this.flatNodeMap = new Map<string, HierarchicFlatNode>();\n this.hierarchicSelectorService\n .init(this.config, this.filters, searchVariables || null)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe();\n }\n\n /**\n * Sync inner selection (tree and mat-chips) according to selected input attribute\n */\n private updateInnerSelection(selected: OrganizedModelSelection): void {\n // Transform an OrganizedModelSelection into a ModelNode list that is used in the selected zone of the component (see template)\n this.selectedNodes = this.hierarchicSelectorService.fromOrganizedSelection(selected);\n\n this.flatNodesSelection.clear();\n for (const node of this.selectedNodes) {\n const flatNode = this.getFlatNode(node);\n if (flatNode) {\n this.flatNodesSelection.select(flatNode);\n }\n }\n }\n\n /**\n * Unselect a node, keeping the rest of the selected untouched\n */\n private unselectFlatNode(flatNode: HierarchicFlatNode): void {\n this.flatNodesSelection.deselect(flatNode);\n this.removeModelNode(flatNode.node);\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Remove a node from chip lists\n */\n private removeModelNode(node: HierarchicModelNode): void {\n const key = this.getMapKey(node.model);\n const selectionIndex = this.selectedNodes.findIndex(n => this.getMapKey(n.model) === key);\n this.selectedNodes.splice(selectionIndex, 1);\n }\n\n /**\n * Select a node, keeping th rest of the selected untouched\n */\n private selectFlatNode(flatNode: HierarchicFlatNode): void {\n this.flatNodesSelection.select(flatNode);\n this.selectedNodes.push(flatNode.node);\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Clear all selected and select the given node\n */\n private selectSingleFlatNode(flatNode: HierarchicFlatNode): void {\n this.flatNodesSelection.clear();\n this.flatNodesSelection.select(flatNode);\n this.selectedNodes = [flatNode.node];\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Clear all selected and select the given node\n */\n private unselectSingleFlatNode(): void {\n this.flatNodesSelection.clear();\n this.selectedNodes = [];\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Transform the given elements into the organized selection that is emitted to output\n */\n private updateSelection(selected: HierarchicModelNode[]): void {\n const organizedFlatNodesSelection = this.hierarchicSelectorService.toOrganizedSelection(selected);\n replaceObjectKeepingReference(this.selected, organizedFlatNodesSelection);\n this.selectionChange.emit(organizedFlatNodesSelection);\n }\n\n private isNodeSelected(node: HierarchicModelNode): boolean {\n const key = this.getMapKey(node.model);\n\n return this.selectedNodes.some(n => this.getMapKey(n.model) === key);\n }\n\n private getFlatNode(node: HierarchicModelNode): HierarchicFlatNode | null {\n const key = this.getMapKey(node.model);\n return this.flatNodeMap.get(key) || null;\n }\n\n private createFlatNode(node: HierarchicModelNode, level: number): HierarchicFlatNode {\n const key = this.getMapKey(node.model);\n const name = this.getDisplayFn(node.config)(node.model);\n const expandable = false;\n const isCustomSelectable = node.config.isSelectableCallback\n ? node.config.isSelectableCallback(node.model)\n : true;\n const isSelectable = !!node.config.selectableAtKey && isCustomSelectable;\n\n const flatNode = new HierarchicFlatNode(node, name, level, expandable, isSelectable);\n\n this.hierarchicSelectorService.countItems(flatNode, this.filters);\n\n // Mark node as selected if needed (checks the selected processed input)\n if (this.isNodeSelected(node)) {\n if (!this.allowUnselect) {\n flatNode.deselectable = false;\n }\n this.flatNodesSelection.select(flatNode);\n }\n\n // Cache FlatNode\n this.flatNodeMap.set(key, flatNode);\n\n return flatNode;\n }\n\n /**\n * Returns an identifier key for map cache\n * As many object types can be used, this function considers typename and ID to return something like document-123\n */\n private getMapKey(model: Literal): string {\n return model.__typename + '-' + model.id;\n }\n}\n","<div [style.margin-bottom.px]=\"20\">\n <natural-search\n (selectionChange)=\"search($event)\"\n [facets]=\"searchFacets\"\n [selections]=\"searchSelections\"\n ></natural-search>\n</div>\n\n<div class=\"body\">\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"36\"\n mode=\"indeterminate\"\n style=\"margin: 10px\"\n ></mat-progress-spinner>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n <button\n (click)=\"loadChildren(node)\"\n *ngIf=\"node.expandable\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n <mat-progress-spinner\n *ngIf=\"node.loading\"\n [diameter]=\"24\"\n [strokeWidth]=\"5\"\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <mat-icon\n *ngIf=\"!node.loading\"\n [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\"\n ></mat-icon>\n </button>\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n <mat-icon\n *ngIf=\"node.node.config.icon\"\n [naturalIcon]=\"node.node.config.icon\"\n style=\"margin-right: 10px\"\n ></mat-icon>\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n <mat-chip-option\n (removed)=\"unselectModelNode(node)\"\n *ngFor=\"let node of selectedNodes\"\n [removable]=\"true\"\n [selectable]=\"false\"\n >\n <mat-icon *ngIf=\"node.config.icon\" [naturalIcon]=\"node.config.icon\"></mat-icon>\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <mat-icon matChipRemove naturalIcon=\"cancel\"></mat-icon>\n </mat-chip-option>\n </mat-chip-listbox>\n</div>\n\n<div *ngIf=\"!loading && !dataSource.data.length\" class=\"margin-v\" i18n>Aucun résultat</div>\n","import {Component} from '@angular/core';\nimport {NaturalQueryVariablesManager} from '../../../classes/query-variable-manager';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {Literal} from '../../../types/types';\nimport {NaturalHierarchicConfiguration} from '../../hierarchic-selector/classes/hierarchic-configuration';\nimport {OrganizedModelSelection} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalHierarchicSelectorComponent} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.component';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport interface HierarchicFilterConfiguration<T = Literal> {\n service: NaturalHierarchicConfiguration['service'];\n filter: T;\n}\n\nexport type HierarchicFiltersConfiguration<T = Literal> = Array<HierarchicFilterConfiguration<T>>;\n\nexport interface TypeHierarchicSelectorConfiguration {\n key: string;\n service: NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>;\n config: NaturalHierarchicConfiguration[];\n filters?: HierarchicFiltersConfiguration;\n}\n\n@Component({\n templateUrl: './type-hierarchic-selector.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n NgIf,\n NaturalHierarchicSelectorComponent,\n ],\n})\nexport class TypeHierarchicSelectorComponent extends AbstractAssociationSelectComponent<TypeHierarchicSelectorConfiguration> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const ids: string[] =\n this.valueCtrl.value?.[this.configuration.key].map((item: any) => {\n return item.id;\n }) ?? [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, ids);\n }\n\n protected reloadValue(condition: FilterGroupConditionField): Observable<any | null> {\n if (!condition.have) {\n return EMPTY;\n }\n\n const ids = condition.have.values;\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('a', {\n filter: {\n groups: [{conditions: [{id: {in: {values: ids}}}]}],\n },\n });\n\n return this.configuration.service.getAll(qvm).pipe(\n map(v => {\n const selection: OrganizedModelSelection = {};\n\n selection[this.configuration.key] = v.items;\n\n return this.noEmptySelection(selection);\n }),\n );\n }\n\n protected renderValueWithoutOperator(): string {\n const items = this.valueCtrl.value?.[this.configuration.key];\n if (!items) {\n return '';\n }\n\n return items\n .map((item: any) => {\n return item.fullName || item.name;\n })\n .join(', ');\n }\n\n public selectionChange(selection: OrganizedModelSelection): void {\n this.valueCtrl.setValue(this.noEmptySelection(selection));\n this.valueCtrl.markAsDirty();\n }\n\n /**\n * We need to keep `null` in our valueCtrl so the required validator works properly, so\n * filter here\n */\n private noEmptySelection(selection: OrganizedModelSelection): OrganizedModelSelection | null {\n return selection[this.configuration.key].length ? selection : null;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <natural-hierarchic-selector\n *ngIf=\"requireValueCtrl\"\n (selectionChange)=\"selectionChange($event)\"\n [config]=\"configuration.config\"\n [filters]=\"configuration.filters\"\n [multiple]=\"true\"\n [selected]=\"valueCtrl.value || {}\"\n style=\"margin-right: 20px\"\n ></natural-hierarchic-selector>\n</form>\n","import {Component, Inject} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n NgForm,\n ValidationErrors,\n ValidatorFn,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {DateAdapter, ErrorStateMatcher, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {NgIf} from '@angular/common';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport interface TypeDateRangeConfiguration<D = any> {\n min?: D | null;\n max?: D | null;\n}\n\nclass InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null, form: FormGroupDirective | NgForm | null): boolean {\n return (form && form.invalid && (form.value.to || form.value.from)) || (control && control.invalid);\n }\n}\n\nfunction parseFromControl<D>(control: AbstractControl, key: string): D | null {\n const c = control.get(key);\n if (!c) {\n return null;\n }\n\n return c.value;\n}\n\n/**\n * From >= To\n */\nfunction toGreaterThanFrom<D>(dateAdapter: DateAdapter<D>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const from = parseFromControl<D>(control, 'from');\n const to = parseFromControl<D>(control, 'to');\n\n if (from && to && dateAdapter.compareDate(from, to) > 0) {\n return {toGreaterThanFrom: true};\n }\n\n return null;\n };\n}\n\n/**\n * Date range with mandatory bounding dates.\n *\n * If you need optional bounding date, then use `TypeDateComponent` instead.\n */\n@Component({\n templateUrl: './type-date-range.component.html',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, NgIf],\n})\nexport class TypeDateRangeComponent<D = any> implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateRangeConfiguration<D>>;\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly fromCtrl = new FormControl<D | null>(null);\n public readonly toCtrl = new FormControl<D | null>(null);\n public readonly form = new FormGroup({\n from: this.fromCtrl,\n to: this.toCtrl,\n });\n\n private readonly defaults: Required<TypeDateRangeConfiguration<D>> = {\n min: null,\n max: null,\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeDateRangeConfiguration<D>>,\n private dateAdapter: DateAdapter<D>,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges).subscribe(() => {\n this.renderedValue.next(this.getRenderedValue());\n });\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const from = serialize<D>(this.dateAdapter, this.fromCtrl.value);\n const to = serialize<D>(this.dateAdapter, this.toCtrl.value);\n\n if (from && to) {\n return {between: {from, to}};\n } else {\n return {};\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const value = {\n from: null as D | null,\n to: null as D | null,\n };\n\n if (condition.between) {\n value.from = this.dateAdapter.parse(condition.between.from, null);\n value.to = this.dateAdapter.parse(condition.between.to, null);\n }\n\n this.form.setValue(value);\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(dateMin<D>(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax<D>(this.dateAdapter, this.configuration.max));\n }\n\n this.fromCtrl.setValidators(validators);\n this.toCtrl.setValidators(validators);\n\n this.form.setValidators([\n toGreaterThanFrom<D>(this.dateAdapter), // From < To\n ]);\n }\n\n public render(value: D | null): string {\n return value ? this.dateAdapter.format(value, this.dateFormats.display.dateInput) : '';\n }\n\n private getRenderedValue(): string {\n const from = this.render(this.fromCtrl.value);\n const to = this.render(this.toCtrl.value);\n\n if (from && to) {\n return from + ' - ' + to;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"from\"\n placeholder=\"De\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"from\"></mat-datepicker-toggle>\n <mat-datepicker #from></mat-datepicker>\n <mat-error *ngIf=\"form.hasError('toGreaterThanFrom')\"\n >{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\"\n >< {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\"\n >> {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"to\"\n placeholder=\"à\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"to\"></mat-datepicker-toggle>\n <mat-datepicker #to></mat-datepicker>\n <mat-error *ngIf=\"toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\">\n < {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\">\n > {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n</form>\n","import {NgFor, NgIf} from '@angular/common';\nimport {Component, Inject, OnDestroy} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {BehaviorSubject} from 'rxjs';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\n\nexport interface TypeBooleanConfiguration {\n displayWhenActive: string;\n displayWhenInactive: string;\n}\n\n@Component({\n templateUrl: './type-boolean.component.html',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, NgIf, NgFor, MatCheckboxModule],\n})\nexport class TypeBooleanComponent extends NaturalAbstractController implements DropdownComponent, OnDestroy {\n public readonly renderedValue: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n public readonly formControl = new FormControl<boolean>(true, {nonNullable: true});\n\n public readonly configuration: Required<TypeBooleanConfiguration>;\n\n private readonly defaults: Required<TypeBooleanConfiguration> = {\n displayWhenActive: '',\n displayWhenInactive: '',\n };\n\n public constructor(@Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeBooleanConfiguration>) {\n super();\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n const updateDisplay = (value: boolean): void =>\n this.renderedValue.next(\n value ? this.configuration.displayWhenActive : this.configuration.displayWhenInactive,\n );\n\n if (data.condition?.equal) {\n this.formControl.setValue(!!data.condition.equal.value);\n }\n\n // Update rendered value\n this.formControl.valueChanges.subscribe(value => updateDisplay(value));\n updateDisplay(this.formControl.value);\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n return {equal: {value: this.formControl.value}};\n }\n\n /**\n * Always valid because checked and unchecked are both valid values\n */\n public isValid(): boolean {\n return true;\n }\n\n /**\n * Always dirty because even on dropdown opening, the default value is accepted as intentional. There is no \"default/empty\" state\n */\n public isDirty(): boolean {\n return true;\n }\n}\n","<mat-checkbox [formControl]=\"formControl\">{{ renderedValue.value }}</mat-checkbox>\n","import {CommonModule, NgFor, NgIf} from '@angular/common';\nimport {Component, Inject, OnDestroy} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {BehaviorSubject} from 'rxjs';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\nimport {Literal} from '../../../types/types';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {isEqual} from 'lodash-es';\n\nexport interface TypeOption {\n display: string;\n condition: Literal;\n}\n\nexport interface TypeOptionsConfiguration {\n options: TypeOption[];\n}\n\n@Component({\n templateUrl: './type-options.component.html',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, NgIf, NgFor, MatButtonToggleModule, CommonModule],\n})\nexport class TypeOptionsComponent extends NaturalAbstractController implements DropdownComponent, OnDestroy {\n public readonly renderedValue: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n public readonly formControl = new FormControl<TypeOption>({} as TypeOption, {nonNullable: true});\n\n public readonly configuration: Required<TypeOptionsConfiguration>;\n\n private readonly defaults: Required<TypeOptionsConfiguration> = {\n options: [],\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeOptionsConfiguration>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n super();\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n if (!this.configuration.options.length) {\n throw new Error('TypeOptions need options, empty array or null given');\n }\n\n this.formControl.setValidators([Validators.required]);\n\n if (data.condition) {\n const option = this.configuration.options.find(option => isEqual(option.condition, data.condition));\n\n if (option) {\n this.formControl.setValue(option);\n this.renderedValue.next(option.display);\n }\n }\n\n // Update rendered value\n this.formControl.valueChanges.subscribe(option => {\n if (option) {\n this.renderedValue.next(option.display);\n this.dropdownRef.close(option);\n }\n });\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n return this.formControl.value.condition;\n }\n\n public isValid(): boolean {\n return this.formControl.valid && !!this.formControl.value?.condition;\n }\n\n public isDirty(): boolean {\n return this.formControl.dirty;\n }\n}\n","<mat-button-toggle-group [formControl]=\"formControl\">\n <mat-button-toggle *ngFor=\"let option of configuration.options\" [value]=\"option\">{{\n option.display\n }}</mat-button-toggle>\n</mat-button-toggle-group>\n","/*\n * Public API Surface of natural-search dropdown components\n */\nexport {TypeSelectConfiguration, TypeSelectComponent} from './type-select/type-select.component';\n\nexport {\n TypeSelectNaturalConfiguration,\n TypeNaturalSelectComponent,\n} from './type-natural-select/type-natural-select.component';\n\nexport {TypeNumberConfiguration, TypeNumberComponent} from './type-number/type-number.component';\n\nexport {\n TypeHierarchicSelectorConfiguration,\n TypeHierarchicSelectorComponent,\n} from './type-hierarchic-selector/type-hierarchic-selector.component';\n\nexport {TypeDateConfiguration, TypeDateComponent} from './type-date/type-date.component';\n\nexport {TypeDateRangeConfiguration, TypeDateRangeComponent} from './type-date-range/type-date-range.component';\n\nexport {TypeTextComponent} from './type-text/type-text.component';\n\nexport {TypeBooleanConfiguration, TypeBooleanComponent} from './type-boolean/type-boolean.component';\nexport {TypeOptionsConfiguration, TypeOption, TypeOptionsComponent} from './type-options/type-options.component';\n","export function acceptType(accept: string, type: string, filename: string): boolean {\n if (!accept.trim()) {\n return true;\n }\n\n type = type.toLowerCase();\n filename = filename.toLowerCase();\n\n return accept.split(',').some(mimeOrExtension => {\n mimeOrExtension = mimeOrExtension.trim().toLowerCase();\n if (mimeOrExtension.startsWith('.')) {\n return filename.endsWith(mimeOrExtension);\n } else {\n // Transform `*` into `.*`\n const pattern = mimeOrExtension.replace(/\\*/g, '.*');\n\n return type.match(pattern);\n }\n });\n}\n\nexport function isFileInput(elm: HTMLElement): elm is HTMLInputElement {\n const type = elm.getAttribute('type');\n\n return elm.tagName.toLowerCase() === 'input' && !!type && type.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\n\nexport function detectSwipe(event: Event | TouchEvent): boolean {\n const touches = 'changedTouches' in event ? event.changedTouches : null;\n if (!touches) {\n return false;\n }\n\n if (event.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (event.type === 'touchend') {\n const currentX = touches[0].clientX;\n const currentY = touches[0].clientY;\n if (Math.abs(currentX - initialTouchStartX) > 20 || Math.abs(currentY - initialTouchStartY) > 20) {\n event.stopPropagation();\n if (event.cancelable) {\n event.preventDefault();\n }\n\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport function createInvisibleFileInputWrap(document: Document): HTMLLabelElement {\n const fileElem = createFileInput(document);\n const label = document.createElement('label');\n label.innerHTML = 'upload';\n label.style.visibility = 'hidden';\n label.style.position = 'absolute';\n label.style.overflow = 'hidden';\n label.style.width = '0px';\n label.style.height = '0px';\n label.style.border = 'none';\n label.style.margin = '0px';\n label.style.padding = '0px';\n label.setAttribute('tabindex', '-1');\n\n label.appendChild(fileElem);\n\n return label;\n}\n\nfunction createFileInput(document: Document): HTMLInputElement {\n const fileElem = document.createElement('input');\n fileElem.type = 'file';\n\n return fileElem;\n}\n\nexport function isDirectory(file: File): Promise<boolean> {\n return blobText(file.slice(0, 1)).then(\n text => {\n // Firefox will return empty string for a folder, so we must check that special case.\n // That means that any empty file will incorrectly be interpreted as a folder on all\n // browsers, but that's tolerable because there is no real use-case to upload an empty file.\n return text !== '';\n },\n () => false,\n );\n}\n\n/**\n * This is a ponyfill for `Blob.text()`, because Safari 13 and 14 do not support it, https://caniuse.com/?search=blob.text,\n * and we try our best not to break iPhone users too much.\n */\nfunction blobText(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result as string);\n };\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n}\n\nexport function stopEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function fileListToArray(fileList: FileList): File[] {\n const result: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList.item(i);\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nfunction dataTransferItemListToArray(items: DataTransferItemList): File[] {\n const result: File[] = [];\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i++) {\n const file = items[i].getAsFile();\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nexport function eventToFiles(event: Event | DragEvent): File[] {\n const transfer = 'dataTransfer' in event ? event.dataTransfer : null;\n if (transfer?.files?.length) {\n return fileListToArray(transfer.files);\n }\n\n if (transfer) {\n return dataTransferItemListToArray(transfer.items);\n }\n\n return [];\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {FileSelection} from './abstract-file';\nimport {FileModel} from './types';\nimport {DOCUMENT} from '@angular/common';\n\n// @dynamic\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalFileService {\n /**\n * Allow to subscribe to selected files in the entire application. So a\n * child component is able to receive a file that was dropped on a parent\n * component.\n *\n * Typically useful to drop a file on the entire screen, instead of a precise\n * component.\n */\n public readonly filesChanged = new Subject<FileSelection>();\n\n public constructor(@Inject(DOCUMENT) private readonly document: Document) {}\n\n public getDownloadLink(model: FileModel | null): null | string {\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Cannot build download link because `window` is undefined');\n }\n\n const hostname = window.location.protocol + '//' + window.location.hostname;\n\n if (model?.__typename === 'File') {\n return hostname + '/api/file/' + model.id;\n } else if (model?.__typename === 'AccountingDocument') {\n return hostname + '/api/accounting-document/' + model.id;\n } else if (model?.__typename === 'Image') {\n return hostname + '/api/image/' + model.id;\n }\n\n return null;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n acceptType,\n createInvisibleFileInputWrap,\n detectSwipe,\n eventToFiles,\n fileListToArray,\n isDirectory,\n isFileInput,\n stopEvent,\n} from './utils';\nimport {NaturalFileService} from './file.service';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {DOCUMENT} from '@angular/common';\nimport {forkJoin, map, Observable, ObservableInput, of, tap} from 'rxjs';\n\nexport interface InvalidFile {\n file: File;\n error: string;\n}\n\nexport interface FileSelection {\n /**\n * The list of files that have been selected.\n */\n valid: File[];\n\n /**\n * The list of files that have been selected but are invalid according to validators.\n */\n invalid: InvalidFile[];\n}\n\n/**\n * A master base set of logic intended to support file select/drag/drop operations\n *\n * In most cases you probably want click-to-select and drag-to-select, so you should use:\n *\n * <div naturalFileDrop [selectable]=\"true\"></div>\n *\n * @dynamic\n */\n@Directive()\nexport abstract class NaturalAbstractFile extends NaturalAbstractController implements OnInit, OnDestroy, OnChanges {\n private fileElement?: HTMLInputElement;\n\n /**\n * Whether we should accept a single file or multiple files\n */\n @Input() public multiple = false;\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n @Input() public accept = '';\n\n /**\n * Maximum file size in bytes. 0 means no validation at all.\n */\n @Input() public maxSize = 0;\n\n /**\n * Disable the file selection entirely\n */\n @Input() public fileSelectionDisabled = false;\n\n /**\n * Whether the user can click on the element to select something\n *\n * This has only effect during initialization. Subsequent changes will have\n * no effect.\n */\n @Input() public selectable = false;\n\n /**\n * If true, the file selection will be broadcast through `NaturalFileService.filesChanged`.\n *\n * It is useful to set this to false if there is two upload on a page with different purpose\n * and the second upload should not be confused with the first one.\n */\n @Input() public broadcast = true;\n\n /**\n * The single valid file that has been selected.\n *\n * It is for convenience of use, and will only emit if there is at least one\n * valid file. See `filesChange` for a more complete output.\n */\n @Output() public readonly fileChange = new EventEmitter<File>();\n\n /**\n * The list of files that have been selected.\n */\n @Output() public readonly filesChange = new EventEmitter<FileSelection>();\n\n public constructor(\n private readonly element: ElementRef<HTMLElement>,\n protected readonly naturalFileService: NaturalFileService,\n @Inject(DOCUMENT) private readonly document: Document,\n ) {\n super();\n }\n\n public override ngOnDestroy(): void {\n super.ngOnDestroy();\n delete this.fileElement; // faster memory release of dom element\n }\n\n public ngOnInit(): void {\n if (this.selectable) {\n this.enableSelecting();\n }\n\n this.getFileElement().multiple = this.multiple;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.accept) {\n this.getFileElement().setAttribute('accept', changes.accept.currentValue || '*');\n }\n }\n\n private getFileElement(): HTMLInputElement {\n if (this.fileElement) {\n return this.fileElement;\n }\n\n // elm is a file input\n if (isFileInput(this.element.nativeElement)) {\n this.fileElement = this.element.nativeElement;\n\n return this.fileElement;\n }\n\n // create foo file input\n const label = createInvisibleFileInputWrap(this.document);\n this.fileElement = label.getElementsByTagName('input')[0];\n this.fileElement.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild(label);\n\n return this.fileElement;\n }\n\n private enableSelecting(): void {\n const elm = this.element.nativeElement;\n\n if (isFileInput(elm)) {\n const bindedHandler = (): void => this.beforeSelect();\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n return;\n } else {\n const bindedHandler = (event: Event): boolean => this.clickHandler(event);\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n elm.addEventListener('touchend', bindedHandler);\n }\n }\n\n protected handleFiles(files: File[]): void {\n const selection: FileSelection = {\n valid: [],\n invalid: [],\n };\n\n forkJoin(\n files.map(file =>\n this.validate(file).pipe(\n tap(error => {\n if (error) {\n selection.invalid.push({\n file: file,\n error: error,\n });\n } else {\n selection.valid.push(file);\n }\n }),\n ),\n ),\n ).subscribe(() => {\n if (selection.valid.length) {\n this.fileChange.emit(selection.valid[0]);\n }\n\n if (selection.valid.length || selection.invalid.length) {\n this.filesChange.emit(selection);\n\n if (this.broadcast) {\n this.naturalFileService.filesChanged.next(selection);\n }\n }\n\n this.getFileElement().value = '';\n });\n }\n\n /**\n * Called when input has files\n */\n private changeFn(event: Event): void {\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n const fileList = event.target.files;\n\n if (!fileList) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(fileListToArray(fileList));\n }\n\n private clickHandler(event: Event): boolean {\n const elm = this.element.nativeElement;\n if (elm.getAttribute('disabled') || this.fileSelectionDisabled) {\n return false;\n }\n\n // prevent the click if it is a swipe\n if (detectSwipe(event)) {\n return true;\n }\n\n const fileElm = this.getFileElement();\n fileElm.click();\n this.beforeSelect();\n\n return false;\n }\n\n private beforeSelect(): void {\n if (!this.fileElement) {\n return;\n }\n\n // if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElement.value = '';\n }\n\n @HostListener('change', ['$event'])\n public onChange(event: Event): void {\n const fileList = this.getFileElement().files;\n const files: File[] = fileList ? fileListToArray(fileList) : eventToFiles(event);\n\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n private validate(file: File): Observable<string | null> {\n return forkJoin<Record<string, ObservableInput<boolean>>>({\n accept: of(acceptType(this.accept, file.type, file.name)),\n fileSize: of(!(this.maxSize && file.size > this.maxSize)),\n directory: isDirectory(file),\n }).pipe(\n map(result => {\n for (const [key, value] of Object.entries(result)) {\n if (!value) {\n return key;\n }\n }\n\n return null;\n }),\n );\n }\n}\n","import {Directive, EventEmitter, HostBinding, HostListener, OnInit, Output} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\nimport {eventToFiles, stopEvent} from './utils';\nimport {asyncScheduler, Subject} from 'rxjs';\nimport {takeUntil, throttleTime} from 'rxjs/operators';\n\n/**\n * This directive has all options to select files, and adds support for drag'n'drop.\n *\n * It will add the CSS class `natural-file-over` on the component when a file is\n * dragged over. It is up to the component to have some specific styling by using\n * this class.\n *\n * In most cases you probably also want click-to-select, so you should use:\n *\n * <div naturalFileDrop [selectable]=\"true\"></div>\n *\n */\n@Directive({\n selector: ':not([naturalFileSelect])[naturalFileDrop]',\n standalone: true,\n})\nexport class NaturalFileDropDirective extends NaturalAbstractFile implements OnInit {\n @HostBinding('class.natural-file-over') public fileOverClass = false;\n\n /**\n * Emits whenever files are being dragged over\n */\n @Output() public readonly fileOver = new EventEmitter<boolean>();\n\n private readonly rawFileOver = new Subject<boolean>();\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n // Automatically change the class, but not too often to avoid visual\n // flickering in Chrome when hovering across child HTML element of our host.\n // It's not absolutely perfect and if dragging slowly and precisely we can\n // still see flicker, but it should be better for most normal usages.\n this.rawFileOver\n .pipe(\n takeUntil(this.ngUnsubscribe),\n throttleTime(200, asyncScheduler, {\n leading: true,\n trailing: true,\n }),\n )\n .subscribe(fileOver => {\n this.fileOver.emit(fileOver);\n this.fileOverClass = fileOver;\n });\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(event: DragEvent): void {\n if (this.fileSelectionDisabled) {\n return;\n }\n\n this.closeDrags();\n\n const files = eventToFiles(event);\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n @HostListener('dragover', ['$event'])\n public onDragOver(event: DragEvent): void {\n if (!this.hasObservers()) {\n return;\n }\n\n if (this.fileSelectionDisabled) {\n return;\n }\n\n stopEvent(event);\n\n // Change cursor\n const transfer = event.dataTransfer;\n if (transfer) {\n transfer.dropEffect = 'copy';\n }\n\n this.rawFileOver.next(true);\n }\n\n private closeDrags(): void {\n this.rawFileOver.next(false);\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(event: DragEvent): void {\n if (this.fileSelectionDisabled) {\n return;\n }\n\n stopEvent(event);\n this.closeDrags();\n }\n\n private hasObservers(): boolean {\n return (\n this.fileChange.observed ||\n this.filesChange.observed ||\n (this.broadcast && this.naturalFileService.filesChanged.observed)\n );\n }\n}\n","import {Directive, Input} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\n\n/**\n * This directive has all options to select files, except drag'n'drop.\n */\n@Directive({\n selector: ':not([naturalFileDrop])[naturalFileSelect]',\n standalone: true,\n})\nexport class NaturalFileSelectDirective extends NaturalAbstractFile {\n /**\n * Whether the user can click on the element to select something\n *\n * Override parent to enable it by default\n */\n @Input() public override selectable = true;\n}\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\nimport {DomSanitizer, SafeStyle} from '@angular/platform-browser';\nimport {Observable, of, Subject, tap} from 'rxjs';\nimport {NaturalFileService} from '../file.service';\nimport {DOCUMENT, NgIf, UpperCasePipe} from '@angular/common';\nimport {FileModel} from '../types';\nimport {NaturalAlertService} from '../../alert/alert.service';\nimport {NaturalCapitalizePipe} from '../../common/pipes/capitalize.pipe';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatRippleModule} from '@angular/material/core';\nimport {NaturalFileDropDirective} from '../file-drop.directive';\n\n// @dynamic\n@Component({\n selector: 'natural-file',\n templateUrl: './file.component.html',\n styleUrls: ['./file.component.scss'],\n standalone: true,\n imports: [\n NaturalFileDropDirective,\n MatRippleModule,\n NgIf,\n MatIconModule,\n NaturalIconDirective,\n UpperCasePipe,\n NaturalCapitalizePipe,\n ],\n})\nexport class NaturalFileComponent implements OnInit, OnChanges {\n @HostBinding('style.height.px') @Input() public height = 250;\n\n @Input() public action: 'upload' | 'download' | null = null;\n\n @Input() public backgroundSize = 'contain';\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n @Input() public accept = 'image/bmp,image/gif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';\n\n /**\n * If given it will be called when a new file is selected. The callback should typically upload the file\n * to the server and link the newly uploaded file to the existing related object.\n *\n * The callback **must** be able to run even if the calling component has been destroyed. That means in most\n * cases you **must** `bind()` the callback explicitly, like so:\n *\n * ```html\n * <natural-file [uploader]=\"myCallback.bind(this)\"></natural-file>\n * ```\n *\n * Also, you probably **should** set a `[formCtrl]` so that the form is updated automatically, instead of doing\n * it manually within the callback.\n */\n @Input() public uploader?: (file: File) => Observable<FileModel>;\n\n @Input() public model: FileModel | null = null;\n\n /**\n * If provided, its value will get updated when the model changes.\n * But its value is never read, so if you want to set a value use `[model]` instead.\n */\n @Input() public formCtrl: AbstractControl | null | undefined = null;\n\n /**\n * This **must not** be used to mutate the server, because it is very likely it will never be called if the\n * human navigates away from the page before the upload is finished. Instead, you should use `[uploader]`.\n */\n @Output() public readonly modelChange = new EventEmitter<FileModel>();\n\n public imagePreview: SafeStyle | null = null;\n public filePreview: string | null = null;\n\n public constructor(\n private readonly naturalFileService: NaturalFileService,\n private readonly alertService: NaturalAlertService,\n private readonly sanitizer: DomSanitizer,\n @Inject(DOCUMENT) private readonly document: Document,\n ) {}\n\n public ngOnInit(): void {\n this.updateImage();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.model && changes.model.previousValue !== changes.model.currentValue) {\n this.updateImage();\n }\n }\n\n public upload(file: File): void {\n this.model = {file: file};\n this.updateImage();\n\n if (this.formCtrl) {\n this.formCtrl.setValue(this.model);\n }\n\n const observable =\n this.uploader?.(file).pipe(tap(() => this.alertService.info($localize`Mis à jour`))) ?? of(this.model);\n\n observable.subscribe(result => {\n this.model = result;\n if (this.formCtrl) {\n this.formCtrl.setValue(this.model);\n }\n\n this.modelChange.emit(this.model);\n });\n }\n\n public getDownloadLink(): null | string {\n if (this.action !== 'download') {\n return null;\n }\n\n return this.naturalFileService.getDownloadLink(this.model);\n }\n\n private updateImage(): void {\n this.imagePreview = null;\n this.filePreview = null;\n if (!this.model) {\n return;\n }\n\n if (this.model.file?.type.includes('image/')) {\n // Model from upload (before saving)\n this.getBase64(this.model.file).subscribe(result => {\n const content = 'url(data:' + this.model?.file?.type + ';base64,' + result + ')';\n this.imagePreview = this.sanitizer.bypassSecurityTrustStyle(content);\n });\n } else if (this.model.file) {\n this.filePreview = this.model.file.type.split('/')[1];\n } else if (this.model.__typename === 'Image' && this.model.id) {\n // Model image with id, use specific API to render image by size\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not show image preview because `window` is undefined');\n }\n\n const loc = window.location;\n const height = this.height ? '/' + this.height : '';\n\n // create image url without port to stay compatible with dev mode\n const image = loc.protocol + '//' + loc.hostname + '/api/image/' + this.model.id + height;\n this.imagePreview = this.sanitizer.bypassSecurityTrustStyle('url(' + image + ')');\n } else if (this.model?.mime && ['File', 'AccountingDocument'].includes(this.model.__typename || '')) {\n this.filePreview = this.model.mime.split('/')[1];\n } else if (this.model.src) {\n // external url\n this.imagePreview = this.sanitizer.bypassSecurityTrustStyle('url(' + this.model.src + ')');\n }\n }\n\n private getBase64(file: File | null): Observable<string> {\n if (!file) {\n return of('');\n }\n\n const subject = new Subject<string>();\n\n const reader = new FileReader();\n reader.addEventListener('load', (ev: any) => {\n subject.next(btoa(ev.target.result));\n subject.complete();\n });\n reader.readAsBinaryString(file);\n\n return subject.asObservable();\n }\n}\n","<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [style.backgroundImage]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n <div *ngIf=\"filePreview\" class=\"file-preview\">\n <mat-icon [size]=\"height * 0.33\" naturalIcon=\"attachment\"></mat-icon>\n {{ filePreview | uppercase }}\n </div>\n\n <div class=\"action-overlay\">\n <mat-icon *ngIf=\"action === 'upload'\" [size]=\"height * 0.66\" naturalIcon=\"cloud_upload\"></mat-icon>\n <mat-icon *ngIf=\"action === 'download'\" [size]=\"height * 0.66\" naturalIcon=\"get_app\"></mat-icon>\n {{ action | capitalize }}\n </div>\n</a>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './file-drop.directive';\nexport * from './file-select.directive';\nexport * from './file.service';\nexport {InvalidFile, FileSelection} from './abstract-file';\nexport * from './component/file.component';\nexport * from './types';\n","import {Component, Input} from '@angular/core';\nimport {ThemePalette} from '@angular/material/core';\nimport {RouterLink} from '@angular/router';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n selector: 'natural-fixed-button',\n templateUrl: './fixed-button.component.html',\n styleUrls: ['./fixed-button.component.scss'],\n standalone: true,\n imports: [MatButtonModule, RouterLink, MatIconModule, NaturalIconDirective],\n})\nexport class NaturalFixedButtonComponent {\n @Input({required: true}) public icon!: string;\n @Input() public link: RouterLink['routerLink'] = [];\n @Input() public color: ThemePalette = 'accent';\n @Input() public disabled = false;\n}\n","<button [color]=\"color\" [disabled]=\"disabled\" [routerLink]=\"link\" mat-fab>\n <mat-icon [naturalIcon]=\"icon\"></mat-icon>\n</button>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button.component';\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {NaturalFixedButtonComponent} from '../fixed-button/fixed-button.component';\nimport {NgIf} from '@angular/common';\n\ntype Model = {\n id?: string;\n permissions?: {\n delete: boolean;\n };\n};\n\n@Component({\n selector: 'natural-fixed-button-detail',\n templateUrl: './fixed-button-detail.component.html',\n styleUrls: ['./fixed-button-detail.component.scss'],\n standalone: true,\n imports: [NgIf, NaturalFixedButtonComponent, MatTooltipModule],\n})\nexport class NaturalFixedButtonDetailComponent {\n private canChange = true;\n public isCreation = false;\n\n public get model(): Model {\n return this._model;\n }\n\n @Input({required: true})\n public set model(value: Model) {\n this._model = value;\n if (this.canChange) {\n this.isCreation = !this._model.id;\n this.canChange = false;\n }\n }\n\n private _model!: Model;\n\n @Input({required: true}) public form!: FormGroup;\n\n @Output() public readonly create = new EventEmitter<void>();\n @Output() public readonly delete = new EventEmitter<void>();\n\n public constructor(route: ActivatedRoute) {\n route.params.pipe(takeUntilDestroyed()).subscribe(() => (this.canChange = true));\n }\n\n public clickCreate(): void {\n if (this.form.enabled) {\n this.create.emit();\n }\n }\n\n public clickDelete(): void {\n if (this.form.enabled) {\n this.delete.emit();\n }\n }\n}\n","<natural-fixed-button\n (click)=\"clickCreate()\"\n *ngIf=\"isCreation\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'accent' : 'warn'\"\n class=\"detail-speed-dial\"\n icon=\"save\"\n></natural-fixed-button>\n\n<natural-fixed-button\n (click)=\"clickDelete()\"\n *ngIf=\"!isCreation && (!model.permissions || model.permissions.delete)\"\n [disabled]=\"form.disabled\"\n class=\"detail-speed-dial\"\n color=\"warn\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer définitivement\"\n matTooltipPosition=\"left\"\n></natural-fixed-button>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button-detail.component';\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {clone, defaults} from 'lodash-es';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {OrganizedModelSelection} from '../hierarchic-selector/hierarchic-selector.service';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalHierarchicSelectorComponent} from '../hierarchic-selector/hierarchic-selector.component';\n\nexport interface HierarchicDialogResult {\n hierarchicSelection?: OrganizedModelSelection;\n searchSelections?: NaturalSearchSelections | null;\n}\n\nexport interface HierarchicDialogConfig {\n /**\n * Configuration to setup rules of hierarchy\n */\n hierarchicConfig: NaturalHierarchicConfiguration[];\n\n /**\n * Selected items when HierarchicComponent initializes\n */\n hierarchicSelection?: OrganizedModelSelection;\n\n /**\n * Filters to apply on queries (when opening new level of hierarchy)\n */\n hierarchicFilters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Multiple selection if true or single selection if false\n */\n multiple?: boolean;\n\n /**\n * Allow to validate selection with no items checked\n */\n allowUnselect?: boolean;\n\n /**\n * Facets for natural-search in HierarchicComponent\n */\n searchFacets?: NaturalSearchFacets;\n\n /**\n * Selections of natural search to initialize on HierarchicComponent initialisation\n */\n searchSelections?: NaturalSearchSelections | null;\n}\n\n@Component({\n templateUrl: './hierarchic-selector-dialog.component.html',\n styleUrls: ['./hierarchic-selector-dialog.component.scss'],\n standalone: true,\n imports: [MatDialogModule, NaturalHierarchicSelectorComponent, MatButtonModule],\n})\nexport class NaturalHierarchicSelectorDialogComponent {\n /**\n * Set of hierarchic configurations to pass as attribute to HierarchicComponent\n */\n public config: HierarchicDialogConfig;\n\n /**\n * Natural search selections after initialisation\n */\n public searchSelectionsOutput: NaturalSearchSelections | undefined | null;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: HierarchicDialogConfig,\n private dialogRef: MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult>,\n ) {\n this.config = defaults(data, {multiple: true, allowUnselect: true});\n this.searchSelectionsOutput = this.config.searchSelections;\n }\n\n public close(selected: OrganizedModelSelection | undefined): void {\n const result: HierarchicDialogResult = {\n hierarchicSelection: clone(selected),\n searchSelections: clone(this.searchSelectionsOutput),\n };\n\n this.dialogRef.close(result);\n }\n}\n","<h2 i18n mat-dialog-title>Sélection</h2>\n\n<mat-dialog-content>\n <natural-hierarchic-selector\n (selectionChange)=\"config.hierarchicSelection = $event\"\n [selected]=\"config.hierarchicSelection ?? {}\"\n [config]=\"config.hierarchicConfig\"\n [filters]=\"config.hierarchicFilters\"\n [multiple]=\"config.multiple ?? false\"\n [allowUnselect]=\"config.allowUnselect ?? true\"\n [searchFacets]=\"config.searchFacets ?? []\"\n [searchSelections]=\"config.searchSelections ?? []\"\n (searchSelectionChange)=\"searchSelectionsOutput = $event\"\n ></natural-hierarchic-selector>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-dialog-close mat-button i18n>Annuler</button>\n <button (click)=\"close(config.hierarchicSelection)\" color=\"primary\" mat-raised-button\n ><span i18n>Valider</span>\n </button>\n</mat-dialog-actions>\n","import {Injectable} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {defaults} from 'lodash-es';\nimport {\n HierarchicDialogConfig,\n HierarchicDialogResult,\n NaturalHierarchicSelectorDialogComponent,\n} from './hierarchic-selector-dialog.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorDialogService {\n public constructor(private readonly dialog: MatDialog) {}\n\n public open(\n hierarchicConfig: HierarchicDialogConfig,\n dialogConfig?: MatDialogConfig,\n ): MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult> {\n const defaultDialogConfig = {\n width: '700px',\n data: hierarchicConfig,\n };\n\n return this.dialog.open<\n NaturalHierarchicSelectorDialogComponent,\n HierarchicDialogConfig,\n HierarchicDialogResult\n >(NaturalHierarchicSelectorDialogComponent, defaults(dialogConfig, defaultDialogConfig));\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './classes/hierarchic-configuration';\nexport * from './classes/hierarchic-filters-configuration';\nexport * from './hierarchic-selector/hierarchic-selector.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nexport * from './hierarchic-selector/hierarchic-selector.service';\n","import {APP_INITIALIZER, inject, Provider} from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {NATURAL_ICONS_CONFIG, NaturalIconsConfig} from './icon.directive';\n\n/**\n * Configure Material Symbols, instead of Material Icons, and configure custom Natural icons\n */\nexport function provideIcons(config: NaturalIconsConfig): Provider[] {\n return [\n {\n provide: NATURAL_ICONS_CONFIG,\n useValue: config,\n },\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: (): (() => void) => {\n const iconRegistry = inject(MatIconRegistry);\n return () => {\n // Replace the old Material Icons by the new Material Symbols\n // This means that `https://fonts.googleapis.com/icon?family=Material+Icons` must be\n // replaced by `https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@1`\n const defaultFontSetClasses = iconRegistry.getDefaultFontSetClass();\n const outlinedFontSetClasses = defaultFontSetClasses\n .filter(fontSetClass => fontSetClass !== 'material-icons')\n .concat(['material-symbols-outlined']);\n iconRegistry.setDefaultFontSetClass(...outlinedFontSetClasses);\n };\n },\n },\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './icon.directive';\nexport {provideIcons} from './icon.module';\n","import {ComponentType} from '@angular/cdk/portal';\nimport {InjectionToken, Injector} from '@angular/core';\nimport {UrlSegment} from '@angular/router';\nimport {Literal} from '../../types/types';\nimport {Observable} from 'rxjs';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {LinkableObject} from '../../services/link-mutation.service';\n\n/**\n * Kind of snapshot of the instance of a panel activated route\n */\nexport interface NaturalPanelsRouteConfig {\n segments: UrlSegment[];\n path: string;\n}\n\n/**\n * Config required to manage url and instantiate component correctly\n */\nexport interface NaturalPanelConfig {\n component: ComponentType<NaturalAbstractPanel>;\n injector: Injector | null;\n resolve: NaturalPanelResolves;\n params: Literal;\n rule: NaturalPanelsRouterRule;\n route: NaturalPanelsRouteConfig;\n}\n\n/**\n * Data provided to instantiated components in context of a panel/dialog\n */\nexport interface NaturalPanelData {\n config: NaturalPanelConfig;\n data: Literal;\n\n /**\n * Related objects that should be linked to the object shown in the panel after its creation\n */\n linkableObjects: LinkableObject[];\n}\n\n/**\n * Similar to Angular functional resolver interface, but simpler for our panels' needs\n */\ntype NaturalPanelResolve<T> = (route: NaturalPanelConfig) => Observable<T>;\nexport type NaturalPanelResolves = {[key: string]: NaturalPanelResolve<unknown>};\n/**\n * Configuration for a route\n */\nexport interface NaturalPanelsRouterRule {\n path: string;\n component: ComponentType<NaturalAbstractPanel>;\n resolve?: NaturalPanelResolves;\n}\n\nexport interface NaturalPanelsBeforeOpenPanel {\n itemData: NaturalPanelData;\n panelConfig: NaturalPanelConfig;\n fullPanelsConfig: NaturalPanelConfig[];\n resolvedResult: any; // todo : Generic or NaturalAbstractModelService\n}\n\nexport interface NaturalPanelsHooksConfig {\n beforeOpenPanel?: (\n injector: Injector,\n naturalPanelsBeforeOpenPanel: NaturalPanelsBeforeOpenPanel,\n ) => NaturalPanelData;\n}\n\n// Array of NaturalPanelsRouterRule\nexport type NaturalPanelsRoutesConfig = Array<NaturalPanelsRouterRule>;\n\nexport const PanelsHooksConfig = new InjectionToken<NaturalPanelsHooksConfig>('NaturalPanelsHooksConfig');\n","import {Provider} from '@angular/core';\nimport {NaturalPanelsHooksConfig, PanelsHooksConfig} from './types';\n\nexport function providePanels(hooks: NaturalPanelsHooksConfig): Provider[] {\n return [\n {\n provide: PanelsHooksConfig,\n useValue: hooks,\n },\n ];\n}\n","import {Injector} from '@angular/core';\nimport {Route, UrlMatcher, UrlMatchResult, UrlSegment, UrlSegmentGroup} from '@angular/router';\nimport {flatten, merge} from 'lodash-es';\nimport {NaturalPanelConfig, NaturalPanelsRouterRule} from './types';\nimport {Literal} from '../../types/types';\n\nfunction getConsumedSegments(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): UrlSegment[] {\n return flatten(getStackConfig(segments, routes).map(conf => conf.route.segments));\n}\n\n/**\n * Return a list of items specifying the component, the service and the optional id of url segments\n */\nexport function getStackConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig[] {\n if (!routes) {\n return [];\n }\n\n const comp = getComponentConfig(segments, routes, injector);\n\n if (comp) {\n return [comp].concat(getStackConfig(segments.slice(comp.route.segments.length), routes, injector));\n }\n\n return [];\n}\n\n/**\n * Returns an object with a component class, a service and an optional id from current and next url segments\n */\nfunction getComponentConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig | null {\n if (!segments.length) {\n return null;\n }\n\n // For each config\n for (const routeConfig of routes) {\n const params: Literal = {};\n const configSegments = routeConfig.path.split('/');\n let match = true;\n\n // For each current url segment\n for (let i = 0; i < segments.length; i++) {\n if (!configSegments[i]) {\n match = false;\n break;\n }\n\n // If find variable, store it\n if (configSegments[i].indexOf(':') > -1 && +segments[i].path > 0) {\n params[configSegments[i].replace(':', '')] = segments[i].path;\n } else if (configSegments[i] !== segments[i].path) {\n // If segments are different, url does not match\n match = false;\n break;\n }\n }\n\n if (match) {\n const matrixParams = segments.reduce((groupedParams, segment) => {\n return merge(groupedParams, segment.parameters);\n }, {});\n\n return {\n component: routeConfig.component,\n injector: injector,\n resolve: routeConfig.resolve ?? {},\n params: merge(params, matrixParams),\n rule: routeConfig,\n route: {\n segments: segments,\n path: segments.map(s => s.path).join('/'),\n },\n };\n }\n }\n\n if (segments.length > 1) {\n return getComponentConfig(segments.slice(0, -1), routes, injector);\n }\n\n return null;\n}\n\nexport const naturalPanelsUrlMatcher: UrlMatcher = (\n segments: UrlSegment[],\n group: UrlSegmentGroup,\n route: Route,\n): UrlMatchResult | null => {\n const matchedSegments = getConsumedSegments(segments, route.data ? route.data.panelsRoutes : []);\n\n if (matchedSegments.length) {\n return {consumed: matchedSegments};\n }\n\n return null;\n};\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Inject, Injectable, Injector, runInInjectionContext} from '@angular/core';\nimport {MediaObserver} from '@ngbracket/ngx-layout';\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\nimport {ActivatedRoute, DefaultUrlSerializer, NavigationError, Router, UrlSegment} from '@angular/router';\nimport {differenceWith, flatten, isEqual} from 'lodash-es';\nimport {forkJoin, Observable, of, Subject, Subscription} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {getStackConfig} from './panels.urlmatcher';\nimport {\n NaturalPanelConfig,\n NaturalPanelData,\n NaturalPanelsBeforeOpenPanel,\n NaturalPanelsHooksConfig,\n NaturalPanelsRouterRule,\n PanelsHooksConfig,\n} from './types';\n\nfunction segmentsToString(segments: UrlSegment[]): string {\n return segments.map(s => s.toString()).join('/');\n}\n\nfunction compareConfigs(a: NaturalPanelConfig, b: NaturalPanelConfig): boolean {\n return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);\n}\n\n/**\n * TODO: implement route update when closing dialog with escape\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPanelsService {\n /**\n * Because of this static property Panels are **not** compatible with SSR.\n * And we cannot make it non-static, because `UrlMatcher` cannot be injected.\n */\n private static _opened = false;\n public static get opened(): boolean {\n return this._opened;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing\n */\n public afterAllClosed = new Subject<void>();\n /**\n * Cache for panels counter. Works more like an ID.\n * Is used to give an unique identifier to multiple similar panels configurations\n */\n private counter = 1;\n /**\n * Class applied to dialog overlay related with panels\n * If change, change CSS too\n */\n private panelClass = 'panel';\n\n /**\n * Cache for panels setup before navigation change.\n * Used to detect panels openings/closings and adapt for new configuration\n */\n private oldFullConfig: NaturalPanelConfig[] = [];\n\n /**\n * Cache for subscription stop\n */\n private routeSub?: Subscription;\n\n /**\n * Cache for subscription stop\n */\n private navSub?: Subscription;\n\n /**\n * Horizontal gaps between panels\n */\n private panelsOffsetH = 35;\n\n /**\n * Vertical gaps between panels\n */\n private panelsOffsetV = 40;\n\n /**\n * Cache of previous screen size\n * Used to change panels stack orientation on small screens\n */\n private media: string | null = null;\n\n public constructor(\n private readonly router: Router,\n private readonly dialog: MatDialog,\n private readonly injector: Injector,\n @Inject(PanelsHooksConfig) private hooksConfig: NaturalPanelsHooksConfig,\n private mediaService: MediaObserver,\n ) {\n // Watch media to know if display panels horizontally or vertically\n this.mediaService.asObservable().subscribe(medias => {\n for (const media of medias) {\n if (!this.media) {\n this.media = media.mqAlias;\n } else if (this.media !== media.mqAlias) {\n this.media = media.mqAlias;\n this.updateComponentsPosition();\n }\n }\n });\n }\n\n public start(route: ActivatedRoute): void {\n NaturalPanelsService._opened = true;\n this.routeSub = route.url.subscribe(segments => {\n this.updatePanels(segments, route.snapshot.data.panelsRoutes);\n });\n\n this.navSub = this.router.events.subscribe(ev => {\n if (!(ev instanceof NavigationError)) {\n return;\n }\n\n // Abort and propagate navigation error\n if (ev.url.endsWith('/')) {\n this.stop();\n\n // This is a bit hackish: we hardcode an impossible url to trigger normal navigation error mechanism\n this.router.navigateByUrl('panels-reached-invalid-url');\n\n return;\n }\n\n this.counter++;\n\n // pc stands for \"panel counter\", required to give an identification to panels with exact same config\n // E.g /new\n const wantedUrl = ev.url + ';pc=' + this.counter;\n\n // Segments matching from wanted url. E.g ~ ['new']\n const wantedUrSegments = new DefaultUrlSerializer().parse(wantedUrl).root.children.primary.segments;\n\n // Don't match any config\n const wantedConfig = getStackConfig(wantedUrSegments, route.snapshot.data.panelsRoutes, this.injector);\n\n if (wantedConfig.length) {\n return this.appendConfigToCurrentUrl(wantedConfig);\n }\n\n // Currently activated routes. E.g ['objective', 'objective', 123, 'risk']\n const currentSegments = flatten(\n this.dialog.openDialogs.map(d => d.componentInstance.panelData.config.route.segments),\n );\n\n // Last segment. E.g ['risk']\n const lastOfCurrentSegments = currentSegments.slice(-1);\n\n // Config for ['risk', 'new']\n const currentAndWantedConfig = getStackConfig(\n lastOfCurrentSegments.concat(wantedUrSegments),\n route.snapshot.data.panelsRoutes,\n this.injector,\n );\n\n return this.appendConfigToCurrentUrl(currentAndWantedConfig);\n });\n }\n\n /**\n * Uses given configuration to add in the end of current url\n * Neutralizes router error handling\n */\n private appendConfigToCurrentUrl(config: NaturalPanelConfig[]): void {\n const originalErrorHandler = this.router.errorHandler;\n\n // Nullify error handler (will be de-neutralized after route redirection)\n if (config) {\n this.router.errorHandler = () => undefined;\n }\n\n // Navigate to same url + /risk/new Result : /risk/risk/new\n const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');\n\n this.router.navigateByUrl(this.router.url + '/' + newUrl).then(() => {\n // After navigation has ended, restore original error handler because he's not a bad guy\n this.router.errorHandler = originalErrorHandler;\n });\n }\n\n public stop(): void {\n NaturalPanelsService._opened = false;\n this.routeSub?.unsubscribe();\n this.navSub?.unsubscribe();\n this.dialog.closeAll();\n this.oldFullConfig = [];\n this.afterAllClosed.next();\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n */\n public goToPanelByComponent(component: NaturalAbstractPanel): void {\n this.goToPanelByIndex(this.getPanelIndex(component));\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n */\n public goToPenultimatePanel(): void {\n this.goToPanelByIndex(this.dialog.openDialogs.length - 2);\n }\n\n /**\n * Calls the new url that only includes the segments from the panels we want to stay open\n */\n private goToPanelByIndex(index: number): void {\n // Extracts url segments from next panel until last one\n const url = this.dialog.openDialogs\n .slice(index + 1)\n .map(dialog => {\n return segmentsToString(dialog.componentInstance.panelData.config.route.segments);\n })\n .join('/');\n\n // Remove extra segments and redirects to root\n this.router.navigateByUrl(this.router.url.replace('/' + url, ''));\n }\n\n /**\n * Selecting a panel is equivalent to close all those that are in front of him\n * @param index of panel in stack. The most behind (the first one) is 0.\n */\n private selectPanelByIndex(index: number): Observable<void> {\n const lastDialog = this.dialog.openDialogs[this.dialog.openDialogs.length - 1];\n\n // Update new panels set positions\n this.updateComponentsPosition();\n\n for (let i = this.dialog.openDialogs.length - 1; i >= index + 1; i--) {\n this.dialog.openDialogs[i].close();\n }\n\n return lastDialog.afterClosed();\n }\n\n /**\n * Open new panels if url has changed with new segments\n */\n private updatePanels(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): void {\n // Transform url segments into a config with component name and ID if provided in next segment\n // Returns an array of configs, each config represents the content relative to a panel\n const newFullConfig = getStackConfig(segments, routes, this.injector);\n const configsToRemove = differenceWith(this.oldFullConfig, newFullConfig, compareConfigs);\n const configsToAdd = differenceWith(newFullConfig, this.oldFullConfig, compareConfigs);\n\n const indexOfNextPanel = this.oldFullConfig.length - configsToRemove.length - 1;\n\n if (configsToRemove.length && configsToAdd.length) {\n // Add and remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => {\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n });\n } else if (configsToRemove.length && !configsToAdd.length) {\n // only remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => this.updateComponentsPosition());\n } else if (!configsToRemove.length && configsToAdd.length) {\n // only add panels\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n }\n\n this.oldFullConfig = newFullConfig;\n }\n\n /**\n * Resolve all services, then open panels\n */\n private openPanels(\n newItemsConfig: NaturalPanelConfig[],\n fullConfig: NaturalPanelConfig[],\n ): Observable<Observable<any> | null> {\n const subject = new Subject<Observable<any> | null>();\n\n // Resolve everything before opening a single panel\n const resolves = newItemsConfig.map((conf: NaturalPanelConfig) => this.getResolvedData(conf));\n\n // ForkJoin emits when all promises are executed;\n forkJoin(resolves).subscribe(resolvedResult => {\n // For each new config entry, open a new panel\n for (let i = 0; i < newItemsConfig.length; i++) {\n const config = newItemsConfig[i];\n let itemData: NaturalPanelData = {\n // Config of actual panel route\n config: config,\n\n // Data resolved by service\n // Use in component by calling this.panelData.data.xyz\n data: resolvedResult[i],\n linkableObjects: [],\n };\n\n if (this.hooksConfig && this.hooksConfig.beforeOpenPanel) {\n const event: NaturalPanelsBeforeOpenPanel = {\n itemData: itemData,\n panelConfig: config,\n resolvedResult: resolvedResult,\n fullPanelsConfig: fullConfig,\n };\n\n itemData = this.hooksConfig.beforeOpenPanel(this.injector, event);\n }\n\n this.openPanel(config.component, itemData);\n }\n\n this.dialog.openDialogs[this.dialog.openDialogs.length - 1].afterOpened().subscribe(() => {\n subject.next(null);\n });\n });\n\n return subject;\n }\n\n private getResolvedData(config: NaturalPanelConfig): Observable<{[key: string]: unknown}> {\n if (!config.resolve || (config.resolve && Object.keys(config.resolve).length === 0)) {\n return of({});\n }\n\n const resolveKeys = Object.keys(config.resolve);\n const resolvedData: {[key: string]: Observable<unknown>} = {};\n const injector = config.injector;\n\n if (injector) {\n resolveKeys.forEach(key => {\n resolvedData[key] = runInInjectionContext(injector, () => config.resolve[key](config));\n });\n }\n\n return forkJoin(resolvedData).pipe(\n map(result => {\n return (result as any).model || result;\n }),\n );\n }\n\n private openPanel(componentOrTemplateRef: ComponentType<NaturalAbstractPanel>, data: NaturalPanelData): void {\n const conf: MatDialogConfig = {\n panelClass: this.panelClass,\n closeOnNavigation: false,\n hasBackdrop: this.dialog.openDialogs.length === 0,\n height: '100%',\n width: '960px',\n position: {\n top: '0',\n right: '0',\n },\n };\n\n const dialogRef = this.dialog.open<NaturalAbstractPanel>(componentOrTemplateRef, conf);\n\n // Panelisable interface attributes/functions\n dialogRef.componentInstance.initPanel(data);\n\n dialogRef.beforeClosed().subscribe(() => {\n const index = this.getPanelIndex(dialogRef.componentInstance);\n this.goToPanelByIndex(index - 1);\n });\n }\n\n /**\n * Return panel position (index) by searching matching component\n */\n private getPanelIndex(component: NaturalAbstractPanel): number {\n if (!component) {\n return -1;\n }\n\n return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);\n }\n\n /**\n * Repositions panels from start until given index\n */\n private updateComponentsPosition(): void {\n if (!this.dialog.openDialogs.length) {\n return;\n }\n\n // Select the panels that are still opened, ignore the others because they'll be closed\n const affectedElements = this.dialog.openDialogs;\n\n for (let i = 0; i < affectedElements.length; i++) {\n const dialog = affectedElements[i];\n\n // Set all panels as \"hidden\" except last one. IsFrontPanel attribute causes a CSS that hides body via hostbinding\n dialog.componentInstance.isFrontPanel = i === affectedElements.length - 1;\n dialog.componentInstance.panelService = this;\n\n // Assign offset\n const deep = affectedElements.length - 1 - i;\n\n let position: any = {right: deep * this.panelsOffsetH + 'px'};\n if (this.media === 'xs' && affectedElements.length > 1) {\n position = {\n top: i * this.panelsOffsetV + 'px',\n right: '0px',\n };\n }\n\n dialog.updatePosition(position);\n }\n }\n}\n","import {Component, OnDestroy} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n@Component({\n selector: 'natural-panels',\n template: '',\n standalone: true,\n})\nexport class NaturalPanelsComponent implements OnDestroy {\n // PanelsComponent is kind of a \"ghost\" component to respond to an url matcher in route config,\n // An UrlMatcher (matcher attribute) is required to catch urls with an undefined number of params in url after a given param /panels/\n public constructor(private readonly panelsService: NaturalPanelsService, route: ActivatedRoute) {\n this.panelsService.start(route);\n }\n\n public ngOnDestroy(): void {\n this.panelsService.stop();\n }\n}\n","import {UrlMatcher, UrlMatchResult, UrlSegment} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n/**\n * Url fallback matcher to be used instead of `path: '**'` when Panel system\n * is used in the project.\n */\nexport const fallbackIfNoOpenedPanels: UrlMatcher = (segments: UrlSegment[]): UrlMatchResult | null => {\n if (!NaturalPanelsService.opened) {\n return {consumed: segments};\n }\n\n return null;\n};\n","/*\n * Public API Surface of natural\n */\n\nexport {providePanels} from './panels.module';\nexport * from './panels.component';\nexport * from './panels.service';\nexport {naturalPanelsUrlMatcher} from './panels.urlmatcher';\nexport {fallbackIfNoOpenedPanels} from './fallback-if-no-opened-panels.urlmatcher';\nexport * from './abstract-panel';\nexport * from './types';\n","import {\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {PageEvent, MatPaginatorModule} from '@angular/material/paginator';\nimport {forkJoin, tap} from 'rxjs';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {NaturalDataSource, PaginatedData} from '../../classes/data-source';\nimport {NaturalQueryVariablesManager, PaginationInput, QueryVariables} from '../../classes/query-variable-manager';\nimport {HierarchicFiltersConfiguration} from '../../modules/hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {LinkableObject, NaturalLinkMutationService} from '../../services/link-mutation.service';\nimport {NaturalHierarchicConfiguration} from '../hierarchic-selector/classes/hierarchic-configuration';\nimport {HierarchicDialogConfig} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nimport {NaturalHierarchicSelectorDialogService} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nimport {NaturalSelectComponent} from '../select/select/select.component';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractModelService} from '../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall} from '../../types/types';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatTableModule} from '@angular/material/table';\nimport {NgIf, NgTemplateOutlet} from '@angular/common';\n\n/**\n * Custom template usage :\n * <natural-relations [main]=\"owner\" [service]=\"svc\" [filter]=\"{}\" placeholder=\"Select an item\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-relations>\n */\n\n@Component({\n selector: 'natural-relations',\n templateUrl: './relations.component.html',\n styleUrls: ['./relations.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatTableModule,\n NgTemplateOutlet,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n NaturalIconDirective,\n MatPaginatorModule,\n MatProgressSpinnerModule,\n NaturalSelectComponent,\n ],\n})\nexport class NaturalRelationsComponent<\n TService extends NaturalAbstractModelService<\n unknown,\n any,\n PaginatedData<LinkableObject>,\n QueryVariables,\n unknown,\n any,\n unknown,\n any,\n unknown,\n any\n >,\n >\n extends NaturalAbstractController\n implements OnInit, OnChanges, OnDestroy\n{\n @ViewChild(NaturalSelectComponent) private select?: NaturalSelectComponent<TService>;\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<unknown>;\n\n @Input() public service?: TService;\n\n /**\n * The placeholder used in the button to add a new relation\n */\n @Input() public placeholder = '';\n\n /**\n * Filter for autocomplete selector\n */\n @Input() public autocompleteSelectorFilter?: ExtractVall<TService>['filter'] | null | undefined;\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n @Input() public displayWith?: (item: ExtractTallOne<TService> | null) => string;\n\n /**\n * Whether the relations can be changed\n */\n @Input() public disabled = false;\n\n /**\n * The main object to which all relations belong to\n */\n @Input({required: true}) public main!: LinkableObject & {permissions?: {update: boolean}};\n\n /**\n * Emits after relations were successfully added on the server\n */\n @Output() public readonly selectionChange = new EventEmitter<void>();\n\n /**\n * Filters for hierarchic selector\n */\n @Input() public hierarchicSelectorFilters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Configuration in case we prefer hierarchic selection over autocomplete selection\n */\n @Input() public hierarchicSelectorConfig?: NaturalHierarchicConfiguration[];\n\n /**\n * Link mutation semantic\n */\n @Input() public otherName?: string | null;\n\n /**\n * Listing service instance\n */\n public dataSource?: NaturalDataSource<PaginatedData<LinkableObject>>;\n public loading = false;\n\n /**\n * Table columns\n */\n public displayedColumns = ['name'];\n\n public readonly pageSizeOptions = [5, 25, 50, 100];\n protected readonly defaultPagination = {\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Observable variables/options for listing service usage and apollo watchQuery\n */\n private variablesManager: NaturalQueryVariablesManager<QueryVariables> = new NaturalQueryVariablesManager();\n\n public readonly removing = new Set<LinkableObject>();\n\n public constructor(\n private readonly linkMutationService: NaturalLinkMutationService,\n private readonly hierarchicSelectorDialog: NaturalHierarchicSelectorDialogService,\n ) {\n super();\n }\n\n /**\n * The filter used to filter relations\n *\n * So if the relations are from one action -> to many objectives, then the filter must filter\n * the objectives that have indeed a relation to the particular action.\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter']) {\n this.variablesManager.set('relations-filter', {filter: filter});\n }\n\n public ngOnInit(): void {\n this.pagination();\n\n // Force disabled if cannot update object\n if (this.main && this.main.permissions) {\n this.disabled = this.disabled || !this.main.permissions.update;\n }\n }\n\n public ngOnChanges(): void {\n if (this.service) {\n this.queryItems();\n }\n\n if (this.disabled && this.displayedColumns.indexOf('unlink') > -1) {\n this.displayedColumns.pop();\n } else if (!this.disabled && this.displayedColumns.indexOf('unlink') === -1) {\n this.displayedColumns.push('unlink');\n }\n }\n\n /**\n * Unlink action\n * Refetch result to display it in table\n */\n public removeRelation(relation: LinkableObject): void {\n this.removing.add(relation);\n\n this.linkMutationService\n .unlink(this.main, relation, this.otherName)\n .pipe(finalize(() => this.removing.delete(relation)))\n .subscribe(() => this.dataSource?.remove(relation));\n }\n\n /**\n * Link action\n * Refetch result to display it in table\n * TODO : could maybe use \"update\" attribute of apollo.mutate function to update table faster (but hard to do it here)\n */\n public addRelations(relations: (LinkableObject | ExtractTallOne<TService> | string | null)[]): void {\n const observables = relations\n .filter((relation): relation is LinkableObject => !!relation && typeof relation === 'object')\n .map(relation => this.linkMutationService.link(this.main, relation, this.otherName));\n\n forkJoin(observables).subscribe(() => {\n this.selectionChange.emit();\n this.select?.clear();\n });\n }\n\n public pagination(event?: PageEvent): void {\n let pagination: PaginationInput | null = null;\n if (\n event &&\n (event.pageIndex !== this.defaultPagination.pageIndex || event.pageSize !== this.defaultPagination.pageSize)\n ) {\n pagination = {\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n };\n }\n\n this.variablesManager.set('pagination', {pagination: pagination ? pagination : this.defaultPagination});\n }\n\n public getDisplayFn(): (item: ExtractTallOne<TService> | null) => string {\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return (item: any) => (item ? item.fullName || item.name : '');\n }\n\n public openNaturalHierarchicSelector(): void {\n const selectAtKey = this.getSelectKey();\n\n if (!selectAtKey || !this.hierarchicSelectorConfig) {\n return;\n }\n\n const selected = {};\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: this.hierarchicSelectorConfig,\n hierarchicSelection: selected,\n hierarchicFilters: this.hierarchicSelectorFilters,\n multiple: true,\n };\n\n this.hierarchicSelectorDialog\n .open(hierarchicConfig)\n .afterClosed()\n .subscribe(result => {\n if (result && result.hierarchicSelection !== undefined) {\n const selection = result.hierarchicSelection[selectAtKey];\n if (selection.length) {\n this.addRelations(selection);\n }\n }\n });\n }\n\n /**\n * Get list from database\n */\n private queryItems(): void {\n if (!this.service) {\n return;\n }\n\n this.loading = true;\n const queryRef = this.service.watchAll(this.variablesManager).pipe(\n takeUntil(this.ngUnsubscribe),\n tap({\n next: () => (this.loading = false),\n complete: () => (this.loading = false),\n error: () => (this.loading = false),\n }),\n );\n this.dataSource = new NaturalDataSource(queryRef);\n }\n\n private getSelectKey(): string | undefined {\n if (!this.hierarchicSelectorConfig) {\n return;\n }\n\n return this.hierarchicSelectorConfig.filter(c => !!c.selectableAtKey)[0].selectableAtKey;\n }\n}\n","<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" class=\"natural-row-click\" mat-table>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultNameCell\"\n ></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n <button\n *ngIf=\"!disabled\"\n (click)=\"removeRelation(element)\"\n [disabled]=\"removing.has(element)\"\n color=\"warn\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n >\n <mat-icon naturalIcon=\"link_off\"></mat-icon>\n </button>\n </td>\n </ng-container>\n </table>\n\n <mat-paginator\n (page)=\"pagination($event)\"\n *ngIf=\"dataSource?.data && (dataSource?.data?.length || 0) > (dataSource?.data?.pageSize || 0)\"\n [length]=\"dataSource?.data?.length || 0\"\n [pageIndex]=\"dataSource?.data?.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource?.data?.pageSize || 0\"\n ></mat-paginator>\n\n <div *ngIf=\"!loading && dataSource?.data?.length === 0\" class=\"margin-v mat-body\">\n <span i18n>Aucun résultat</span>\n </div>\n\n <mat-progress-spinner *ngIf=\"loading\" [diameter]=\"40\" class=\"loading\" mode=\"indeterminate\"></mat-progress-spinner>\n</div>\n\n<natural-select\n (selectionChange)=\"addRelations([$event])\"\n *ngIf=\"!hierarchicSelectorConfig && service && !disabled\"\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter\"\n [placeholder]=\"placeholder\"\n [service]=\"service\"\n [showIcon]=\"false\"\n></natural-select>\n\n<div *ngIf=\"hierarchicSelectorConfig && !disabled\">\n <button (click)=\"openNaturalHierarchicSelector()\" color=\"primary\" mat-flat-button>{{ placeholder }}</button>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './relations.component';\n","import {Component, Input, OnInit, Optional, Self} from '@angular/core';\nimport {ControlValueAccessor, NgControl, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {IEnum, NaturalEnumService} from '../../../services/enum.service';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {NaturalCapitalizePipe} from '../../common/pipes/capitalize.pipe';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgIf, NgFor, AsyncPipe} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\ntype V = IEnum['value'] | IEnum['value'][];\n\n@Component({\n selector: 'natural-select-enum',\n templateUrl: './select-enum.component.html',\n styleUrls: ['./select-enum.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n ReactiveFormsModule,\n NgIf,\n MatOptionModule,\n NgFor,\n AsyncPipe,\n NaturalCapitalizePipe,\n ],\n})\nexport class NaturalSelectEnumComponent extends AbstractSelect<V, V> implements OnInit, ControlValueAccessor {\n /**\n * The name of the enum type, eg: `\"ActionStatus\"`\n */\n @Input({required: true}) public enumName!: string;\n\n /**\n * If given an extra option is added to select `null` with given label\n */\n @Input() public nullLabel?: string;\n\n /**\n * Functions that receives an enum value and returns whether that value is disabled\n */\n @Input() public optionDisabled?: (item: IEnum) => boolean;\n\n /**\n * Whether the user should be allowed to select multiple options\n */\n @Input() public multiple = false;\n\n public items?: Observable<IEnum[]>;\n\n public constructor(\n private readonly enumService: NaturalEnumService,\n @Optional() @Self() ngControl: NgControl | null,\n ) {\n super(ngControl);\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.items = this.enumService.get(this.enumName);\n }\n\n public getDisplayFn(): (item: V | null) => string {\n throw new Error('This should never be called');\n }\n}\n","<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n <mat-select\n (selectionChange)=\"propagateValue($event.value)\"\n [formControl]=\"internalCtrl\"\n (blur)=\"onBlur()\"\n [errorStateMatcher]=\"matcher\"\n [multiple]=\"multiple\"\n >\n <mat-option *ngIf=\"nullLabel\" [value]=\"null\">{{ nullLabel }}</mat-option>\n <mat-option\n *ngFor=\"let item of items | async\"\n [value]=\"item.value\"\n [disabled]=\"optionDisabled ? optionDisabled(item) : false\"\n >\n {{ item.name | capitalize }}\n </mat-option>\n </mat-select>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error></mat-form-field\n>\n","import {Component, Input, OnDestroy, OnInit, Optional, Self} from '@angular/core';\nimport {ControlValueAccessor, NgControl, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatDialogConfig} from '@angular/material/dialog';\nimport {Literal} from '../../../types/types';\nimport {HierarchicFiltersConfiguration} from '../../hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {\n HierarchicDialogConfig,\n NaturalHierarchicConfiguration,\n NaturalHierarchicSelectorDialogService,\n OrganizedModelSelection,\n} from '../../hierarchic-selector/public-api';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {NgIf} from '@angular/common';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nfunction defaultDisplayFn(item: Literal | null): string {\n if (!item) {\n return '';\n }\n\n return item.fullName || item.name || item.iban || item.id || item;\n}\n\n/**\n * Default usage:\n * <natural-select [config]=\"myConfig\" [(ngModel)]=\"amazingModel\"\n * (ngModelChange)=amazingChangeFn($event)></natural-select>\n *\n * [(ngModel)] and (ngModelChange) are optional\n *\n * Placeholder :\n * <natural-select placeholder=\"amazing placeholder\">\n */\n@Component({\n selector: 'natural-select-hierarchic',\n templateUrl: './select-hierarchic.component.html',\n styleUrls: ['./select-hierarchic.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n ReactiveFormsModule,\n NgIf,\n MatIconModule,\n NaturalIconDirective,\n MatButtonModule,\n MatTooltipModule,\n RouterLink,\n ],\n})\nexport class NaturalSelectHierarchicComponent\n extends AbstractSelect<Literal, string>\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n /**\n * If provided cause a new select button to appear\n */\n @Input() public selectLabel?: string;\n\n /**\n * Configuration for hierarchic relations\n *\n * It should be an array with at least one element with `selectableAtKey` configured, otherwise the selector will never open.\n */\n @Input() public config: NaturalHierarchicConfiguration[] | null = null;\n\n /**\n * Filters formatted for hierarchic selector\n */\n @Input() public filters?: HierarchicFiltersConfiguration;\n\n /**\n * The selected value as an object. The internal value is `internalCtrl.value`, and that is a string.\n */\n private value: Literal | null = null;\n\n /**\n * On Firefox, the combination of <input (focus)> event and dialog opening cause some strange bug where focus event is called multiple\n * times This prevents it.\n */\n private lockOpenDialog = false;\n\n public constructor(\n private readonly hierarchicSelectorDialogService: NaturalHierarchicSelectorDialogService,\n @Optional() @Self() ngControl: NgControl | null,\n ) {\n super(ngControl);\n }\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: Literal | null) => string {\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return defaultDisplayFn;\n }\n\n /**\n * Override parent because our internalCtrl store the textual representation as string instead of raw Literal\n */\n public override writeValue(value: Literal | string | null): void {\n this.value = value as Literal;\n this.internalCtrl.setValue(this.getDisplayFn()(this.value));\n }\n\n public openDialog(): void {\n if (this.internalCtrl.disabled) {\n return;\n }\n\n if (this.lockOpenDialog) {\n return;\n }\n\n const selectAtKey = this.getSelectKey();\n if (!selectAtKey || !this.config) {\n return;\n }\n\n this.lockOpenDialog = true;\n\n if (this.onTouched) {\n this.onTouched();\n }\n\n const selected: OrganizedModelSelection = {};\n\n if (this.internalCtrl.value) {\n selected[selectAtKey] = [this.value];\n }\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: this.config,\n hierarchicSelection: selected,\n hierarchicFilters: this.filters,\n multiple: false,\n };\n\n const dialogFocus: MatDialogConfig = {restoreFocus: false};\n\n this.hierarchicSelectorDialogService\n .open(hierarchicConfig, dialogFocus)\n .afterClosed()\n .subscribe(result => {\n this.lockOpenDialog = false;\n if (result && result.hierarchicSelection) {\n const selection = result.hierarchicSelection;\n // Find the only selection amongst all possible keys\n const keyWithSelection = Object.keys(selection).find(key => selection[key][0]);\n const singleSelection = keyWithSelection ? selection[keyWithSelection][0] : null;\n\n this.writeValue(singleSelection);\n this.propagateValue(singleSelection);\n }\n });\n }\n\n public showSelectButton(): boolean {\n return !!(this.internalCtrl?.enabled && this.selectLabel && this.getSelectKey());\n }\n\n private getSelectKey(): string | undefined {\n return this.config?.filter(c => !!c.selectableAtKey)[0]?.selectableAtKey;\n }\n}\n","<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <!-- Input for hierarchical selector -->\n <input\n (blur)=\"blur.emit()\"\n (focus)=\"openDialog()\"\n [formControl]=\"internalCtrl\"\n [errorStateMatcher]=\"matcher\"\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n />\n\n <!-- Meta data -->\n <mat-icon *ngIf=\"showIcon\" [naturalIcon]=\"icon\" matIconPrefix></mat-icon>\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matIconSuffix>\n <button\n (click)=\"clear(); $event.stopPropagation()\"\n *ngIf=\"internalCtrl.value && internalCtrl.enabled && !clearLabel\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Désélectionner\"\n >\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.value && navigateTo\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\"></mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error>\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n<div *ngIf=\"showSelectButton() || showClearButton()\" class=\"external-buttons\">\n <button (click)=\"openDialog()\" *ngIf=\"showSelectButton()\" color=\"primary\" mat-flat-button>{{ selectLabel }}</button>\n <button (click)=\"clear()\" *ngIf=\"showClearButton()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './select-enum/select-enum.component';\nexport * from './select-hierarchic/select-hierarchic.component';\nexport * from './select/select.component';\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavStackService {\n /**\n * The stack of all currently living sidenavs\n */\n private readonly sidenavs: NaturalSidenavContainerComponent[] = [];\n\n /**\n * Emits the most recent living SidenavContainer whenever it changes. So it's\n * either the SidenavContainer that was just added, or the one \"before\" the\n * SidenavContainer that was just removed\n */\n public readonly currentSidenav = new Subject<NaturalSidenavContainerComponent | undefined>();\n\n /**\n * For internal use only\n * @internal\n */\n public register(sidenav: NaturalSidenavContainerComponent): void {\n const exists = this.sidenavs.some(s => s.name === sidenav.name);\n\n // Prevent duplicated name, and so on local storage or further access conflicts\n if (exists) {\n throw new Error('Duplicated side nav name: ' + sidenav.name);\n }\n\n this.sidenavs.push(sidenav);\n this.next();\n }\n\n /**\n * For internal use only\n * @internal\n */\n public unregister(sidenav: NaturalSidenavContainerComponent): void {\n const index = this.sidenavs.indexOf(sidenav);\n if (index === -1) {\n throw Error('Trying to remove a SidenavContainer that was never registered');\n }\n\n this.sidenavs.splice(index, 1);\n this.next();\n }\n\n private next(): void {\n this.currentSidenav.next(this.sidenavs[this.sidenavs.length - 1]);\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {MediaObserver} from '@ngbracket/ngx-layout';\nimport {MatDrawer, MatDrawerContainer, MatDrawerMode} from '@angular/material/sidenav';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\nimport {NaturalStorage, SESSION_STORAGE} from '../common/services/memory-storage';\nimport {NaturalSidenavStackService} from './sidenav-stack.service';\n\n/**\n * Assert that given value is not null\n */\nfunction assert<T>(value: T): asserts value {\n if (!value) {\n throw new Error('Must call NaturalSidenavService.init() before using the service');\n }\n}\n\n/**\n * @TODO : Fix nav minimize and maximize resize\n * Since Material 2 beta 10, when nav is resized the body is not resized\n * https://github.com/angular/material2/issues/6743\n * Maybe the better is to wait next release\n */\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavService extends NaturalAbstractController {\n /**\n * Navigation modes\n * First is for desktop view\n * Second is for mobile view\n */\n private modes: MatDrawerMode[] = ['side', 'push'];\n\n /**\n * Activated mode\n * Default to desktop view\n */\n private mode: MatDrawerMode = this.modes[0];\n\n /**\n * Wherever is nav is opened or not\n */\n private opened = true;\n\n /**\n * Stores the opened status during mobile view, to restore if we come back to desktop view\n */\n private tmpOpened: boolean = this.opened;\n\n /**\n * Wherever is nav is minimized or not\n */\n private minimized = false;\n\n /**\n * LocalStorage key that stores the minimized status\n */\n private readonly minimizedStorageKey = 'menu-minimized';\n\n /**\n * LocalStorage key that stores the opened status\n */\n private readonly openedStorageKey = 'menu-opened';\n\n private minimizedStorageKeyWithName: string | null = null;\n private openedStorageKeyWithName: string | null = null;\n\n public constructor(\n public readonly mediaObserver: MediaObserver,\n private readonly router: Router,\n @Inject(SESSION_STORAGE) private readonly sessionStorage: NaturalStorage,\n private readonly naturalSidenavStackService: NaturalSidenavStackService,\n ) {\n super();\n }\n\n public get activeMode(): MatDrawerMode {\n return this.mode;\n }\n\n public get isOpened(): boolean {\n return this.opened;\n }\n\n public get isMinimized(): boolean {\n return this.minimized;\n }\n\n public destroy(component: NaturalSidenavContainerComponent): void {\n this.naturalSidenavStackService.unregister(component);\n }\n\n public init(\n name: string,\n container: MatDrawerContainer,\n drawer: MatDrawer,\n component: NaturalSidenavContainerComponent,\n autoClose = false,\n ): void {\n if (!name || name === '') {\n throw new Error('No sidenav name provided, use <natural-sidenav-container name=\"menu\">');\n }\n\n this.naturalSidenavStackService.register(component);\n\n this.minimizedStorageKeyWithName = name + '-' + this.minimizedStorageKey;\n this.openedStorageKeyWithName = name + '-' + this.openedStorageKey;\n\n // Init from LocalStorage\n this.minimized = this.getMinimizedStatus();\n this.opened = this.getMenuOpenedStatus();\n this.tmpOpened = this.opened;\n\n let oldIsBig: boolean | null = null;\n this.mediaObserver\n .asObservable()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n const isBig = !this.isMobileView();\n this.mode = isBig ? this.modes[0] : this.modes[1];\n\n if (oldIsBig === null || isBig !== oldIsBig) {\n oldIsBig = isBig;\n\n // If decrease window size, save status of menu before closing it\n if (!isBig) {\n this.tmpOpened = this.opened;\n this.opened = false;\n }\n\n // If increase window size, and sidebar was open before, re-open it.\n if (isBig && this.tmpOpened) {\n this.opened = true;\n this.minimized = this.getMinimizedStatus();\n }\n }\n });\n\n if (autoClose) {\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(e => e instanceof NavigationEnd),\n )\n .subscribe(() => {\n this.navItemClicked();\n });\n }\n }\n\n public isMobileView(): boolean {\n return !this.mediaObserver.isActive('gt-sm');\n }\n\n /**\n * Close nav on mobile view after a click\n */\n public navItemClicked(): void {\n if (this.isMobileView()) {\n this.close();\n }\n }\n\n /**\n * Change minimized status and stores the new value\n */\n public setMinimized(value: boolean): void {\n this.minimized = value;\n assert(this.minimizedStorageKeyWithName);\n this.sessionStorage.setItem(this.minimizedStorageKeyWithName, value ? 'true' : 'false');\n }\n\n public minimize(): void {\n this.setMinimized(true);\n }\n\n public expand(): void {\n this.setMinimized(false);\n }\n\n public toggleMinimized(): void {\n this.setMinimized(!this.minimized);\n }\n\n /**\n * Get the stored minimized status\n */\n public getMinimizedStatus(): boolean {\n assert(this.minimizedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.minimizedStorageKeyWithName);\n\n return value === null ? false : value === 'true';\n }\n\n /**\n * Get the stored opened status\n * Default on an opened status if nothing is stored\n */\n public getMenuOpenedStatus(): boolean {\n assert(this.openedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.openedStorageKeyWithName);\n\n return value === null || value === 'true';\n }\n\n /**\n * Toggle menu but expand it if mobile mode is activated\n * Stores the status in local storage\n */\n public toggle(): void {\n this.setOpened(!this.opened);\n }\n\n public close(): void {\n this.setOpened(false);\n }\n\n public open(): void {\n this.setOpened(true);\n }\n\n public setOpened(value: boolean): void {\n this.opened = value;\n\n if (this.opened && this.isMobileView()) {\n this.minimized = false;\n } else if (!this.isMobileView()) {\n assert(this.openedStorageKeyWithName);\n this.sessionStorage.setItem(this.openedStorageKeyWithName, this.opened ? 'true' : 'false');\n }\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav',\n template: '<ng-content></ng-content>',\n standalone: true,\n})\nexport class NaturalSidenavComponent {}\n","import {Component, HostBinding, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {MatDrawer, MatSidenav, MatSidenavContainer, MatSidenavModule} from '@angular/material/sidenav';\nimport {NaturalSidenavService} from '../sidenav.service';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'natural-sidenav-container',\n templateUrl: './sidenav-container.component.html',\n styleUrls: ['./sidenav-container.component.scss'],\n providers: [NaturalSidenavService],\n standalone: true,\n imports: [MatSidenavModule, NgClass],\n})\nexport class NaturalSidenavContainerComponent implements OnInit, OnDestroy {\n /**\n * Unique identifier used for the local storage\n */\n @Input({required: true}) public name!: string;\n\n /**\n * The side that the drawer is attached to\n */\n @Input() public position: MatDrawer['position'] = 'start';\n\n /**\n * If true listens to route changes to close side nav after a route change if mobile view is active\n * Actually a navigation to current route does not emit a route change, and the sidenav don't close.\n */\n @Input() public mobileAutoClose = true;\n\n /**\n * Width of the minimized menu\n */\n @Input() public minimizedWidth = 150;\n\n /**\n * If true, prevents \"native\" material sidenav to scroll at container level and delegates the scroll responsability to the transcluded\n * content\n */\n @HostBinding('attr.no-scroll') @Input() public noScroll = false;\n\n /**\n * Inner \"native\" material sidenav container\n */\n @ViewChild(MatSidenavContainer, {static: true}) private menuContainer!: MatSidenavContainer;\n\n /**\n * Inner \"native\" material sidenav\n */\n @ViewChild(MatSidenav, {static: true}) private menuSidenav!: MatSidenav;\n\n public constructor(public readonly sidenavService: NaturalSidenavService) {}\n\n public get isMinimized(): boolean {\n return this.sidenavService.isMinimized;\n }\n\n public get isMobileView(): boolean {\n return this.sidenavService.isMobileView();\n }\n\n public ngOnInit(): void {\n this.sidenavService.init(this.name, this.menuContainer, this.menuSidenav, this, this.mobileAutoClose);\n }\n\n public ngOnDestroy(): void {\n this.sidenavService.destroy(this);\n }\n\n public toggle(): void {\n this.sidenavService.toggle();\n }\n\n public close(): void {\n this.sidenavService.close();\n }\n\n public open(): void {\n this.sidenavService.open();\n }\n\n public minimize(): void {\n this.sidenavService.minimize();\n }\n\n public expand(): void {\n this.sidenavService.expand();\n }\n\n public toggleMinimized(): void {\n this.sidenavService.toggleMinimized();\n }\n}\n","<mat-sidenav-container (backdropClick)=\"sidenavService.setOpened(false)\">\n <mat-sidenav\n [mode]=\"sidenavService.activeMode\"\n [ngClass]=\"sidenavService.isMinimized ? 'menuMinimized' : ''\"\n [opened]=\"sidenavService.isOpened\"\n [style.min-width.px]=\"sidenavService.isMinimized && minimizedWidth ? minimizedWidth : null\"\n [style.width.px]=\"sidenavService.isMinimized && minimizedWidth ? minimizedWidth : null\"\n [position]=\"position\"\n >\n <ng-content select=\"natural-sidenav\"></ng-content>\n </mat-sidenav>\n\n <mat-sidenav-content>\n <div>\n <ng-content select=\"natural-sidenav-content\"></ng-content>\n </div>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav-content',\n template: '<ng-content></ng-content>',\n styleUrls: ['./sidenav-content.component.scss'],\n standalone: true,\n})\nexport class NaturalSidenavContentComponent {}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './sidenav.service';\nexport * from './sidenav-stack.service';\nexport * from './sidenav/sidenav.component';\nexport * from './sidenav-container/sidenav-container.component';\nexport * from './sidenav-content/sidenav-content.component';\n","import {Component, Input} from '@angular/core';\nimport {NameOrFullName} from '../../types/types';\nimport {NaturalTimeAgoPipe} from '../common/pipes/time-ago.pipe';\nimport {NaturalSwissDatePipe} from '../common/pipes/swiss-date.pipe';\nimport {NgIf} from '@angular/common';\n\ntype Stamped = {\n creator: NameOrFullName | null;\n updater: NameOrFullName | null;\n creationDate: string | null;\n updateDate: string | null;\n};\n\n@Component({\n selector: 'natural-stamp',\n templateUrl: './stamp.component.html',\n standalone: true,\n imports: [NgIf, NaturalSwissDatePipe, NaturalTimeAgoPipe],\n})\nexport class NaturalStampComponent {\n @Input({required: true}) public item!: Stamped;\n\n public showUpdate(): boolean {\n const same =\n this.item.updater?.id === this.item.creator?.id &&\n this.item.updateDate &&\n this.item.updateDate === this.item.creationDate;\n\n return !same && (!!this.item.updateDate || !!this.item.updater);\n }\n}\n","<ng-container *ngIf=\"item\">\n <div *ngIf=\"item.creationDate || item.creator\">\n <span class=\"mat-subtitle-2\" i18n>Création</span>\n :\n <span *ngIf=\"item.creator\">{{ item.creator.fullName || item.creator.name }}</span>\n <span *ngIf=\"item.creator && item.creationDate\">,&nbsp;</span>\n <span *ngIf=\"item.creationDate\">{{ item.creationDate | swissDate }} ({{ item.creationDate | timeAgo }})</span>\n </div>\n\n <div *ngIf=\"showUpdate()\">\n <span class=\"mat-subtitle-2\" i18n>Modification</span>\n :\n <span *ngIf=\"item.updater\">{{ item.updater.fullName || item.updater.name }}</span>\n <span *ngIf=\"item.updater && item.updateDate\">,&nbsp;</span>\n <span *ngIf=\"item.updateDate\">{{ item.updateDate | swissDate }} ({{ item.updateDate | timeAgo }})</span>\n </div>\n</ng-container>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './stamp.component';\n","import {Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation} from '@angular/core';\nimport {Params, QueryParamsHandling, RouterLink} from '@angular/router';\nimport {ThemePalette} from '@angular/material/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {NgIf} from '@angular/common';\n\n/**\n * Button that fits well in a `<mat-table>` and support either\n * route navigation via `navigate`, or external URL via `href`,\n * or callback via `buttonClick`.\n *\n * If neither `navigate` nor `href` nor `buttonClick` have a meaningful value, then\n * it will show the icon and/or label in a `<span>` instead of a button.\n *\n * External URL will always be opened in new tab.\n */\n@Component({\n selector: 'natural-table-button',\n templateUrl: './table-button.component.html',\n styleUrls: ['./table-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, MatIconModule, NaturalIconDirective, MatButtonModule, RouterLink],\n})\nexport class NaturalTableButtonComponent implements OnChanges {\n @Input() public queryParams: Params = {};\n @Input() public queryParamsHandling: QueryParamsHandling = '';\n @Input() public label?: string | null;\n @Input() public icon?: string | null;\n @Input() public href?: string | null;\n @Input() public navigate: RouterLink['routerLink'] = [];\n @Input() public fragment?: string | undefined;\n @Input() public preserveFragment = false;\n @Input() public disabled = false;\n @Input() public raised = false;\n @Input() public color: ThemePalette;\n @Output() public readonly buttonClick = new EventEmitter<MouseEvent>();\n public type: 'routerLink' | 'href' | 'click' | 'none' = 'none';\n\n public ngOnChanges(): void {\n if (this.navigate?.length || Object.keys(this.queryParams).length) {\n this.type = 'routerLink';\n } else if (this.href) {\n this.type = 'href';\n } else if (this.buttonClick.observed) {\n this.type = 'click';\n } else {\n this.type = 'none';\n }\n }\n}\n","<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a *ngIf=\"type === 'click' && !label\" (click)=\"buttonClick.emit($event)\" [disabled]=\"disabled\" mat-icon-button>\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n\n<ng-container *ngIf=\"raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'click' && !label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './table-button.component';\n","/*\n * Public API Surface of natural\n */\n\nexport * from './dialog-trigger.component';\n","/**\n * A creator interface used to instantiate source implementation\n */\nexport type SourceCreator = new (sourceValue: string) => Source;\n\n/**\n * Contract of all Sources.\n * Every source must implements the fetch method\n * in order to provide the avatar source.\n */\nexport abstract class Source {\n public constructor(private readonly value: string) {\n this.value = value;\n }\n\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Gets the avatar that usually is a URL, but,\n * for example it can also be a string of initials from the name.\n */\n public abstract getAvatar(size: number): string;\n\n /**\n * Whether the avatar is purely textual or an URL for an image\n */\n public abstract isTextual(): boolean;\n}\n","export function md5(string: string): string {\n const x = convertToWordArray(utf8Encode(string));\n const S11 = 7;\n const S12 = 12;\n const S13 = 17;\n const S14 = 22;\n const S21 = 5;\n const S22 = 9;\n const S23 = 14;\n const S24 = 20;\n const S31 = 4;\n const S32 = 11;\n const S33 = 16;\n const S34 = 23;\n const S41 = 6;\n const S42 = 10;\n const S43 = 15;\n const S44 = 21;\n\n let a = 0x67452301;\n let b = 0xefcdab89;\n let c = 0x98badcfe;\n let d = 0x10325476;\n\n for (let k = 0; k < x.length; k += 16) {\n const AA = a;\n const BB = b;\n const CC = c;\n const DD = d;\n\n a = FF(a, b, c, d, x[k], S11, 0xd76aa478);\n d = FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756);\n c = FF(c, d, a, b, x[k + 2], S13, 0x242070db);\n b = FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee);\n a = FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf);\n d = FF(d, a, b, c, x[k + 5], S12, 0x4787c62a);\n c = FF(c, d, a, b, x[k + 6], S13, 0xa8304613);\n b = FF(b, c, d, a, x[k + 7], S14, 0xfd469501);\n a = FF(a, b, c, d, x[k + 8], S11, 0x698098d8);\n d = FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af);\n c = FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1);\n b = FF(b, c, d, a, x[k + 11], S14, 0x895cd7be);\n a = FF(a, b, c, d, x[k + 12], S11, 0x6b901122);\n d = FF(d, a, b, c, x[k + 13], S12, 0xfd987193);\n c = FF(c, d, a, b, x[k + 14], S13, 0xa679438e);\n b = FF(b, c, d, a, x[k + 15], S14, 0x49b40821);\n a = GG(a, b, c, d, x[k + 1], S21, 0xf61e2562);\n d = GG(d, a, b, c, x[k + 6], S22, 0xc040b340);\n c = GG(c, d, a, b, x[k + 11], S23, 0x265e5a51);\n b = GG(b, c, d, a, x[k], S24, 0xe9b6c7aa);\n a = GG(a, b, c, d, x[k + 5], S21, 0xd62f105d);\n d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);\n c = GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681);\n b = GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8);\n a = GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6);\n d = GG(d, a, b, c, x[k + 14], S22, 0xc33707d6);\n c = GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87);\n b = GG(b, c, d, a, x[k + 8], S24, 0x455a14ed);\n a = GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905);\n d = GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8);\n c = GG(c, d, a, b, x[k + 7], S23, 0x676f02d9);\n b = GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a);\n a = HH(a, b, c, d, x[k + 5], S31, 0xfffa3942);\n d = HH(d, a, b, c, x[k + 8], S32, 0x8771f681);\n c = HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122);\n b = HH(b, c, d, a, x[k + 14], S34, 0xfde5380c);\n a = HH(a, b, c, d, x[k + 1], S31, 0xa4beea44);\n d = HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9);\n c = HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60);\n b = HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70);\n a = HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6);\n d = HH(d, a, b, c, x[k], S32, 0xeaa127fa);\n c = HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085);\n b = HH(b, c, d, a, x[k + 6], S34, 0x4881d05);\n a = HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039);\n d = HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5);\n c = HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8);\n b = HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665);\n a = II(a, b, c, d, x[k], S41, 0xf4292244);\n d = II(d, a, b, c, x[k + 7], S42, 0x432aff97);\n c = II(c, d, a, b, x[k + 14], S43, 0xab9423a7);\n b = II(b, c, d, a, x[k + 5], S44, 0xfc93a039);\n a = II(a, b, c, d, x[k + 12], S41, 0x655b59c3);\n d = II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92);\n c = II(c, d, a, b, x[k + 10], S43, 0xffeff47d);\n b = II(b, c, d, a, x[k + 1], S44, 0x85845dd1);\n a = II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f);\n d = II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0);\n c = II(c, d, a, b, x[k + 6], S43, 0xa3014314);\n b = II(b, c, d, a, x[k + 13], S44, 0x4e0811a1);\n a = II(a, b, c, d, x[k + 4], S41, 0xf7537e82);\n d = II(d, a, b, c, x[k + 11], S42, 0xbd3af235);\n c = II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb);\n b = II(b, c, d, a, x[k + 9], S44, 0xeb86d391);\n\n a = addUnsigned(a, AA);\n b = addUnsigned(b, BB);\n c = addUnsigned(c, CC);\n d = addUnsigned(d, DD);\n }\n\n const result = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);\n\n return result.toLowerCase();\n}\n\nfunction addUnsigned(lX: number, lY: number): number {\n const lX8 = lX & 0x80000000;\n const lY8 = lY & 0x80000000;\n const lX4 = lX & 0x40000000;\n const lY4 = lY & 0x40000000;\n const lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);\n\n if (lX4 & lY4) {\n return lResult ^ 0x80000000 ^ lX8 ^ lY8;\n }\n\n if (lX4 | lY4) {\n if (lResult & 0x40000000) {\n return lResult ^ 0xc0000000 ^ lX8 ^ lY8;\n } else {\n return lResult ^ 0x40000000 ^ lX8 ^ lY8;\n }\n } else {\n return lResult ^ lX8 ^ lY8;\n }\n}\n\nfunction rotateLeft(lValue: number, iShiftBits: number): number {\n return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\n}\n\nfunction F(x: number, y: number, z: number): number {\n return (x & y) | (~x & z);\n}\n\nfunction G(x: number, y: number, z: number): number {\n return (x & z) | (y & ~z);\n}\n\nfunction H(x: number, y: number, z: number): number {\n return x ^ y ^ z;\n}\n\nfunction I(x: number, y: number, z: number): number {\n return y ^ (x | ~z);\n}\n\nfunction FF(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction GG(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction HH(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction II(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction convertToWordArray(string: string): number[] {\n let lWordCount: number;\n const lMessageLength: number = string.length;\n const lNumberOfWords_temp1: number = lMessageLength + 8;\n const lNumberOfWords_temp2: number = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;\n const lNumberOfWords: number = (lNumberOfWords_temp2 + 1) * 16;\n const lWordArray: number[] = Array(lNumberOfWords - 1);\n let lBytePosition = 0;\n let lByteCount = 0;\n\n while (lByteCount < lMessageLength) {\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n lBytePosition = (lByteCount % 4) * 8;\n lWordArray[lWordCount] = lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition);\n lByteCount++;\n }\n\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n lBytePosition = (lByteCount % 4) * 8;\n lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\n lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\n lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\n\n return lWordArray;\n}\n\nfunction wordToHex(lValue: number): string {\n let WordToHexValue = '';\n let WordToHexValue_temp = '';\n let lByte: number;\n let lCount: number;\n\n for (lCount = 0; lCount <= 3; lCount++) {\n lByte = (lValue >>> (lCount * 8)) & 255;\n WordToHexValue_temp = '0' + lByte.toString(16);\n WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);\n }\n\n return WordToHexValue;\n}\n\nfunction utf8Encode(string: string): string {\n let utftext = '';\n let c: number;\n\n string = string.replace(/\\r\\n/g, '\\n');\n\n for (let n = 0; n < string.length; n++) {\n c = string.charCodeAt(n);\n\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n } else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n\n return utftext;\n}\n","import {Source} from './source';\nimport {md5} from '../service/md5';\n\nfunction isRetina(): boolean {\n // We cannot reasonably inject `DOCUMENT` here, but we are extra\n // careful about usage of `window` and its possible non-existence in SSR,\n // so we should be fine.\n // eslint-disable-next-line no-restricted-globals\n const myWindow: Window | undefined = window;\n\n if (myWindow?.devicePixelRatio > 1.25) {\n return true;\n }\n\n const mediaQuery =\n '(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n\n return !!myWindow?.matchMedia(mediaQuery).matches;\n}\n\n/**\n * Return URL to Gravatar image from either an email or a MD5\n */\nexport class Gravatar extends Source {\n public getAvatar(size: number): string {\n const value = this.getValue();\n const hash = value.match('^[a-f0-9]{32}$') ? value : md5(value.trim().toLowerCase()).toString();\n\n const avatarSize = isRetina() ? size * 2 : size;\n return `https://secure.gravatar.com/avatar/${hash}?s=${avatarSize}&d=404`;\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Source} from './source';\n\n/**\n * Iterates a person's name string to get the initials of each word in uppercase.\n */\nfunction getInitials(name: string, size: number): string {\n name = name.trim();\n\n if (!name) {\n return '';\n }\n\n let words: string[] = name.split(' ');\n\n if (size && size < words.length) {\n words = words.slice(0, size);\n }\n\n return words\n .filter(element => element.length > 0)\n .map(element => element[0])\n .join('')\n .toUpperCase();\n}\n\n/**\n * Return the initials of the given value as avatar\n */\nexport class Initials extends Source {\n public getAvatar(size: number): string {\n return getInitials(this.getValue(), size);\n }\n\n public isTextual(): boolean {\n return true;\n }\n}\n","import {Source} from './source';\n\n/**\n * Return custom image URL as avatar\n */\nexport class Image extends Source {\n public getAvatar(): string {\n return this.getValue();\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Source, SourceCreator} from '../sources/source';\nimport {Gravatar} from '../sources/gravatar';\nimport {Initials} from '../sources/initials';\nimport {Image} from '../sources/image';\nimport {NaturalAvatarComponent} from '../component/avatar.component';\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AvatarService {\n /**\n * Ordered pairs of possible sources. First in list is the highest priority.\n * And key must match one the input of AvatarComponent.\n */\n private readonly sourceCreators = new Map<keyof NaturalAvatarComponent, SourceCreator>([\n ['gravatar', Gravatar],\n ['image', Image],\n ['initials', Initials],\n ]);\n\n private readonly avatarColors = [\n '#1abc9c',\n '#3498db',\n '#f1c40f',\n '#8e44ad',\n '#e74c3c',\n '#d35400',\n '#2c3e50',\n '#7f8c8d',\n ];\n\n private readonly failedSources = new Map<string, Source>();\n\n public getRandomColor(avatarText: string): string {\n if (!avatarText) {\n return 'transparent';\n }\n const asciiCodeSum = this.calculateAsciiCode(avatarText);\n\n return this.avatarColors[asciiCodeSum % this.avatarColors.length];\n }\n\n public getCreators(): IterableIterator<[keyof NaturalAvatarComponent, SourceCreator]> {\n return this.sourceCreators.entries();\n }\n\n private getSourceKey(source: Source): string {\n return source.constructor.name + '-' + source.getValue();\n }\n\n public sourceHasFailedBefore(source: Source): boolean {\n return this.failedSources.has(this.getSourceKey(source));\n }\n\n public markSourceAsFailed(source: Source): void {\n this.failedSources.set(this.getSourceKey(source), source);\n }\n\n private calculateAsciiCode(value: string): number {\n return value\n .split('')\n .map(letter => letter.charCodeAt(0))\n .reduce((previous, current) => previous + current);\n }\n}\n","import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';\n\nimport {Source} from '../sources/source';\nimport {AvatarService} from '../service/avatar.service';\nimport {NgStyle, NgIf} from '@angular/common';\n\ntype Style = Partial<CSSStyleDeclaration>;\n\n/**\n * Show an avatar from different sources\n */\n@Component({\n selector: 'natural-avatar',\n styles: [\n `\n :host {\n border-radius: 50%;\n }\n `,\n ],\n template: `\n <div class=\"avatar-container\" [ngStyle]=\"hostStyle\">\n <img\n *ngIf=\"avatarSrc\"\n [src]=\"avatarSrc\"\n [width]=\"size\"\n [height]=\"size\"\n [ngStyle]=\"avatarStyle\"\n (error)=\"tryNextSource()\"\n class=\"avatar-content\"\n loading=\"lazy\"\n />\n <div *ngIf=\"avatarText\" class=\"avatar-content\" [ngStyle]=\"avatarStyle\">\n {{ avatarText }}\n </div>\n </div>\n `,\n standalone: true,\n imports: [NgStyle, NgIf],\n})\nexport class NaturalAvatarComponent implements OnChanges {\n @Input() public image?: string | null;\n @Input() public initials?: string | null;\n @Input() public gravatar?: string | null;\n\n @Input() public size = 50;\n @Input() public textSizeRatio = 3;\n @Input() public bgColor: string | undefined;\n @Input() public fgColor = '#FFF';\n @Input() public borderRadius = '';\n @Input() public textMaximumLength = 0;\n\n public avatarSrc: string | null = null;\n public avatarText: string | null = null;\n public avatarStyle: Style = {};\n public hostStyle: Style = {};\n\n private currentIndex = -1;\n private sources: Source[] = [];\n\n public constructor(private readonly avatarService: AvatarService) {}\n\n /**\n * Detect inputs change\n */\n public ngOnChanges(changes: SimpleChanges): void {\n this.sources.length = 0;\n for (const [propName, creator] of this.avatarService.getCreators()) {\n if (!changes[propName]) {\n continue;\n }\n\n const currentValue = changes[propName].currentValue;\n if (currentValue && typeof currentValue === 'string') {\n this.sources.push(new creator(currentValue));\n }\n }\n\n // reinitialize the avatar component when a source property value has changed\n // the fallback system must be re-invoked with the new values.\n this.initializeAvatar();\n }\n\n /**\n * Fetch avatar source\n */\n public tryNextSource(): void {\n const previousSource = this.sources[this.currentIndex];\n if (previousSource) {\n this.avatarService.markSourceAsFailed(previousSource);\n }\n\n const source = this.findNextSource();\n if (!source) {\n this.clearAvatar();\n return;\n }\n\n if (source.isTextual()) {\n this.buildTextAvatar(source);\n } else {\n this.buildImageAvatar(source);\n }\n }\n\n private findNextSource(): Source | null {\n while (++this.currentIndex < this.sources.length) {\n const source = this.sources[this.currentIndex];\n if (source && !this.avatarService.sourceHasFailedBefore(source)) {\n return source;\n }\n }\n\n return null;\n }\n\n /**\n * Initialize the avatar component and its fallback system\n */\n private initializeAvatar(): void {\n this.currentIndex = -1;\n if (this.sources.length > 0) {\n this.tryNextSource();\n this.hostStyle = {\n width: this.size + 'px',\n height: this.size + 'px',\n };\n }\n }\n\n private clearAvatar(): void {\n this.avatarSrc = null;\n this.avatarText = null;\n this.avatarStyle = {};\n }\n\n private buildTextAvatar(avatarSource: Source): void {\n this.clearAvatar();\n this.avatarText = avatarSource.getAvatar(+this.textMaximumLength);\n this.avatarStyle = this.getTextualStyle(avatarSource.getValue());\n }\n\n private buildImageAvatar(avatarSource: Source): void {\n this.clearAvatar();\n this.avatarSrc = avatarSource.getAvatar(+this.size);\n this.avatarStyle = this.getImageStyle();\n }\n\n /**\n * Returns initials style\n */\n private getTextualStyle(avatarValue: string): Style {\n return {\n textAlign: 'center',\n borderRadius: this.borderRadius || '100%',\n textTransform: 'uppercase',\n color: this.fgColor,\n backgroundColor: this.bgColor ? this.bgColor : this.avatarService.getRandomColor(avatarValue),\n font: Math.floor(+this.size / this.textSizeRatio) + 'px Helvetica, Arial, sans-serif',\n lineHeight: this.size + 'px',\n };\n }\n\n /**\n * Returns image style\n */\n private getImageStyle(): Style {\n return {\n maxWidth: '100%',\n borderRadius: this.borderRadius || '100%',\n width: this.size + 'px',\n height: this.size + 'px',\n };\n }\n}\n","/*\n * Public API Surface of ngx-avatar\n */\nexport * from './component/avatar.component';\nexport * from './service/avatar.service';\n","import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\nimport {Subscription} from 'rxjs';\nimport {Title} from '@angular/platform-browser';\n\n/**\n * Incomplete list of Matomo functions. But it should be enough\n * for our basic needs.\n *\n * To complete this list, maybe see https://developer.matomo.org/guides/tracking-javascript-guide\n */\ntype MatomoFunction =\n | 'setCustomUrl'\n | 'setCustomDimension'\n | 'setDocumentTitle'\n | 'setReferrerUrl'\n | 'setSiteId'\n | 'setTrackerUrl'\n | 'trackPageView';\n\nexport type PaqItem = [MatomoFunction, ...(number | string | null)[]];\n\ninterface Paq {\n push: (item: PaqItem) => void;\n}\n\n/**\n * Service to track visitors via Matomo.\n *\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMatomoService {\n private subscription: Subscription | null = null;\n private readonly isBrowser: boolean;\n private readonly window: WindowProxy & typeof globalThis & {_paq?: Paq};\n private referrerUrl = '';\n\n public constructor(\n private readonly router: Router,\n @Inject(DOCUMENT) private readonly document: Document,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) public readonly platformId: Object,\n private readonly titleService: Title,\n ) {\n this.isBrowser = isPlatformBrowser(platformId);\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not init MatomoService `window` is undefined');\n }\n\n this.window = window;\n }\n\n /**\n * Inject Matomo script and start tracking all page navigation\n */\n public startTracking(url: string | null, site: number | null): void {\n // Abort because no tracking info or doing SSR\n if (!url || !site || !this.isBrowser) {\n return;\n }\n\n this.push('setTrackerUrl', url + '/matomo.php');\n this.push('setSiteId', site);\n\n this.injectTrackingCode(url);\n this.listenForRouteChanges();\n }\n\n public stopTracking(): void {\n this.subscription?.unsubscribe();\n this.subscription = null;\n delete this.window._paq;\n }\n\n /**\n * Push a Matomo command on the stack\n *\n * It can be called at any time, including before Matomo is even loaded.\n *\n * Also see https://developer.matomo.org/guides/tracking-javascript-guide\n */\n public push(functionName: PaqItem[0], ...args: PaqItem[1][]): void {\n if (!this.window._paq) {\n this.window._paq = [] as any[];\n }\n\n // Here we must always get `_paq` freshly from window, because Matomo\n // might have changed the object after we created it\n this.window._paq.push([functionName, ...args]);\n }\n\n private injectTrackingCode(url: string): void {\n try {\n const script = this.document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = url + '/matomo.js';\n this.document.head.appendChild(script);\n } catch (ex) {\n console.error('Error appending Matomo analytics');\n console.error(ex);\n }\n }\n\n private listenForRouteChanges(): void {\n this.subscription = this.router.events.subscribe(event => {\n if (!(event instanceof NavigationEnd)) {\n return;\n }\n\n const currentUrl = this.window.location.href;\n\n this.push('setCustomUrl', currentUrl);\n this.push('setDocumentTitle', this.titleService.getTitle());\n if (this.referrerUrl) {\n this.push('setReferrerUrl', this.referrerUrl);\n }\n\n this.push('trackPageView');\n\n this.referrerUrl = currentUrl;\n });\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalMatomoService} from './matomo.service';\n","import {DOCUMENT} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {ErrorHandler, Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {catchError, EMPTY, first, Observable, of} from 'rxjs';\n\nexport interface NaturalLoggerType {\n message: string;\n stacktrace?: string;\n href?: string;\n host?: string;\n path?: string;\n agent?: string;\n status?: number;\n referrer?: string;\n url?: string;\n userId?: string;\n user?: string;\n\n [key: string]: any;\n}\n\nexport interface NaturalLoggerExtra {\n /**\n * Return an observable of extra data that will be logged. Those data will be merged into\n * the original data, and so it can override things.\n *\n * Only the first emitted value will be used.\n */\n getExtras(error: unknown): Observable<Partial<NaturalLoggerType>>;\n}\n\nexport const NaturalLoggerConfigUrl = new InjectionToken<string>('Absolute URL of the log server');\nexport const NaturalLoggerConfigExtra = new InjectionToken<NaturalLoggerExtra>(\n 'Class that may provide extra data to log',\n);\n\n/**\n * Replace Angular's error handler to also send the log to a remote server via HTTP POST.\n *\n * Usage is automatic as soon as we provide it via:\n *\n * ```ts\n * provideErrorHandler('http://example.com', ExtraService),\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalErrorHandler extends ErrorHandler {\n public constructor(\n private readonly http: HttpClient,\n @Inject(DOCUMENT) private readonly document: Document,\n @Optional() @Inject(NaturalLoggerConfigUrl) private readonly url: string,\n @Optional() @Inject(NaturalLoggerConfigExtra) private readonly loggerExtra?: NaturalLoggerExtra,\n ) {\n super();\n }\n\n public override handleError(error: any): void {\n console.error(error);\n\n const params: NaturalLoggerType = {\n message: this.toMessage(error),\n href: this.document.defaultView?.window.location.href,\n host: this.document.defaultView?.window.location.hostname,\n path: this.document.defaultView?.window.location.pathname,\n agent: this.document.defaultView?.window.navigator.userAgent,\n level: 'error',\n };\n\n if (error?.stack) {\n params.stacktrace = error.stack;\n }\n\n if (typeof error?.status !== 'undefined') {\n params.status = error.status;\n }\n\n if (error?.referrer) {\n params.referrer = error.referrer;\n }\n\n if (error?.url) {\n params.url = error.url;\n }\n\n if (this.loggerExtra) {\n this.loggerExtra\n .getExtras(error)\n .pipe(\n catchError(e => of({getExtrasErrorMessage: this.toMessage(e)})),\n first(),\n )\n .subscribe(result => {\n this.postLog(Object.assign(params, result));\n });\n } else {\n this.postLog(params);\n }\n }\n\n private toMessage(error: any): string {\n if (error && typeof error === 'object' && 'message' in error) {\n return '' + error.message;\n } else {\n return '' + error;\n }\n }\n\n /**\n * Send parameters to remote log\n */\n private postLog(params: NaturalLoggerType): void {\n if (this.url) {\n this.http\n .post(this.url, params, {headers: new HttpHeaders().set('content-type', 'application/json')})\n .pipe(catchError(() => EMPTY))\n .subscribe();\n }\n }\n}\n","import {ErrorHandler, Provider, Type} from '@angular/core';\nimport {\n NaturalErrorHandler,\n NaturalLoggerConfigExtra,\n NaturalLoggerConfigUrl,\n NaturalLoggerExtra,\n} from './error-handler';\n\nexport function provideErrorHandler(url: string | null, extraService?: Type<NaturalLoggerExtra>): Provider[] {\n const providers: Provider[] = [\n {\n provide: ErrorHandler,\n useClass: NaturalErrorHandler,\n },\n {\n provide: NaturalLoggerConfigUrl,\n useValue: url,\n },\n ];\n\n if (extraService) {\n providers.push({\n provide: NaturalLoggerConfigExtra,\n useClass: extraService,\n });\n }\n\n return providers;\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {provideErrorHandler} from './error.module';\n\nexport {\n NaturalErrorHandler,\n NaturalLoggerConfigExtra,\n NaturalLoggerConfigUrl,\n NaturalLoggerExtra,\n NaturalLoggerType,\n} from './error-handler';\n","import {Directive, HostListener, Input} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\nimport {NaturalAbstractController} from '../classes/abstract-controller';\n\n/**\n * Need to add http:// prefix if we don't have prefix already AND we don't have part of it\n */\nexport function ensureHttpPrefix(value: string | null): string | null {\n if (!value) {\n return value;\n }\n\n const completePrefix = /^(https?):\\/\\//i.test(value);\n const startingPrefix = 'https://'.indexOf(value) === 0 || 'http://'.indexOf(value) === 0;\n\n if (!completePrefix && !startingPrefix) {\n return 'http://' + value;\n } else {\n return value;\n }\n}\n\n/**\n * This directive only supports ReactiveForms due to ngModel/ngControl encapsulation and changes emissions.\n */\n@Directive({\n selector: '[naturalHttpPrefix]',\n standalone: true,\n})\nexport class NaturalHttpPrefixDirective extends NaturalAbstractController {\n @Input() public naturalHttpPrefix: AbstractControl | null = null;\n\n public constructor() {\n super();\n }\n\n @HostListener('ngModelChange', ['$event'])\n public httpize($event: string): void {\n if (this.naturalHttpPrefix) {\n const newValue = ensureHttpPrefix($event) || $event;\n if ($event !== newValue) {\n this.naturalHttpPrefix.setValue(newValue);\n }\n }\n }\n}\n","import {ApplicationConfig, importProvidersFrom} from '@angular/core';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {localStorageProvider, sessionStorageProvider} from '../modules/common/services/memory-storage';\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\n\n/**\n * Minimal, global providers for Natural to work\n */\nexport const naturalProviders: ApplicationConfig['providers'] = [\n importProvidersFrom([MatDialogModule, MatSnackBarModule]),\n sessionStorageProvider,\n localStorageProvider,\n];\n","// Load `$localize` onto the global scope - to be able to use that function to translate strings in components/services.\nimport '@angular/localize/init';\n\n/*\n * Public API Surface of natural\n */\n\nexport * from './lib/classes/abstract-controller';\nexport * from './lib/classes/abstract-detail';\nexport * from './lib/classes/abstract-editable-list';\nexport * from './lib/classes/abstract-list';\nexport * from './lib/classes/abstract-navigable-list';\nexport {hasFilesAndProcessDate, isMutation} from './lib/classes/apollo-utils';\nexport * from './lib/classes/data-source';\nexport * from './lib/classes/query-variable-manager';\nexport * from './lib/classes/rxjs';\nexport * from './lib/classes/utility';\nexport * from './lib/classes/validators';\nexport {validTlds} from './lib/classes/tld';\n\nexport * from './lib/services/abstract-model.service';\nexport {NaturalDebounceService} from './lib/services/debounce.service';\nexport * from './lib/services/enum.service';\nexport * from './lib/services/link-mutation.service';\nexport {NaturalPersistenceService, NATURAL_PERSISTENCE_VALIDATOR} from './lib/services/persistence.service';\nexport * from './lib/services/swiss-parsing-date-adapter.service';\n\nexport * from './lib/types/types';\n\nexport * from './lib/modules/alert/public-api';\nexport * from './lib/modules/columns-picker/public-api';\nexport * from './lib/modules/common/public-api';\nexport * from './lib/modules/detail-header/public-api';\nexport * from './lib/modules/dropdown-components/public-api';\nexport * from './lib/modules/file/public-api';\nexport * from './lib/modules/fixed-button/public-api';\nexport * from './lib/modules/fixed-button-detail/public-api';\nexport * from './lib/modules/hierarchic-selector/public-api';\nexport * from './lib/modules/icon/public-api';\nexport * from './lib/modules/panels/public-api';\nexport * from './lib/modules/relations/public-api';\nexport * from './lib/modules/search/public-api';\nexport * from './lib/modules/select/public-api';\nexport * from './lib/modules/sidenav/public-api';\nexport * from './lib/modules/stamp/public-api';\nexport * from './lib/modules/table-button/public-api';\nexport * from './lib/modules/dialog-trigger/public-api';\nexport * from './lib/modules/avatar/public-api';\nexport * from './lib/modules/matomo/public-api';\nexport * from './lib/modules/logger/public-api';\n\nexport * from './lib/directives/http-prefix.directive';\nexport {naturalProviders} from './lib/classes/providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","switchMap","i3","i1","merge","first","debounceTime","take","shareReplay","map","i4","i6","i7","i1.NaturalEnumService","i5","i8","i9","InvalidWithValueStateMatcher","i1.NaturalDropdownRef","i1.NaturalDropdownService","i1.NaturalHierarchicSelectorService","tap","i1.NaturalPanelsService","i1.NaturalLinkMutationService","i2.NaturalHierarchicSelectorDialogService","i1.NaturalHierarchicSelectorDialogService","i3.NaturalSidenavStackService","i1.NaturalSidenavService","i1.AvatarService"],"mappings":"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,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,E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"}
1
+ {"version":3,"file":"ecodev-natural.mjs","sources":["../../../projects/natural/src/lib/classes/abstract-controller.ts","../../../projects/natural/src/lib/modules/alert/confirm.component.ts","../../../projects/natural/src/lib/modules/alert/confirm.component.html","../../../projects/natural/src/lib/modules/alert/alert.service.ts","../../../projects/natural/src/lib/modules/panels/abstract-panel.ts","../../../projects/natural/src/lib/classes/utility.ts","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.types.ts","../../../projects/natural/src/lib/classes/query-variable-manager-utils.ts","../../../projects/natural/src/lib/classes/query-variable-manager.ts","../../../projects/natural/src/lib/classes/tld.ts","../../../projects/natural/src/lib/classes/validators.ts","../../../projects/natural/src/lib/classes/abstract-detail.ts","../../../projects/natural/src/lib/classes/abstract-editable-list.ts","../../../projects/natural/src/lib/modules/search/classes/utils.ts","../../../projects/natural/src/lib/modules/search/classes/transformers.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container-animations.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.html","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-ref.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown.service.ts","../../../projects/natural/src/lib/modules/dropdown-components/types.ts","../../../projects/natural/src/lib/modules/dropdown-components/utils.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.html","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.ts","../../../projects/natural/src/lib/modules/search/classes/url.ts","../../../projects/natural/src/lib/modules/common/services/memory-storage.ts","../../../projects/natural/src/lib/services/persistence.service.ts","../../../projects/natural/src/lib/classes/data-source.ts","../../../projects/natural/src/lib/classes/abstract-list.ts","../../../projects/natural/src/lib/classes/abstract-navigable-list.ts","../../../projects/natural/src/lib/classes/apollo-utils.ts","../../../projects/natural/src/lib/classes/rxjs.ts","../../../projects/natural/src/lib/services/abstract-model.service.ts","../../../projects/natural/src/lib/services/debounce.service.ts","../../../projects/natural/src/lib/services/enum.service.ts","../../../projects/natural/src/lib/services/link-mutation.service.ts","../../../projects/natural/src/lib/services/swiss-parsing-date-adapter.service.ts","../../../projects/natural/src/lib/modules/alert/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.directive.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.html","../../../projects/natural/src/lib/modules/columns-picker/public-api.ts","../../../projects/natural/src/lib/modules/common/directives/linkable-tab.directive.ts","../../../projects/natural/src/lib/modules/common/pipes/capitalize.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/ellipsis.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/enum.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/swiss-date.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/time-ago.pipe.ts","../../../projects/natural/src/lib/modules/common/directives/src-density.directive.ts","../../../projects/natural/src/lib/modules/dialog-trigger/dialog-trigger.component.ts","../../../projects/natural/src/lib/modules/common/services/seo.service.ts","../../../projects/natural/src/lib/modules/common/services/seo.provider.ts","../../../projects/natural/src/lib/modules/common/public-api.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.html","../../../projects/natural/src/lib/modules/detail-header/public-api.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/abstract-association-select-component.directive.ts","../../../projects/natural/src/lib/modules/select/abstract-select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/classes/flat-node.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/classes/model-node.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.ts","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.ts","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.html","../../../projects/natural/src/lib/modules/search/input/input.component.ts","../../../projects/natural/src/lib/modules/search/input/input.component.html","../../../projects/natural/src/lib/modules/search/group/group.component.ts","../../../projects/natural/src/lib/modules/search/group/group.component.html","../../../projects/natural/src/lib/modules/search/search/search.component.ts","../../../projects/natural/src/lib/modules/search/search/search.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-boolean/type-boolean.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/public-api.ts","../../../projects/natural/src/lib/modules/file/utils.ts","../../../projects/natural/src/lib/modules/file/file.service.ts","../../../projects/natural/src/lib/modules/file/abstract-file.ts","../../../projects/natural/src/lib/modules/file/file-drop.directive.ts","../../../projects/natural/src/lib/modules/file/file-select.directive.ts","../../../projects/natural/src/lib/modules/file/component/file.component.ts","../../../projects/natural/src/lib/modules/file/component/file.component.html","../../../projects/natural/src/lib/modules/file/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.html","../../../projects/natural/src/lib/modules/fixed-button/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.html","../../../projects/natural/src/lib/modules/fixed-button-detail/public-api.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.module.ts","../../../projects/natural/src/lib/modules/icon/public-api.ts","../../../projects/natural/src/lib/modules/panels/types.ts","../../../projects/natural/src/lib/modules/panels/panels.module.ts","../../../projects/natural/src/lib/modules/panels/panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/panels.service.ts","../../../projects/natural/src/lib/modules/panels/panels.component.ts","../../../projects/natural/src/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/public-api.ts","../../../projects/natural/src/lib/modules/relations/relations.component.ts","../../../projects/natural/src/lib/modules/relations/relations.component.html","../../../projects/natural/src/lib/modules/relations/public-api.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.html","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.ts","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.html","../../../projects/natural/src/lib/modules/select/public-api.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-stack.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav/sidenav.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.html","../../../projects/natural/src/lib/modules/sidenav/sidenav-content/sidenav-content.component.ts","../../../projects/natural/src/lib/modules/sidenav/public-api.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.html","../../../projects/natural/src/lib/modules/stamp/public-api.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.html","../../../projects/natural/src/lib/modules/table-button/public-api.ts","../../../projects/natural/src/lib/modules/dialog-trigger/public-api.ts","../../../projects/natural/src/lib/modules/avatar/sources/source.ts","../../../projects/natural/src/lib/modules/avatar/service/md5.ts","../../../projects/natural/src/lib/modules/avatar/sources/gravatar.ts","../../../projects/natural/src/lib/modules/avatar/sources/initials.ts","../../../projects/natural/src/lib/modules/avatar/sources/image.ts","../../../projects/natural/src/lib/modules/avatar/service/avatar.service.ts","../../../projects/natural/src/lib/modules/avatar/component/avatar.component.ts","../../../projects/natural/src/lib/modules/avatar/public-api.ts","../../../projects/natural/src/lib/modules/matomo/matomo.service.ts","../../../projects/natural/src/lib/modules/matomo/public-api.ts","../../../projects/natural/src/lib/modules/logger/error-handler.ts","../../../projects/natural/src/lib/modules/logger/error.module.ts","../../../projects/natural/src/lib/modules/logger/public-api.ts","../../../projects/natural/src/lib/directives/http-prefix.directive.ts","../../../projects/natural/src/lib/classes/providers.ts","../../../projects/natural/src/public-api.ts","../../../projects/natural/src/ecodev-natural.ts"],"sourcesContent":["import {Directive, OnDestroy} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n@Directive()\nexport class NaturalAbstractController implements OnDestroy {\n /**\n * Usage:\n *\n * ```ts\n * import { takeUntil } from 'rxjs/operators';\n * .pipe(takeUntil(this.ngUnsubscribe)) // as first pipe on observables that should be destroyed on component destroy\n * ```\n *\n * @deprecated Instead of this, you should create the observable in the constructor or field initializers and use\n * Angular native `.pipe(takeUntilDestroyed())`. And most likely subscribe at a later point. We keep this method until\n * all existing usages (typically in `ngOnInit()`) are migrated away.\n */\n protected readonly ngUnsubscribe = new Subject<void>();\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule} from '@angular/material/dialog';\nimport {MatButtonModule} from '@angular/material/button';\n\nexport interface NaturalConfirmData {\n title: string;\n message: string;\n confirmText: string;\n cancelText: string;\n}\n\n@Component({\n templateUrl: './confirm.component.html',\n styleUrls: ['./confirm.component.scss'],\n standalone: true,\n imports: [MatDialogModule, MatButtonModule],\n})\nexport class NaturalConfirmComponent {\n public constructor(@Inject(MAT_DIALOG_DATA) public data: NaturalConfirmData) {}\n}\n","<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n","import {Injectable} from '@angular/core';\nimport {MatDialog} from '@angular/material/dialog';\nimport {MatSnackBar, MatSnackBarRef, SimpleSnackBar} from '@angular/material/snack-bar';\nimport {Observable} from 'rxjs';\nimport {NaturalConfirmComponent, NaturalConfirmData} from './confirm.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalAlertService {\n public constructor(private readonly dialog: MatDialog, private readonly snackBar: MatSnackBar) {}\n\n /**\n * Show an informative message in a snack bar\n */\n public info(message: string, duration: number | null = 2500): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, undefined, {\n duration: duration === null ? undefined : duration,\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show an error in a snack bar\n */\n public error(message: string, duration: number | null = 2500, action?: string): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, action, {\n duration: duration === null ? undefined : duration,\n panelClass: ['snackbar-error'],\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show a simple confirmation dialog and returns true if user confirmed it\n */\n public confirm(\n title: string,\n message: string,\n confirmText: string,\n cancelText: string = $localize`Annuler`,\n ): Observable<boolean | undefined> {\n const dialog = this.dialog.open<NaturalConfirmComponent, NaturalConfirmData, boolean>(NaturalConfirmComponent, {\n data: {\n title: title,\n message: message,\n confirmText: confirmText,\n cancelText: cancelText,\n },\n });\n\n return dialog.afterClosed();\n }\n}\n","import {Directive, HostBinding, HostListener} from '@angular/core';\nimport {merge} from 'lodash-es';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {NaturalPanelsService} from './panels.service';\nimport {NaturalPanelData} from './types';\n\n@Directive()\nexport class NaturalAbstractPanel extends NaturalAbstractController {\n /**\n * The data property is the container where the resolved content is stored\n * When loading a component from a panel opening (dialog), receives the data provided by the service\n */\n public data: any = {};\n\n /**\n * Bind isFrontPanel style class on root component\n */\n @HostBinding('class.isFrontPanel') public isFrontPanel = false;\n\n /**\n * Bind isPanel style class on root component\n */\n @HostBinding('class.isPanel') public isPanel = false;\n\n /**\n * Merging of data provided by the very root component (that is in a route context) and inherited data through panels\n * @TODO : provide type with available attributes\n */\n public panelData?: NaturalPanelData;\n public panelService?: NaturalPanelsService;\n\n /**\n * Bind click on panels, to allow the selection of those who are behind\n */\n @HostListener('click')\n public clickPanel(): void {\n if (!this.isFrontPanel && this.panelService) {\n this.panelService.goToPanelByComponent(this);\n }\n }\n\n /**\n * Called when panel opens and component is loaded\n * Runs before ngOnInit()\n */\n public initPanel(panelData: NaturalPanelData): void {\n this.panelData = panelData;\n this.isPanel = true;\n\n if (this.panelData && this.panelData.data) {\n merge(this.data, this.panelData.data);\n }\n }\n}\n","import {isArray, isEmpty, pickBy} from 'lodash-es';\nimport {Literal} from '../types/types';\nimport type {ReadonlyDeep} from 'type-fest';\n\n/**\n * Very basic formatting to get only date, without time and ignoring entirely the timezone\n *\n * So something like: \"2021-09-23\"\n */\nexport function formatIsoDate(date: null): null;\nexport function formatIsoDate(date: Date): string;\nexport function formatIsoDate(date: Date | null): string | null;\nexport function formatIsoDate(date: Date | null): string | null {\n if (!date) {\n return null;\n }\n\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Format a date and time in a way that will preserve the local time zone.\n * This allows the server side to know the day (without time) that was selected on client side.\n *\n * So something like: \"2021-09-23T17:57:16+09:00\"\n */\nexport function formatIsoDateTime(date: Date): string {\n const timezoneOffsetInMinutes = date.getTimezoneOffset();\n const timezoneOffsetInHours = -Math.trunc(timezoneOffsetInMinutes / 60); // UTC minus local time\n const sign = timezoneOffsetInHours >= 0 ? '+' : '-';\n const hoursLeadingZero = Math.abs(timezoneOffsetInHours) < 10 ? '0' : '';\n const remainderMinutes = -(timezoneOffsetInMinutes % 60);\n const minutesLeadingZero = Math.abs(remainderMinutes) < 10 ? '0' : '';\n\n // It's a bit unfortunate that we need to construct a new Date instance,\n // but we don't want the original Date instance to be modified\n const correctedDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n correctedDate.setHours(date.getHours() + timezoneOffsetInHours);\n\n const iso = correctedDate\n .toISOString()\n .replace(/\\.\\d{3}Z/, '')\n .replace('Z', '');\n\n return (\n iso +\n sign +\n hoursLeadingZero +\n Math.abs(timezoneOffsetInHours).toString() +\n ':' +\n minutesLeadingZero +\n remainderMinutes\n );\n}\n\n/**\n * Relations to full objects are converted to their IDs only.\n *\n * So {user: {id: 123}} becomes {user: 123}\n */\nexport function relationsToIds(object: Literal): Literal {\n const newObj: Literal = {};\n Object.keys(object).forEach(key => {\n let value: unknown = object[key];\n\n if (value === null || value === undefined) {\n // noop\n } else if (hasId(value)) {\n value = value.id;\n } else if (isArray(value)) {\n value = value.map((i: unknown) => (hasId(i) ? i.id : i));\n } else if (typeof value === 'object' && !(value instanceof File) && !(value instanceof Date)) {\n value = pickBy(value, (v, k) => k !== '__typename'); // omit(value, ['__typename']) ?\n }\n\n newObj[key] = value;\n });\n\n return newObj;\n}\n\nfunction hasId(value: unknown): value is {id: unknown} {\n return !!value && typeof value === 'object' && 'id' in value && !!value.id;\n}\n\n/**\n * Remove from source object the attributes with same value as modified\n * Does not consider arrays\n */\nexport function cleanSameValues(source: Literal, modified: Literal): Literal {\n Object.keys(source).forEach(key => {\n if (source[key] instanceof Object) {\n cleanSameValues(source[key], modified[key]);\n if (isEmpty(source[key])) {\n delete source[key];\n }\n } else if (modified && source[key] === modified[key]) {\n delete source[key];\n }\n });\n\n return source;\n}\n\n/**\n * Returns the plural form of the given name\n */\nexport function makePlural(name: string): string {\n const plural = name + 's';\n\n return plural.replace(/ys$/, 'ies').replace(/ss$/, 'ses').replace(/xs$/, 'xes');\n}\n\n/**\n * Returns the string with the first letter as capital\n */\nexport function upperCaseFirstLetter(term: string): string {\n return term.charAt(0).toUpperCase() + term.slice(1);\n}\n\n/**\n * Returns the string with the first letter as lower case\n */\nexport function lowerCaseFirstLetter(term: string): string {\n return term.charAt(0).toLowerCase() + term.slice(1);\n}\n\n/**\n * Replace all attributes of first object with the ones provided by the second, but keeps the reference\n */\nexport function replaceObjectKeepingReference(obj: Literal | null, newObj: Literal | null): void {\n if (!obj || !newObj) {\n return;\n }\n\n Object.keys(obj).forEach(key => {\n delete obj[key];\n });\n\n Object.keys(newObj).forEach(key => {\n obj[key] = newObj[key];\n });\n}\n\n/**\n * Get contrasted color for text in the slider thumb\n * @param hexBgColor string in hexadecimals representing the background color\n */\nexport function getForegroundColor(hexBgColor: string): 'black' | 'white' {\n const rgb = hexToRgb(hexBgColor.slice(0, 7)); // splice remove alpha and consider only \"visible\" color at 100% alpha\n const o = Math.round((rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000);\n\n return o > 125 ? 'black' : 'white';\n}\n\nfunction hexToRgb(hex: string): {r: number; g: number; b: number} {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : {\n r: 0,\n g: 0,\n b: 0,\n };\n}\n\n/**\n * During lodash.mergeWith, overrides arrays\n */\nexport function mergeOverrideArray(destValue: any, source: any): any {\n if (isArray(source)) {\n return source;\n }\n}\n\n/**\n * Copy text to clipboard.\n * Accepts line breaks `\\n` as textarea do.\n */\nexport function copyToClipboard(document: Document, text: string): void {\n const input = document.createElement('textarea');\n document.body.append(input);\n input.value = text;\n input.select();\n document.execCommand('copy');\n document.body.removeChild(input);\n}\n\nexport function deepFreeze<T extends Literal>(o: T): ReadonlyDeep<T> {\n Object.values(o).forEach(v => Object.isFrozen(v) || deepFreeze(v));\n\n return Object.freeze(o) as ReadonlyDeep<T>;\n}\n","// Basic; loosely typed structure for graphql-doctrine filters\n\nimport {Literal} from '../../../types/types';\n\nexport interface Filter {\n groups?: Array<FilterGroup> | null;\n}\n\nexport interface FilterGroup {\n // The logic operator to be used to append this group\n groupLogic?: LogicalOperator | null;\n // The logic operator to be used within all conditions in this group\n conditionsLogic?: LogicalOperator | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: Array<FilterGroupCondition> | null;\n}\n\nexport interface FilterGroupJoin {\n [key: string]: JoinOn;\n}\n\nexport interface JoinOn {\n type?: JoinType | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: Array<FilterGroupCondition> | null;\n}\n\n// Logical operator to be used in conditions\nexport enum LogicalOperator {\n AND = 'AND',\n OR = 'OR',\n}\n\n// Join types to be used in DQL\nexport enum JoinType {\n innerJoin = 'innerJoin',\n leftJoin = 'leftJoin',\n}\n\nexport interface FilterGroupCondition {\n [key: string]: FilterGroupConditionField;\n}\n\nexport interface FilterGroupConditionField {\n between?: BetweenOperator | null;\n equal?: EqualOperator | null;\n greater?: GreaterOperator | null;\n greaterOrEqual?: GreaterOrEqualOperator | null;\n in?: InOperator | null;\n less?: LessOperator | null;\n lessOrEqual?: LessOrEqualOperator | null;\n like?: LikeOperator | null;\n null?: NullOperator | null;\n\n // For relations\n have?: HaveOperator | null;\n empty?: EmptyOperator | null;\n\n // Allow anything else for custom operators\n [key: string]: Literal | undefined | null;\n}\n\nexport type Scalar = number | string | boolean;\n\nexport interface HaveOperator {\n values: Array<string>;\n not?: boolean | null;\n}\n\nexport interface EmptyOperator {\n not?: boolean | null;\n}\n\nexport interface BetweenOperator {\n from: Scalar;\n to: Scalar;\n not?: boolean | null;\n}\n\nexport interface EqualOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface GreaterOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface GreaterOrEqualOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface InOperator {\n values: Array<Scalar>;\n not?: boolean | null;\n}\n\nexport interface LessOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface LessOrEqualOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface LikeOperator {\n value: Scalar;\n not?: boolean | null;\n}\n\nexport interface NullOperator {\n not?: boolean | null;\n}\n","import {cloneDeep, groupBy, uniq} from 'lodash-es';\nimport {LogicalOperator} from '../modules/search/classes/graphql-doctrine.types';\nimport {Literal} from '../types/types';\n\nexport function hasMixedGroupLogic(groups: Literal[]): boolean {\n // Complete lack of definition by fallback on AND operator\n const completedGroups = cloneDeep(groups).map(group => {\n if (!group.groupLogic) {\n group.groupLogic = LogicalOperator.AND;\n }\n\n return group;\n });\n\n const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1), 'groupLogic')));\n\n return groupLogics.length > 1;\n}\n","import {cloneDeep, defaultsDeep, isArray, mergeWith, omit} from 'lodash-es';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../types/types';\nimport {mergeOverrideArray} from './utility';\nimport {hasMixedGroupLogic} from './query-variable-manager-utils';\n\nexport interface QueryVariables {\n filter?: any | null;\n pagination?: PaginationInput | null;\n sorting?: Array<Sorting> | null;\n}\n\nexport interface PaginationInput {\n offset?: number | null;\n pageIndex?: number | null;\n pageSize?: number | null;\n}\n\nexport interface Sorting {\n field: any;\n order?: SortingOrder | null;\n nullAsHighest?: boolean | null;\n emptyStringAsHighest?: boolean | null;\n}\n\nexport enum SortingOrder {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\n/**\n * During lodash merge, concat arrays\n */\nfunction mergeConcatArray(destValue: any, source: any): any {\n if (isArray(source)) {\n if (destValue) {\n return destValue.concat(source);\n } else {\n return source;\n }\n }\n}\n\n/**\n * Filter manager stores a set of channels that contain a variable object and exposes an observable \"variables\" that updates with the result\n * of all channels merged together.\n *\n * A channel is supposed to be used by a given aspect of the GUI (pagination, sorting, search, others ?).\n *\n * ```ts\n * const fm = new QueryVariablesManager();\n * fm.merge('componentA-variables', {a : [1, 2, 3]});\n * ```\n *\n * Variables attributes is a BehaviorSubject. That mean it's not mandatory to subscribe, we can just call getValue or value attributes on\n * it :\n *\n * ```ts\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for 'componentA-variables':\n *\n * ```ts\n * fm.merge('componentA-variables', {a : [1, 2]});\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for new channel:\n *\n * ```ts\n * fm.merge('componentB-variables', {a : [3, 4]});\n * console.log(fm.variables.value); // {a : [1, 2, 3, 4]}\n * ```\n */\nexport class NaturalQueryVariablesManager<T extends QueryVariables = QueryVariables> {\n public readonly variables: BehaviorSubject<T | undefined> = new BehaviorSubject<T | undefined>(undefined);\n private readonly channels: Map<string, Partial<T>> = new Map<string, Partial<T>>();\n\n public constructor(queryVariablesManager?: NaturalQueryVariablesManager<T>) {\n if (queryVariablesManager) {\n this.channels = queryVariablesManager.getChannelsCopy();\n this.updateVariables();\n }\n }\n\n /**\n * Set or override all the variables that may exist in the given channel\n */\n public set(channelName: string, variables: Partial<T> | null | undefined): void {\n // cloneDeep to change reference and prevent some interactions when merge\n if (variables) {\n this.channels.set(channelName, cloneDeep(variables));\n } else {\n this.channels.delete(channelName);\n }\n this.updateVariables();\n }\n\n /**\n * Return a deep clone of the variables for the given channel name.\n *\n * Avoid returning the same reference to prevent an attribute change, then another channel update that would\n * used this changed attribute without having explicitly asked QueryVariablesManager to update it.\n */\n public get(channelName: string): Partial<T> | undefined {\n return cloneDeep(this.channels.get(channelName));\n }\n\n /**\n * Merge variable into a channel, overriding arrays in same channel / key\n */\n public merge(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n mergeWith(variables, cloneDeep(newVariables), mergeOverrideArray); // merge preserves references, cloneDeep prevent that\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n /**\n * Apply default values to a channel\n * Note : lodash defaults only defines values on destinations keys that are undefined\n */\n public defaults(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n defaultsDeep(variables, newVariables);\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n private getChannelsCopy(): Map<string, Partial<T>> {\n return new Map<string, Partial<T>>(this.channels);\n }\n\n /**\n * Merge channels in a single object\n * Arrays are concatenated\n * Filter groups are combined smartly (see mergeGroupList)\n */\n private updateVariables(): void {\n const merged: T = {} as T;\n\n this.channels.forEach(channelVariables => {\n if (channelVariables.filter) {\n // Merge filter's groups first\n const groups = this.mergeGroupList(\n merged.filter && merged.filter.groups ? merged.filter.groups : [],\n channelVariables.filter.groups || [],\n );\n\n // Merge filter key (that contain groups)\n if (groups && groups.length) {\n if (merged.filter) {\n merged.filter.groups = groups;\n } else {\n merged.filter = {groups: groups};\n }\n } else {\n mergeWith(merged, {filter: channelVariables.filter}, mergeConcatArray);\n }\n }\n\n // Merge other attributes than filter\n mergeWith(merged, omit(channelVariables, 'filter'), mergeConcatArray);\n });\n\n this.variables.next(merged);\n }\n\n /**\n * Cross merge two filters\n * Only accepts groups with same groupLogic (ignores the first one, because there is no groupLogic in this one)\n * @throws In case two non-empty lists of groups are given and at one of them mix groupLogic value, throws an error\n */\n private mergeGroupList(groupsA: Literal[], groupsB: Literal[]): Literal {\n if (groupsA.length === 0 && groupsB.length === 0) {\n return []; // empty listings, return empty lists\n }\n\n if (groupsA.length === 0 && groupsB.length > 0) {\n return groupsB; // One list is empty, return the one that is not\n }\n\n if (groupsB.length === 0 && groupsA.length > 0) {\n return groupsA; // One list is empty, return the one that is not\n }\n\n const groups: Literal[] = [];\n\n if (hasMixedGroupLogic(groupsA) || hasMixedGroupLogic(groupsB)) {\n throw Error('QueryVariables groups contain mixed group logics');\n }\n\n groupsA.forEach(groupA => {\n groupsB.forEach(groupB => {\n groups.push(mergeWith(cloneDeep(groupA), groupB, mergeConcatArray));\n });\n });\n\n return groups;\n }\n}\n","/**\n * Array of valid top-level-domains\n * IanaVersion 2020033100\n *\n * This should ideally be kept in sync with \\Laminas\\Validator\\Hostname\n *\n * See ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain\n * See http://www.iana.org/domains/root/db/ Official list of supported TLDs\n */\nexport const validTlds: Readonly<string[]> = [\n 'aaa',\n 'aarp',\n 'abarth',\n 'abb',\n 'abbott',\n 'abbvie',\n 'abc',\n 'able',\n 'abogado',\n 'abudhabi',\n 'ac',\n 'academy',\n 'accenture',\n 'accountant',\n 'accountants',\n 'aco',\n 'actor',\n 'ad',\n 'adac',\n 'ads',\n 'adult',\n 'ae',\n 'aeg',\n 'aero',\n 'aetna',\n 'af',\n 'afamilycompany',\n 'afl',\n 'africa',\n 'ag',\n 'agakhan',\n 'agency',\n 'ai',\n 'aig',\n 'aigo',\n 'airbus',\n 'airforce',\n 'airtel',\n 'akdn',\n 'al',\n 'alfaromeo',\n 'alibaba',\n 'alipay',\n 'allfinanz',\n 'allstate',\n 'ally',\n 'alsace',\n 'alstom',\n 'am',\n 'americanexpress',\n 'americanfamily',\n 'amex',\n 'amfam',\n 'amica',\n 'amsterdam',\n 'analytics',\n 'android',\n 'anquan',\n 'anz',\n 'ao',\n 'aol',\n 'apartments',\n 'app',\n 'apple',\n 'aq',\n 'aquarelle',\n 'ar',\n 'arab',\n 'aramco',\n 'archi',\n 'army',\n 'arpa',\n 'art',\n 'arte',\n 'as',\n 'asda',\n 'asia',\n 'associates',\n 'at',\n 'athleta',\n 'attorney',\n 'au',\n 'auction',\n 'audi',\n 'audible',\n 'audio',\n 'auspost',\n 'author',\n 'auto',\n 'autos',\n 'avianca',\n 'aw',\n 'aws',\n 'ax',\n 'axa',\n 'az',\n 'azure',\n 'ba',\n 'baby',\n 'baidu',\n 'banamex',\n 'bananarepublic',\n 'band',\n 'bank',\n 'bar',\n 'barcelona',\n 'barclaycard',\n 'barclays',\n 'barefoot',\n 'bargains',\n 'baseball',\n 'basketball',\n 'bauhaus',\n 'bayern',\n 'bb',\n 'bbc',\n 'bbt',\n 'bbva',\n 'bcg',\n 'bcn',\n 'bd',\n 'be',\n 'beats',\n 'beauty',\n 'beer',\n 'bentley',\n 'berlin',\n 'best',\n 'bestbuy',\n 'bet',\n 'bf',\n 'bg',\n 'bh',\n 'bharti',\n 'bi',\n 'bible',\n 'bid',\n 'bike',\n 'bing',\n 'bingo',\n 'bio',\n 'biz',\n 'bj',\n 'black',\n 'blackfriday',\n 'blockbuster',\n 'blog',\n 'bloomberg',\n 'blue',\n 'bm',\n 'bms',\n 'bmw',\n 'bn',\n 'bnpparibas',\n 'bo',\n 'boats',\n 'boehringer',\n 'bofa',\n 'bom',\n 'bond',\n 'boo',\n 'book',\n 'booking',\n 'bosch',\n 'bostik',\n 'boston',\n 'bot',\n 'boutique',\n 'box',\n 'br',\n 'bradesco',\n 'bridgestone',\n 'broadway',\n 'broker',\n 'brother',\n 'brussels',\n 'bs',\n 'bt',\n 'budapest',\n 'bugatti',\n 'build',\n 'builders',\n 'business',\n 'buy',\n 'buzz',\n 'bv',\n 'bw',\n 'by',\n 'bz',\n 'bzh',\n 'ca',\n 'cab',\n 'cafe',\n 'cal',\n 'call',\n 'calvinklein',\n 'cam',\n 'camera',\n 'camp',\n 'cancerresearch',\n 'canon',\n 'capetown',\n 'capital',\n 'capitalone',\n 'car',\n 'caravan',\n 'cards',\n 'care',\n 'career',\n 'careers',\n 'cars',\n 'casa',\n 'case',\n 'caseih',\n 'cash',\n 'casino',\n 'cat',\n 'catering',\n 'catholic',\n 'cba',\n 'cbn',\n 'cbre',\n 'cbs',\n 'cc',\n 'cd',\n 'ceb',\n 'center',\n 'ceo',\n 'cern',\n 'cf',\n 'cfa',\n 'cfd',\n 'cg',\n 'ch',\n 'chanel',\n 'channel',\n 'charity',\n 'chase',\n 'chat',\n 'cheap',\n 'chintai',\n 'christmas',\n 'chrome',\n 'church',\n 'ci',\n 'cipriani',\n 'circle',\n 'cisco',\n 'citadel',\n 'citi',\n 'citic',\n 'city',\n 'cityeats',\n 'ck',\n 'cl',\n 'claims',\n 'cleaning',\n 'click',\n 'clinic',\n 'clinique',\n 'clothing',\n 'cloud',\n 'club',\n 'clubmed',\n 'cm',\n 'cn',\n 'co',\n 'coach',\n 'codes',\n 'coffee',\n 'college',\n 'cologne',\n 'com',\n 'comcast',\n 'commbank',\n 'community',\n 'company',\n 'compare',\n 'computer',\n 'comsec',\n 'condos',\n 'construction',\n 'consulting',\n 'contact',\n 'contractors',\n 'cooking',\n 'cookingchannel',\n 'cool',\n 'coop',\n 'corsica',\n 'country',\n 'coupon',\n 'coupons',\n 'courses',\n 'cpa',\n 'cr',\n 'credit',\n 'creditcard',\n 'creditunion',\n 'cricket',\n 'crown',\n 'crs',\n 'cruise',\n 'cruises',\n 'csc',\n 'cu',\n 'cuisinella',\n 'cv',\n 'cw',\n 'cx',\n 'cy',\n 'cymru',\n 'cyou',\n 'cz',\n 'dabur',\n 'dad',\n 'dance',\n 'data',\n 'date',\n 'dating',\n 'datsun',\n 'day',\n 'dclk',\n 'dds',\n 'de',\n 'deal',\n 'dealer',\n 'deals',\n 'degree',\n 'delivery',\n 'dell',\n 'deloitte',\n 'delta',\n 'democrat',\n 'dental',\n 'dentist',\n 'desi',\n 'design',\n 'dev',\n 'dhl',\n 'diamonds',\n 'diet',\n 'digital',\n 'direct',\n 'directory',\n 'discount',\n 'discover',\n 'dish',\n 'diy',\n 'dj',\n 'dk',\n 'dm',\n 'dnp',\n 'do',\n 'docs',\n 'doctor',\n 'dog',\n 'domains',\n 'dot',\n 'download',\n 'drive',\n 'dtv',\n 'dubai',\n 'duck',\n 'dunlop',\n 'dupont',\n 'durban',\n 'dvag',\n 'dvr',\n 'dz',\n 'earth',\n 'eat',\n 'ec',\n 'eco',\n 'edeka',\n 'edu',\n 'education',\n 'ee',\n 'eg',\n 'email',\n 'emerck',\n 'energy',\n 'engineer',\n 'engineering',\n 'enterprises',\n 'epson',\n 'equipment',\n 'er',\n 'ericsson',\n 'erni',\n 'es',\n 'esq',\n 'estate',\n 'esurance',\n 'et',\n 'etisalat',\n 'eu',\n 'eurovision',\n 'eus',\n 'events',\n 'exchange',\n 'expert',\n 'exposed',\n 'express',\n 'extraspace',\n 'fage',\n 'fail',\n 'fairwinds',\n 'faith',\n 'family',\n 'fan',\n 'fans',\n 'farm',\n 'farmers',\n 'fashion',\n 'fast',\n 'fedex',\n 'feedback',\n 'ferrari',\n 'ferrero',\n 'fi',\n 'fiat',\n 'fidelity',\n 'fido',\n 'film',\n 'final',\n 'finance',\n 'financial',\n 'fire',\n 'firestone',\n 'firmdale',\n 'fish',\n 'fishing',\n 'fit',\n 'fitness',\n 'fj',\n 'fk',\n 'flickr',\n 'flights',\n 'flir',\n 'florist',\n 'flowers',\n 'fly',\n 'fm',\n 'fo',\n 'foo',\n 'food',\n 'foodnetwork',\n 'football',\n 'ford',\n 'forex',\n 'forsale',\n 'forum',\n 'foundation',\n 'fox',\n 'fr',\n 'free',\n 'fresenius',\n 'frl',\n 'frogans',\n 'frontdoor',\n 'frontier',\n 'ftr',\n 'fujitsu',\n 'fujixerox',\n 'fun',\n 'fund',\n 'furniture',\n 'futbol',\n 'fyi',\n 'ga',\n 'gal',\n 'gallery',\n 'gallo',\n 'gallup',\n 'game',\n 'games',\n 'gap',\n 'garden',\n 'gay',\n 'gb',\n 'gbiz',\n 'gd',\n 'gdn',\n 'ge',\n 'gea',\n 'gent',\n 'genting',\n 'george',\n 'gf',\n 'gg',\n 'ggee',\n 'gh',\n 'gi',\n 'gift',\n 'gifts',\n 'gives',\n 'giving',\n 'gl',\n 'glade',\n 'glass',\n 'gle',\n 'global',\n 'globo',\n 'gm',\n 'gmail',\n 'gmbh',\n 'gmo',\n 'gmx',\n 'gn',\n 'godaddy',\n 'gold',\n 'goldpoint',\n 'golf',\n 'goo',\n 'goodyear',\n 'goog',\n 'google',\n 'gop',\n 'got',\n 'gov',\n 'gp',\n 'gq',\n 'gr',\n 'grainger',\n 'graphics',\n 'gratis',\n 'green',\n 'gripe',\n 'grocery',\n 'group',\n 'gs',\n 'gt',\n 'gu',\n 'guardian',\n 'gucci',\n 'guge',\n 'guide',\n 'guitars',\n 'guru',\n 'gw',\n 'gy',\n 'hair',\n 'hamburg',\n 'hangout',\n 'haus',\n 'hbo',\n 'hdfc',\n 'hdfcbank',\n 'health',\n 'healthcare',\n 'help',\n 'helsinki',\n 'here',\n 'hermes',\n 'hgtv',\n 'hiphop',\n 'hisamitsu',\n 'hitachi',\n 'hiv',\n 'hk',\n 'hkt',\n 'hm',\n 'hn',\n 'hockey',\n 'holdings',\n 'holiday',\n 'homedepot',\n 'homegoods',\n 'homes',\n 'homesense',\n 'honda',\n 'horse',\n 'hospital',\n 'host',\n 'hosting',\n 'hot',\n 'hoteles',\n 'hotels',\n 'hotmail',\n 'house',\n 'how',\n 'hr',\n 'hsbc',\n 'ht',\n 'hu',\n 'hughes',\n 'hyatt',\n 'hyundai',\n 'ibm',\n 'icbc',\n 'ice',\n 'icu',\n 'id',\n 'ie',\n 'ieee',\n 'ifm',\n 'ikano',\n 'il',\n 'im',\n 'imamat',\n 'imdb',\n 'immo',\n 'immobilien',\n 'in',\n 'inc',\n 'industries',\n 'infiniti',\n 'info',\n 'ing',\n 'ink',\n 'institute',\n 'insurance',\n 'insure',\n 'int',\n 'intel',\n 'international',\n 'intuit',\n 'investments',\n 'io',\n 'ipiranga',\n 'iq',\n 'ir',\n 'irish',\n 'is',\n 'ismaili',\n 'ist',\n 'istanbul',\n 'it',\n 'itau',\n 'itv',\n 'iveco',\n 'jaguar',\n 'java',\n 'jcb',\n 'jcp',\n 'je',\n 'jeep',\n 'jetzt',\n 'jewelry',\n 'jio',\n 'jll',\n 'jm',\n 'jmp',\n 'jnj',\n 'jo',\n 'jobs',\n 'joburg',\n 'jot',\n 'joy',\n 'jp',\n 'jpmorgan',\n 'jprs',\n 'juegos',\n 'juniper',\n 'kaufen',\n 'kddi',\n 'ke',\n 'kerryhotels',\n 'kerrylogistics',\n 'kerryproperties',\n 'kfh',\n 'kg',\n 'kh',\n 'ki',\n 'kia',\n 'kim',\n 'kinder',\n 'kindle',\n 'kitchen',\n 'kiwi',\n 'km',\n 'kn',\n 'koeln',\n 'komatsu',\n 'kosher',\n 'kp',\n 'kpmg',\n 'kpn',\n 'kr',\n 'krd',\n 'kred',\n 'kuokgroup',\n 'kw',\n 'ky',\n 'kyoto',\n 'kz',\n 'la',\n 'lacaixa',\n 'lamborghini',\n 'lamer',\n 'lancaster',\n 'lancia',\n 'land',\n 'landrover',\n 'lanxess',\n 'lasalle',\n 'lat',\n 'latino',\n 'latrobe',\n 'law',\n 'lawyer',\n 'lb',\n 'lc',\n 'lds',\n 'lease',\n 'leclerc',\n 'lefrak',\n 'legal',\n 'lego',\n 'lexus',\n 'lgbt',\n 'li',\n 'lidl',\n 'life',\n 'lifeinsurance',\n 'lifestyle',\n 'lighting',\n 'like',\n 'lilly',\n 'limited',\n 'limo',\n 'lincoln',\n 'linde',\n 'link',\n 'lipsy',\n 'live',\n 'living',\n 'lixil',\n 'lk',\n 'llc',\n 'llp',\n 'loan',\n 'loans',\n 'locker',\n 'locus',\n 'loft',\n 'lol',\n 'london',\n 'lotte',\n 'lotto',\n 'love',\n 'lpl',\n 'lplfinancial',\n 'lr',\n 'ls',\n 'lt',\n 'ltd',\n 'ltda',\n 'lu',\n 'lundbeck',\n 'lupin',\n 'luxe',\n 'luxury',\n 'lv',\n 'ly',\n 'ma',\n 'macys',\n 'madrid',\n 'maif',\n 'maison',\n 'makeup',\n 'man',\n 'management',\n 'mango',\n 'map',\n 'market',\n 'marketing',\n 'markets',\n 'marriott',\n 'marshalls',\n 'maserati',\n 'mattel',\n 'mba',\n 'mc',\n 'mckinsey',\n 'md',\n 'me',\n 'med',\n 'media',\n 'meet',\n 'melbourne',\n 'meme',\n 'memorial',\n 'men',\n 'menu',\n 'merckmsd',\n 'metlife',\n 'mg',\n 'mh',\n 'miami',\n 'microsoft',\n 'mil',\n 'mini',\n 'mint',\n 'mit',\n 'mitsubishi',\n 'mk',\n 'ml',\n 'mlb',\n 'mls',\n 'mm',\n 'mma',\n 'mn',\n 'mo',\n 'mobi',\n 'mobile',\n 'moda',\n 'moe',\n 'moi',\n 'mom',\n 'monash',\n 'money',\n 'monster',\n 'mormon',\n 'mortgage',\n 'moscow',\n 'moto',\n 'motorcycles',\n 'mov',\n 'movie',\n 'mp',\n 'mq',\n 'mr',\n 'ms',\n 'msd',\n 'mt',\n 'mtn',\n 'mtr',\n 'mu',\n 'museum',\n 'mutual',\n 'mv',\n 'mw',\n 'mx',\n 'my',\n 'mz',\n 'na',\n 'nab',\n 'nagoya',\n 'name',\n 'nationwide',\n 'natura',\n 'navy',\n 'nba',\n 'nc',\n 'ne',\n 'nec',\n 'net',\n 'netbank',\n 'netflix',\n 'network',\n 'neustar',\n 'new',\n 'newholland',\n 'news',\n 'next',\n 'nextdirect',\n 'nexus',\n 'nf',\n 'nfl',\n 'ng',\n 'ngo',\n 'nhk',\n 'ni',\n 'nico',\n 'nike',\n 'nikon',\n 'ninja',\n 'nissan',\n 'nissay',\n 'nl',\n 'no',\n 'nokia',\n 'northwesternmutual',\n 'norton',\n 'now',\n 'nowruz',\n 'nowtv',\n 'np',\n 'nr',\n 'nra',\n 'nrw',\n 'ntt',\n 'nu',\n 'nyc',\n 'nz',\n 'obi',\n 'observer',\n 'off',\n 'office',\n 'okinawa',\n 'olayan',\n 'olayangroup',\n 'oldnavy',\n 'ollo',\n 'om',\n 'omega',\n 'one',\n 'ong',\n 'onl',\n 'online',\n 'onyourside',\n 'ooo',\n 'open',\n 'oracle',\n 'orange',\n 'org',\n 'organic',\n 'origins',\n 'osaka',\n 'otsuka',\n 'ott',\n 'ovh',\n 'pa',\n 'page',\n 'panasonic',\n 'paris',\n 'pars',\n 'partners',\n 'parts',\n 'party',\n 'passagens',\n 'pay',\n 'pccw',\n 'pe',\n 'pet',\n 'pf',\n 'pfizer',\n 'pg',\n 'ph',\n 'pharmacy',\n 'phd',\n 'philips',\n 'phone',\n 'photo',\n 'photography',\n 'photos',\n 'physio',\n 'pics',\n 'pictet',\n 'pictures',\n 'pid',\n 'pin',\n 'ping',\n 'pink',\n 'pioneer',\n 'pizza',\n 'pk',\n 'pl',\n 'place',\n 'play',\n 'playstation',\n 'plumbing',\n 'plus',\n 'pm',\n 'pn',\n 'pnc',\n 'pohl',\n 'poker',\n 'politie',\n 'porn',\n 'post',\n 'pr',\n 'pramerica',\n 'praxi',\n 'press',\n 'prime',\n 'pro',\n 'prod',\n 'productions',\n 'prof',\n 'progressive',\n 'promo',\n 'properties',\n 'property',\n 'protection',\n 'pru',\n 'prudential',\n 'ps',\n 'pt',\n 'pub',\n 'pw',\n 'pwc',\n 'py',\n 'qa',\n 'qpon',\n 'quebec',\n 'quest',\n 'qvc',\n 'racing',\n 'radio',\n 'raid',\n 're',\n 'read',\n 'realestate',\n 'realtor',\n 'realty',\n 'recipes',\n 'red',\n 'redstone',\n 'redumbrella',\n 'rehab',\n 'reise',\n 'reisen',\n 'reit',\n 'reliance',\n 'ren',\n 'rent',\n 'rentals',\n 'repair',\n 'report',\n 'republican',\n 'rest',\n 'restaurant',\n 'review',\n 'reviews',\n 'rexroth',\n 'rich',\n 'richardli',\n 'ricoh',\n 'rightathome',\n 'ril',\n 'rio',\n 'rip',\n 'rmit',\n 'ro',\n 'rocher',\n 'rocks',\n 'rodeo',\n 'rogers',\n 'room',\n 'rs',\n 'rsvp',\n 'ru',\n 'rugby',\n 'ruhr',\n 'run',\n 'rw',\n 'rwe',\n 'ryukyu',\n 'sa',\n 'saarland',\n 'safe',\n 'safety',\n 'sakura',\n 'sale',\n 'salon',\n 'samsclub',\n 'samsung',\n 'sandvik',\n 'sandvikcoromant',\n 'sanofi',\n 'sap',\n 'sarl',\n 'sas',\n 'save',\n 'saxo',\n 'sb',\n 'sbi',\n 'sbs',\n 'sc',\n 'sca',\n 'scb',\n 'schaeffler',\n 'schmidt',\n 'scholarships',\n 'school',\n 'schule',\n 'schwarz',\n 'science',\n 'scjohnson',\n 'scor',\n 'scot',\n 'sd',\n 'se',\n 'search',\n 'seat',\n 'secure',\n 'security',\n 'seek',\n 'select',\n 'sener',\n 'services',\n 'ses',\n 'seven',\n 'sew',\n 'sex',\n 'sexy',\n 'sfr',\n 'sg',\n 'sh',\n 'shangrila',\n 'sharp',\n 'shaw',\n 'shell',\n 'shia',\n 'shiksha',\n 'shoes',\n 'shop',\n 'shopping',\n 'shouji',\n 'show',\n 'showtime',\n 'shriram',\n 'si',\n 'silk',\n 'sina',\n 'singles',\n 'site',\n 'sj',\n 'sk',\n 'ski',\n 'skin',\n 'sky',\n 'skype',\n 'sl',\n 'sling',\n 'sm',\n 'smart',\n 'smile',\n 'sn',\n 'sncf',\n 'so',\n 'soccer',\n 'social',\n 'softbank',\n 'software',\n 'sohu',\n 'solar',\n 'solutions',\n 'song',\n 'sony',\n 'soy',\n 'space',\n 'sport',\n 'spot',\n 'spreadbetting',\n 'sr',\n 'srl',\n 'ss',\n 'st',\n 'stada',\n 'staples',\n 'star',\n 'statebank',\n 'statefarm',\n 'stc',\n 'stcgroup',\n 'stockholm',\n 'storage',\n 'store',\n 'stream',\n 'studio',\n 'study',\n 'style',\n 'su',\n 'sucks',\n 'supplies',\n 'supply',\n 'support',\n 'surf',\n 'surgery',\n 'suzuki',\n 'sv',\n 'swatch',\n 'swiftcover',\n 'swiss',\n 'sx',\n 'sy',\n 'sydney',\n 'symantec',\n 'systems',\n 'sz',\n 'tab',\n 'taipei',\n 'talk',\n 'taobao',\n 'target',\n 'tatamotors',\n 'tatar',\n 'tattoo',\n 'tax',\n 'taxi',\n 'tc',\n 'tci',\n 'td',\n 'tdk',\n 'team',\n 'tech',\n 'technology',\n 'tel',\n 'temasek',\n 'tennis',\n 'teva',\n 'tf',\n 'tg',\n 'th',\n 'thd',\n 'theater',\n 'theatre',\n 'tiaa',\n 'tickets',\n 'tienda',\n 'tiffany',\n 'tips',\n 'tires',\n 'tirol',\n 'tj',\n 'tjmaxx',\n 'tjx',\n 'tk',\n 'tkmaxx',\n 'tl',\n 'tm',\n 'tmall',\n 'tn',\n 'to',\n 'today',\n 'tokyo',\n 'tools',\n 'top',\n 'toray',\n 'toshiba',\n 'total',\n 'tours',\n 'town',\n 'toyota',\n 'toys',\n 'tr',\n 'trade',\n 'trading',\n 'training',\n 'travel',\n 'travelchannel',\n 'travelers',\n 'travelersinsurance',\n 'trust',\n 'trv',\n 'tt',\n 'tube',\n 'tui',\n 'tunes',\n 'tushu',\n 'tv',\n 'tvs',\n 'tw',\n 'tz',\n 'ua',\n 'ubank',\n 'ubs',\n 'ug',\n 'uk',\n 'unicom',\n 'university',\n 'uno',\n 'uol',\n 'ups',\n 'us',\n 'uy',\n 'uz',\n 'va',\n 'vacations',\n 'vana',\n 'vanguard',\n 'vc',\n 've',\n 'vegas',\n 'ventures',\n 'verisign',\n 'versicherung',\n 'vet',\n 'vg',\n 'vi',\n 'viajes',\n 'video',\n 'vig',\n 'viking',\n 'villas',\n 'vin',\n 'vip',\n 'virgin',\n 'visa',\n 'vision',\n 'viva',\n 'vivo',\n 'vlaanderen',\n 'vn',\n 'vodka',\n 'volkswagen',\n 'volvo',\n 'vote',\n 'voting',\n 'voto',\n 'voyage',\n 'vu',\n 'vuelos',\n 'wales',\n 'walmart',\n 'walter',\n 'wang',\n 'wanggou',\n 'watch',\n 'watches',\n 'weather',\n 'weatherchannel',\n 'webcam',\n 'weber',\n 'website',\n 'wed',\n 'wedding',\n 'weibo',\n 'weir',\n 'wf',\n 'whoswho',\n 'wien',\n 'wiki',\n 'williamhill',\n 'win',\n 'windows',\n 'wine',\n 'winners',\n 'wme',\n 'wolterskluwer',\n 'woodside',\n 'work',\n 'works',\n 'world',\n 'wow',\n 'ws',\n 'wtc',\n 'wtf',\n 'xbox',\n 'xerox',\n 'xfinity',\n 'xihuan',\n 'xin',\n 'कॉम',\n 'セール',\n '佛山',\n 'ಭಾರತ',\n '慈善',\n '集团',\n '在线',\n '한국',\n 'ଭାରତ',\n '大众汽车',\n '点看',\n 'คอม',\n 'ভাৰত',\n 'ভারত',\n '八卦',\n 'موقع',\n 'বাংলা',\n '公益',\n '公司',\n '香格里拉',\n '网站',\n '移动',\n '我爱你',\n 'москва',\n 'қаз',\n 'католик',\n 'онлайн',\n 'сайт',\n '联通',\n 'срб',\n 'бг',\n 'бел',\n 'קום',\n '时尚',\n '微博',\n '淡马锡',\n 'ファッション',\n 'орг',\n 'नेट',\n 'ストア',\n '삼성',\n 'சிங்கப்பூர்',\n '商标',\n '商店',\n '商城',\n 'дети',\n 'мкд',\n 'ею',\n 'ポイント',\n '新闻',\n '工行',\n '家電',\n 'كوم',\n '中文网',\n '中信',\n '中国',\n '中國',\n '娱乐',\n '谷歌',\n 'భారత్',\n 'ලංකා',\n '電訊盈科',\n '购物',\n 'クラウド',\n 'ભારત',\n '通販',\n 'भारतम्',\n 'भारत',\n 'भारोत',\n '网店',\n 'संगठन',\n '餐厅',\n '网络',\n 'ком',\n 'укр',\n '香港',\n '诺基亚',\n '食品',\n '飞利浦',\n '台湾',\n '台灣',\n '手表',\n '手机',\n 'мон',\n 'الجزائر',\n 'عمان',\n 'ارامكو',\n 'ایران',\n 'العليان',\n 'اتصالات',\n 'امارات',\n 'بازار',\n 'موريتانيا',\n 'پاکستان',\n 'الاردن',\n 'بارت',\n 'بھارت',\n 'المغرب',\n 'ابوظبي',\n 'البحرين',\n 'السعودية',\n 'ڀارت',\n 'كاثوليك',\n 'سودان',\n 'همراه',\n 'عراق',\n 'مليسيا',\n '澳門',\n '닷컴',\n '政府',\n 'شبكة',\n 'بيتك',\n 'عرب',\n 'გე',\n '机构',\n '组织机构',\n '健康',\n 'ไทย',\n 'سورية',\n '招聘',\n 'рус',\n 'рф',\n '珠宝',\n 'تونس',\n '大拿',\n 'ລາວ',\n 'みんな',\n 'グーグル',\n 'ευ',\n 'ελ',\n '世界',\n '書籍',\n 'ഭാരതം',\n 'ਭਾਰਤ',\n '网址',\n '닷넷',\n 'コム',\n '天主教',\n '游戏',\n 'vermögensberater',\n 'vermögensberatung',\n '企业',\n '信息',\n '嘉里大酒店',\n '嘉里',\n 'مصر',\n 'قطر',\n '广东',\n 'இலங்கை',\n 'இந்தியா',\n 'հայ',\n '新加坡',\n 'فلسطين',\n '政务',\n 'xxx',\n 'xyz',\n 'yachts',\n 'yahoo',\n 'yamaxun',\n 'yandex',\n 'ye',\n 'yodobashi',\n 'yoga',\n 'yokohama',\n 'you',\n 'youtube',\n 'yt',\n 'yun',\n 'za',\n 'zappos',\n 'zara',\n 'zero',\n 'zip',\n 'zm',\n 'zone',\n 'zuerich',\n 'zw',\n];\n","import {\n AbstractControl,\n AsyncValidatorFn,\n FormArray,\n FormControlStatus,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {Observable, of, timer} from 'rxjs';\nimport {filter, first, map, switchMap} from 'rxjs/operators';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {validTlds} from './tld';\nimport {FilterGroupCondition} from '../modules/search/classes/graphql-doctrine.types';\n\n/**\n * Returns an async validator function that checks that the form control value is unique\n */\nexport function unique<TService extends NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>>(\n fieldName: string,\n excludedId: string | null | undefined,\n modelService: TService,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n const condition: FilterGroupCondition = {};\n condition[fieldName] = {equal: {value: control.value}};\n\n if (excludedId) {\n condition['id'] = {equal: {value: excludedId, not: true}};\n }\n\n const variables: QueryVariables = {\n pagination: {pageIndex: 0, pageSize: 0},\n filter: {groups: [{conditions: [condition]}]},\n };\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n\n return timer(500).pipe(\n switchMap(() =>\n modelService.count(qvm).pipe(\n first(),\n map(count => (count > 0 ? {duplicateValue: count} : null)),\n ),\n ),\n );\n };\n}\n\n/**\n * Returns an async validator function that checks that the form control value is available\n *\n * Similar to `unique` validator, but allows to use a custom query for when the client does\n * not have permissions for `modelService.count()`.\n */\nexport function available(\n getAvailableQuery: (value: string, excludedId: string | null) => Observable<boolean>,\n excludedId: string | null = null,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n return timer(500).pipe(\n switchMap(() =>\n getAvailableQuery(control.value, excludedId).pipe(\n map(isAvailable => (isAvailable ? null : {available: true})),\n ),\n ),\n );\n };\n}\n\n/**\n * Return all errors recursively for the given Form or control\n */\nexport function collectErrors(control: AbstractControl<unknown>): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n if (control instanceof FormGroup || control instanceof FormArray) {\n errors = Object.entries(control.controls).reduce((acc: ValidationErrors | null, [key, childControl]) => {\n const childErrors = collectErrors(childControl);\n if (childErrors) {\n acc = {...acc, [key]: childErrors};\n }\n return acc;\n }, null);\n }\n\n if (!errors) {\n errors = control.errors;\n }\n\n return errors;\n}\n\n/**\n * Force validation of all form controls recursively.\n *\n * Recursively mark descending form tree as dirty and touched in order to show all invalid fields on demand.\n * Typically used when creating a new object and user clicked on create button but several fields were not\n * touched and are invalid.\n */\nexport function validateAllFormControls(control: AbstractControl<unknown>): void {\n control.markAsDirty({onlySelf: true});\n control.markAsTouched({onlySelf: true});\n\n if (control instanceof FormGroup || control instanceof FormArray) {\n for (const [, child] of Object.entries(control.controls)) {\n validateAllFormControls(child);\n }\n }\n}\n\nfunction isValid(status: FormControlStatus): status is 'VALID' {\n return status === 'VALID';\n}\n\n/**\n * Emits exactly 0 or 1 time:\n *\n * - if the form is VALID, emits immediately\n * - if the form is PENDING emits if it changes from PENDING to VALID\n * - any other cases will **never** emit\n */\nexport function ifValid(control: AbstractControl): Observable<'VALID'> {\n const observable = control.pending ? control.statusChanges.pipe(first()) : of(control.status);\n\n return observable.pipe(filter(isValid));\n}\n\n// This is is an approximation of RFC_5322 where the hostname:\n//\n// - is too strict because it rejects IP address\n// - is too lax because it accepts pretty much anything else\n//\n// but the TLD will be validated against a whitelist so that should make the whole thing acceptable\nconst RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[^@ ]+\\.[^@]+$/u;\n\n/**\n * Validate an email address according to RFC, and also that it is publicly deliverable (not \"root@localhost\" or \"root@127.0.0.1\")\n *\n * This is meant to replace **all** usages of Angular too permissive `Validators.email`\n */\nexport function deliverableEmail(control: AbstractControl): ValidationErrors | null {\n // don't validate empty values to allow optional controls\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const error = {email: true};\n if (value.length > 254) {\n return error;\n }\n\n if (!RFC_5322.test(value)) {\n return error;\n }\n\n const tld = value.split('.').pop();\n if (!validTlds.includes(tld)) {\n return error;\n }\n\n return null;\n}\n\n/**\n * Naive URL validator for \"normal\" web links, that is a bit too permissive\n *\n * It enforces:\n *\n * - http/https protocol\n * - one domain\n * - one tld\n *\n * It allows:\n *\n * - any number of subdomains\n * - any parameters\n * - any fragments\n * - any characters for any parts (does not conform to rfc1738)\n */\nexport const urlValidator = Validators.pattern(/^https?:\\/\\/(?:[^.\\s]+\\.)+[^.\\s]+$/);\n\n/**\n * Validates that the value is an integer (non-float)\n */\nexport function integer(control: AbstractControl): ValidationErrors | null {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n return Number.isInteger(parseFloat(control.value)) ? null : {integer: true};\n}\n\n/**\n * Validate that the value is a decimal number with up to `scale` digits\n *\n * The error contains the expected scale, so that the error message can explain\n * it to the end-user.\n */\nexport function decimal(scale: number): ValidatorFn {\n const regExp = new RegExp(`^-?\\\\d+(\\\\.\\\\d{0,${scale}})?$`);\n return control => {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const value = '' + control.value;\n if (value.match(regExp)) {\n return null;\n }\n\n return {decimal: scale};\n };\n}\n\n/**\n * For internal use to avoid re-creating regexp on each call of `money`\n */\nconst twoDecimals = decimal(2);\n\n/**\n * Validate that the value is an amount of money, meaning a number with at most 2 decimals\n */\nexport function money(control: AbstractControl): ValidationErrors | null {\n return twoDecimals(control) ? {money: true} : null;\n}\n","import {Directive, inject, OnInit} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {kebabCase, merge, mergeWith, omit} from 'lodash-es';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {ExtractTcreate, ExtractTone, ExtractTupdate, Literal} from '../types/types';\nimport {finalize} from 'rxjs/operators';\nimport {ifValid, validateAllFormControls} from './validators';\nimport {mergeOverrideArray} from './utility';\nimport {PaginatedData} from './data-source';\nimport {QueryVariables} from './query-variable-manager';\nimport {EMPTY, endWith, last, Observable, switchMap} from 'rxjs';\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractDetail<\n TService extends NaturalAbstractModelService<\n unknown,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n unknown,\n any\n >,\n >\n extends NaturalAbstractPanel\n implements OnInit\n{\n /**\n * Empty placeholder for data retrieved by the server\n */\n public override data: any = {\n model: {},\n };\n\n /**\n * Form that manages the data from the controller\n */\n public form: UntypedFormGroup = new UntypedFormGroup({});\n\n /**\n * Show / hides the bottom fab button (mostly to hide it when we are on other tabs where semantic of button can conflict with ...\n * semantic of data on other tab, like relations that list other objects)\n */\n public showFabButton = true;\n\n /**\n * Injected service\n */\n protected readonly alertService = inject(NaturalAlertService);\n\n /**\n * Injected service\n */\n protected readonly router = inject(Router);\n\n /**\n * Injected service\n */\n protected readonly route = inject(ActivatedRoute);\n\n public constructor(protected readonly key: string, public readonly service: TService) {\n super();\n }\n\n public ngOnInit(): void {\n if (!this.isPanel) {\n this.route.data.subscribe(data => {\n this.data = merge({model: this.service.getConsolidatedForClient()}, data[this.key]);\n this.data = merge(this.data, omit(data, [this.key]));\n this.initForm();\n });\n } else {\n this.initForm();\n }\n }\n\n public changeTab(index: number): void {\n this.showFabButton = index === 0;\n }\n\n public update(now = false): void {\n if (!this.data.model.id) {\n return;\n }\n\n validateAllFormControls(this.form);\n\n ifValid(this.form).subscribe(() => {\n this.formToData();\n const postUpdate = (model: ExtractTupdate<TService>): void => {\n this.alertService.info($localize`Mis à jour`);\n this.form.patchValue(model);\n this.postUpdate(model);\n };\n\n if (now) {\n this.service.updateNow(this.data.model).subscribe(postUpdate);\n } else {\n this.service.update(this.data.model).subscribe(postUpdate);\n }\n });\n }\n\n public create(redirect = true): void {\n validateAllFormControls(this.form);\n\n if (!this.form.valid) {\n return;\n }\n\n this.formToData();\n this.form.disable();\n\n this.service\n .create(this.data.model)\n .pipe(\n switchMap(model => {\n this.alertService.info($localize`Créé`);\n this.form.patchValue(model);\n\n return this.postCreate(model).pipe(endWith(model), last());\n }),\n switchMap(model => {\n if (redirect) {\n if (this.isPanel) {\n const oldUrl = this.router.url;\n const nextUrl = this.panelData?.config.params.nextRoute;\n const newUrl = oldUrl.replace('/new', '/' + model.id) + (nextUrl ? '/' + nextUrl : '');\n return this.router.navigateByUrl(newUrl); // replace /new by /123\n } else {\n return this.router.navigate(['..', model.id], {relativeTo: this.route});\n }\n }\n\n return EMPTY;\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n public delete(redirectionRoute?: unknown[]): void {\n this.form.disable();\n this.alertService\n .confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement cet élément ?`,\n $localize`Supprimer définitivement`,\n )\n .pipe(\n switchMap(confirmed => {\n if (!confirmed) {\n return EMPTY;\n }\n\n this.preDelete(this.data.model);\n\n return this.service.delete([this.data.model]).pipe(\n switchMap(() => {\n this.alertService.info($localize`Supprimé`);\n\n if (this.isPanel) {\n this.panelService?.goToPenultimatePanel();\n\n return EMPTY;\n } else {\n const defaultRoute = ['../../' + kebabCase(this.key)];\n return this.router.navigate(redirectionRoute ? redirectionRoute : defaultRoute, {\n relativeTo: this.route,\n });\n }\n }),\n );\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postUpdate(model: ExtractTupdate<TService>): void {\n // noop\n }\n\n /**\n * Returns an observable that will be subscribed to immediately and the\n * redirect navigation will only happen after the observable completes.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postCreate(model: ExtractTcreate<TService>): Observable<unknown> {\n return EMPTY;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected preDelete(model: ExtractTone<TService>): void {\n // noop\n }\n\n protected initForm(): void {\n this.form = this.service.getFormGroup(this.data.model);\n }\n\n /**\n * Merge values of form into `this.data.model`.\n */\n protected formToData(): void {\n mergeWith(this.data.model, this.form.value, mergeOverrideArray);\n }\n}\n","import {AbstractControl, UntypedFormArray, UntypedFormGroup} from '@angular/forms';\nimport {MatTableDataSource} from '@angular/material/table';\nimport {merge} from 'lodash-es';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalAbstractController} from './abstract-controller';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {validateAllFormControls} from './validators';\nimport {Directive} from '@angular/core';\nimport {PaginatedData} from './data-source';\n\n/**\n * This class helps managing non-paginated rows of items that can be edited in-place, typically in a <mat-table>.\n * But it does **not** mutate anything to persist the edits on the server. It is up to the consuming component to implement\n * custom mutation mechanism.\n *\n * To access data of this component from a parent component, use:\n *\n * ```\n * @ViewChildren(ComponentType) cmp: ComponentType;\n * this.cmp.getItems();\n * ```\n *\n * To add empty line, call:\n *\n * ```\n * this.cmp.addEmpty();\n * ```\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractEditableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // The Literal here is a bit too loose. Ideally we would like to express\n // \"it must be a union and one of the type in the union must be ExtractTallOne<TService>\"\n T extends Literal = ExtractTallOne<TService>,\n> extends NaturalAbstractController {\n public readonly form: UntypedFormGroup;\n public readonly formArray = new UntypedFormArray([]);\n public readonly variablesManager = new NaturalQueryVariablesManager<ExtractVall<TService>>();\n public readonly dataSource = new MatTableDataSource<AbstractControl>();\n\n public constructor(protected readonly service: TService) {\n super();\n\n // Create a form group with a line attributes that contain an array of formGroups (one by line = one by model)\n this.form = new UntypedFormGroup({rows: this.formArray});\n this.dataSource.data = this.formArray.controls;\n this.variablesManager.set('pagination', {pagination: {pageSize: 999, pageIndex: 0}} as ExtractVall<TService>);\n }\n\n /**\n * Set the list of items (overwriting what may have existed)\n */\n public setItems(items: readonly T[]): void {\n this.formArray.clear(); // reset list\n this.addItems(items);\n }\n\n /**\n * Add given items to the list\n * Reproduces the model data loading the same way as it would be on a detail page (via AbstractDetail controller) but without resolving\n */\n public addItems(items: readonly T[]): void {\n items.forEach(item => {\n const completedItem = merge(this.service.getConsolidatedForClient(), item);\n const lineFormGroup = this.service.getFormGroup(completedItem);\n this.formArray.push(lineFormGroup);\n });\n\n this.dataSource.data = this.formArray.controls;\n }\n\n public removeAt(index: number): void {\n this.formArray.removeAt(index);\n this.dataSource.data = this.formArray.controls;\n }\n\n /**\n * Add empty item at the end of the list\n */\n public addEmpty(): void {\n this.addItems([{} as T]);\n }\n\n /**\n * Return a list of models without any treatment.\n *\n * To mutate models, it would be required to map them using :\n * - AbstractModelService.getInput()\n * - AbstractModelService.getPartialVariablesForCreation()\n * - AbstractModelService.getPartialVariablesForUpdate()\n * - some other required treatment.\n *\n * TODO return type is incorrect and should be closer to `Partial<T>[]` or an even looser type, because we don't really know what fields exists in the form. When we fix this, we should also remove type coercing in unit tests.\n */\n public getItems(): T[] {\n return this.formArray.getRawValue();\n }\n\n /**\n * Force the form validation.\n *\n * The valid state can then be read via `this.form.valid`\n */\n public validateForm(): void {\n validateAllFormControls(this.form);\n }\n}\n","import {Facet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection} from '../types/values';\n\n/**\n * Lookup a facet by its `name` and then by its `field`, or return null if not found\n */\nexport function getFacetFromSelection(\n facets: NaturalSearchFacets | null,\n selection: NaturalSearchSelection,\n): Facet | null {\n if (!facets) {\n return null;\n }\n\n return (\n facets.find(facet => facet.name != null && facet.name === selection.name) ||\n facets.find(facet => facet.field === selection.field) ||\n null\n );\n}\n\n/**\n * Deep clone a literal via JSON serializing/unserializing\n *\n * It will **not** work with:\n *\n * - functions (will be removed)\n * - `undefined` (will be removed)\n * - cyclic references (will crash)\n * - objects (will be converted to `{}`)\n */\nexport function deepClone<T>(obj: T extends undefined ? never : T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n","import {NaturalSearchSelection} from '../types/values';\nimport {formatIsoDate} from '../../../classes/utility';\n\n/**\n * Wrap the searched value by `%` SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: '%foo%'}}}\n */\nexport function wrapLike(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = '%' + selection.condition.like.value + '%';\n }\n\n return selection;\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * attribute \"field\" or \"name\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {myFieldName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByField(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'field');\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * field \"name\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {myConfigName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByName(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'name');\n}\n\nfunction replaceOperatorByAttribute(\n selection: NaturalSearchSelection,\n attribute: 'name' | 'field',\n): NaturalSearchSelection {\n const oldOperator = Object.keys(selection.condition)[0];\n\n const attributeValue = selection[attribute];\n if (!attributeValue) {\n throw new Error('Attribute cannot be empty. Most likely the configuration was wrong');\n }\n\n selection.condition[attributeValue] = selection.condition[oldOperator];\n delete selection.condition[oldOperator];\n\n return selection;\n}\n\n/**\n * Replace `\"today\"` and `\"tomorrow\"` by their real value right now.\n *\n * This transformer is applied automatically and should **not** be part\n * of Natural public API.\n *\n * So:\n *\n * {field: 'myFieldName', condition: {greater: {value: 'today'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {greater: {value: '2023-01-03'}}}\n */\nexport function replaceToday(selection: NaturalSearchSelection): NaturalSearchSelection {\n const date = new Date();\n const today = formatIsoDate(date);\n\n date.setDate(date.getDate() + 1);\n const tomorrow = formatIsoDate(date);\n\n // Transparently adapt exclusive/inclusive ranges for special \"today\" value.\n // Ideally this should be done in `TypeDateComponent`, like it is done for real date values. But unfortunately I\n // could not find a reasonable way to do that while still being able to reload a coherent GUI without showing\n // \"Demain\" somewhere in the GUI. And that is something we want to avoid, we only want to show either \"Aujourd'hui\"\n // or a real date. Otherwise, the human would start thinking with \"Demain\", and it would then need to be properly\n // supported which over/complexify the code, the GUI and the workflow.\n const condition = selection.condition;\n if (Object.keys(condition).length === 1) {\n if (condition.lessOrEqual?.value === 'today') {\n delete condition.lessOrEqual;\n condition.less = {value: 'tomorrow'};\n } else if (condition.greater?.value === 'today') {\n delete condition.greater;\n condition.greaterOrEqual = {value: 'tomorrow'};\n }\n }\n\n for (const key in condition) {\n const operator = condition[key];\n if (operator && 'value' in operator) {\n if (operator.value === 'today') {\n operator.value = today;\n } else if (operator.value === 'tomorrow') {\n operator.value = tomorrow;\n }\n }\n }\n\n return selection;\n}\n","import {\n animate,\n AnimationTriggerMetadata,\n group,\n query,\n sequence,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by the mat-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n */\nexport const naturalDropdownAnimations: {\n readonly transformMenu: AnimationTriggerMetadata;\n readonly fadeInItems: AnimationTriggerMetadata;\n} = {\n /**\n * This animation controls the menu panel's entry and exit from the page.\n *\n * When the menu panel is added to the DOM, it scales in and fades in its border.\n *\n * When the menu panel is removed from the DOM, it simply fades out after a brief\n * delay to display the ripple.\n */\n transformMenu: trigger('transformMenu', [\n state(\n 'void',\n style({\n opacity: 0,\n // This starts off from 0.01, instead of 0, because there's an issue in the Angular animations\n // as of 4.2, which causes the animation to be skipped if it starts from 0.\n transform: 'scale(0.01, 0.01)',\n }),\n ),\n transition(\n 'void => enter',\n sequence([\n query('.natural-dropdown-container-content', style({opacity: 0})),\n animate('100ms linear', style({opacity: 1, transform: 'scale(1, 0.5)'})),\n group([\n query(\n '.natural-dropdown-container-content',\n animate('400ms cubic-bezier(0.55, 0, 0.55, 0.2)', style({opacity: 1})),\n ),\n animate('300ms cubic-bezier(0.25, 0.8, 0.25, 1)', style({transform: 'scale(1, 1)'})),\n ]),\n ]),\n ),\n transition('* => void', animate('150ms 50ms linear', style({opacity: 0}))),\n ]),\n\n /**\n * This animation fades in the background color and content of the menu panel\n * after its containing element is scaled in.\n */\n fadeInItems: trigger('fadeInItems', [\n // TODO(crisbeto): this is inside the `transformMenu`\n // now. Remove next time we do breaking changes.\n state('showing', style({opacity: 1})),\n transition('void => *', [style({opacity: 0}), animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')]),\n ]),\n};\n","import {AnimationEvent} from '@angular/animations';\nimport {ConfigurableFocusTrapFactory, FocusTrap} from '@angular/cdk/a11y';\nimport {BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule} from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Inject,\n InjectionToken,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {naturalDropdownAnimations} from './dropdown-container-animations';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NgIf} from '@angular/common';\n\nexport function throwMatDialogContentAlreadyAttachedError(): void {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n\nexport interface NaturalDropdownContainerData {\n showValidateButton: boolean;\n}\n\nexport const NATURAL_DROPDOWN_CONTAINER_DATA = new InjectionToken<NaturalDropdownContainerData>(\n 'NaturalDropdownContainerData',\n);\n\n@Component({\n templateUrl: './dropdown-container.component.html',\n styleUrls: ['./dropdown-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n animations: [naturalDropdownAnimations.transformMenu, naturalDropdownAnimations.fadeInItems],\n standalone: true,\n imports: [PortalModule, NgIf, MatButtonModule],\n})\nexport class NaturalDropdownContainerComponent extends BasePortalOutlet implements OnDestroy {\n @ViewChild(CdkPortalOutlet, {static: true}) public portalOutlet!: CdkPortalOutlet;\n @ViewChild(TemplateRef, {static: true}) public templateRef!: TemplateRef<any>;\n\n public readonly closed = new Subject<void>();\n\n /** Current state of the panel animation. */\n public panelAnimationState: 'void' | 'enter' = 'void';\n\n /** Emits whenever an animation on the menu completes. */\n private animationDone = new Subject<void>();\n\n private focusTrap: FocusTrap | null = null;\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n public constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n private readonly focusTrapFactory: ConfigurableFocusTrapFactory,\n @Inject(NATURAL_DROPDOWN_CONTAINER_DATA) public data: NaturalDropdownContainerData,\n ) {\n super();\n }\n\n public ngOnDestroy(): void {\n this.closed.complete();\n }\n\n public close(): void {\n this.closed.next();\n }\n\n public attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n return this.portalOutlet.attachTemplatePortal(portal);\n }\n\n public attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n if (this.portalOutlet.hasAttached()) {\n throwMatDialogContentAlreadyAttachedError();\n }\n\n return this.portalOutlet.attachComponentPortal(portal);\n }\n\n public startAnimation(): void {\n this.panelAnimationState = 'enter';\n }\n\n public onAnimationDone(event: AnimationEvent): void {\n if (event.toState === 'enter') {\n this.trapFocus();\n } else if (event.toState === 'exit') {\n this.restoreFocus();\n }\n\n this.animationDone.next();\n }\n\n private trapFocus(): void {\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n }\n\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n /** Restores focus to the element that was focused before the dialog opened. */\n private restoreFocus(): void {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n}\n","<div\n (@transformMenu.done)=\"onAnimationDone($event)\"\n [@transformMenu]=\"panelAnimationState\"\n class=\"natural-dropdown-container mat-elevation-z2\"\n role=\"menu\"\n tabindex=\"-1\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div *ngIf=\"data.showValidateButton\" class=\"natural-dropdown-validate-button\">\n <button (click)=\"close()\" color=\"primary\" mat-raised-button i18n>Valider</button>\n </div>\n</div>\n","import {Subject} from 'rxjs';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownResult} from '../types/values';\nimport {NaturalDropdownContainerComponent} from './dropdown-container.component';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, Injector, StaticProvider} from '@angular/core';\n\nexport class NaturalDropdownRef {\n public readonly componentInstance: DropdownComponent;\n public readonly closed = new Subject<DropdownResult | undefined>();\n\n public constructor(\n private readonly dropdownContainer: NaturalDropdownContainerComponent,\n component: ComponentType<DropdownComponent>,\n customProviders: StaticProvider[],\n parentInjector: Injector,\n containerRef: ComponentRef<NaturalDropdownContainerComponent>,\n ) {\n // Customize injector to allow data and dropdown reference injection in component\n customProviders.push({provide: NaturalDropdownRef, useValue: this});\n const customInjector = Injector.create({providers: customProviders, parent: parentInjector});\n\n // Content (type component given in configuration)\n const componentPortal = new ComponentPortal(component, undefined, customInjector);\n const contentRef = containerRef.instance.attachComponentPortal(componentPortal);\n\n this.componentInstance = contentRef.instance;\n }\n\n public close(result?: DropdownResult): void {\n this.closed.next(result);\n this.closed.complete();\n this.dropdownContainer.close();\n }\n}\n","import {FlexibleConnectedPositionStrategy, Overlay, OverlayConfig} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, ElementRef, Injectable, InjectionToken, Injector, StaticProvider} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {\n NATURAL_DROPDOWN_CONTAINER_DATA,\n NaturalDropdownContainerComponent,\n NaturalDropdownContainerData,\n} from './dropdown-container.component';\nimport {NaturalDropdownRef} from './dropdown-ref';\nimport {DropdownComponent} from '../types/dropdown-component';\n\nexport interface NaturalDropdownData<C = any> {\n condition: FilterGroupConditionField | null;\n configuration: C;\n title?: string;\n}\n\nexport const NATURAL_DROPDOWN_DATA = new InjectionToken<NaturalDropdownData>('NaturalDropdownData');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDropdownService {\n public constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n public open(\n component: ComponentType<DropdownComponent>,\n connectedElement: ElementRef<HTMLElement>,\n customProviders: StaticProvider[],\n showValidateButton: boolean,\n ): NaturalDropdownRef {\n // Container data\n const containerData: NaturalDropdownContainerData = {\n showValidateButton: showValidateButton,\n };\n\n const injectionTokens: StaticProvider[] = [\n {\n provide: NATURAL_DROPDOWN_CONTAINER_DATA,\n useValue: containerData,\n },\n ];\n\n const containerInjector = Injector.create({providers: injectionTokens, parent: this.injector});\n\n // Container\n const overlayRef = this.overlay.create(this.getOverlayConfig(connectedElement));\n const containerPortal = new ComponentPortal(NaturalDropdownContainerComponent, undefined, containerInjector);\n const containerRef: ComponentRef<NaturalDropdownContainerComponent> = overlayRef.attach(containerPortal);\n\n const dropdownContainer = containerRef.instance;\n const dropdownRef = new NaturalDropdownRef(\n dropdownContainer,\n component,\n customProviders,\n this.injector,\n containerRef,\n );\n\n // Start animation that shows menu\n dropdownContainer.startAnimation();\n\n const close = (): void => {\n if (dropdownRef.componentInstance.isValid() && dropdownRef.componentInstance.isDirty()) {\n dropdownRef.close({\n condition: dropdownRef.componentInstance.getCondition(),\n });\n } else {\n dropdownRef.close();\n }\n };\n\n // When parent closes, remove overlay from dom and update \"return\" valu\n dropdownContainer.closed.subscribe(() => {\n overlayRef.dispose();\n close();\n });\n\n // When click on backdrop, validate result.. ?\n overlayRef\n .backdropClick()\n .pipe(takeUntil(dropdownContainer.closed))\n .subscribe(() => dropdownContainer.close());\n\n return dropdownRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n */\n private getOverlayConfig(element: ElementRef<HTMLElement>): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this.getPosition(element),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n }\n\n private getPosition(element: ElementRef<HTMLElement>): FlexibleConnectedPositionStrategy {\n return this.overlay\n .position()\n .flexibleConnectedTo(element)\n .withFlexibleDimensions(true)\n .withViewportMargin(30)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 10,\n },\n ]);\n }\n}\n","import {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\n\nexport type PossibleComparableOpertorKeys = keyof Pick<\n FilterGroupConditionField,\n 'less' | 'lessOrEqual' | 'equal' | 'greaterOrEqual' | 'greater'\n>;\n\nexport interface PossibleComparableOperator {\n key: PossibleComparableOpertorKeys;\n label: string;\n}\n\nexport const possibleComparableOperators: PossibleComparableOperator[] = [\n {\n key: 'less',\n label: '<',\n },\n {\n key: 'lessOrEqual',\n label: '≤',\n },\n {\n key: 'equal',\n label: '=',\n },\n {\n key: 'greaterOrEqual',\n label: '≥',\n },\n {\n key: 'greater',\n label: '>',\n },\n];\n\nexport type PossibleDiscreteOperatorKeys = 'is' | 'isnot' | 'any' | 'none';\n\nexport interface PossibleDiscreteOperator {\n key: PossibleDiscreteOperatorKeys;\n label: string;\n}\n\nexport const possibleDiscreteOperators: PossibleDiscreteOperator[] = [\n {\n key: 'is',\n label: $localize`est`,\n },\n {\n key: 'isnot',\n label: $localize`n'est pas`,\n },\n {\n key: 'any',\n label: $localize`avec`,\n },\n {\n key: 'none',\n label: $localize`sans`,\n },\n];\n","import {DateAdapter} from '@angular/material/core';\nimport {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * Get only date, without time and ignoring entirely the timezone\n */\nexport function serialize<D>(dateAdapter: DateAdapter<D>, value: D | null): string {\n if (!value) {\n return '';\n }\n\n const y = dateAdapter.getYear(value);\n const m = dateAdapter.getMonth(value) + 1;\n const d = dateAdapter.getDate(value);\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Min date validator\n */\nexport function dateMin<D>(dateAdapter: DateAdapter<D>, min: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, min) < 0) {\n return {min: true};\n }\n\n return null;\n };\n}\n\n/**\n * Max date validator\n */\nexport function dateMax<D>(dateAdapter: DateAdapter<D>, max: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, max) > 0) {\n return {max: true};\n }\n\n return null;\n };\n}\n","import {Component, Inject} from '@angular/core';\nimport {FormControl, FormGroup, ValidatorFn, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats, MatOptionModule} from '@angular/material/core';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {possibleComparableOperators, PossibleComparableOpertorKeys} from '../types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatInputModule} from '@angular/material/input';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport interface TypeDateConfiguration<D = Date> {\n min?: D | null;\n max?: D | null;\n}\n\n@Component({\n templateUrl: './type-date.component.html',\n styleUrls: ['./type-date.component.scss'],\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n MatInputModule,\n MatDatepickerModule,\n NgIf,\n MatCheckboxModule,\n ],\n})\nexport class TypeDateComponent<D = any> implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateConfiguration<D>>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOpertorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl<D | null>(null);\n public readonly todayCtrl = new FormControl(false);\n public readonly operators = possibleComparableOperators;\n\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n today: this.todayCtrl,\n });\n\n private readonly defaults: Required<TypeDateConfiguration<D>> = {\n min: null,\n max: null,\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeDateConfiguration<D>>,\n private dateAdapter: DateAdapter<D>,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n this.todayCtrl.valueChanges.pipe(takeUntilDestroyed()).subscribe(isToday => {\n if (isToday) {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.valueCtrl.disable();\n } else {\n this.valueCtrl.enable();\n }\n });\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges, this.todayCtrl.valueChanges)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.renderedValue.next(this.getRenderedValue()));\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.valueCtrl.value) {\n return {};\n }\n\n const condition: FilterGroupConditionField = {};\n let operator = this.operatorCtrl.value;\n let date: string;\n let dayAfter: string;\n\n if (this.todayCtrl.value) {\n date = 'today';\n dayAfter = 'tomorrow';\n } else {\n date = serialize(this.dateAdapter, this.valueCtrl.value);\n dayAfter = serialize(this.dateAdapter, this.getDayAfter(this.valueCtrl.value));\n }\n\n if (operator === 'equal') {\n condition.greaterOrEqual = {value: date};\n condition.less = {value: dayAfter};\n } else {\n // Transparently adapt exclusive/inclusive ranges\n if (date !== 'today') {\n if (operator === 'greater') {\n operator = 'greaterOrEqual';\n date = dayAfter;\n } else if (operator === 'lessOrEqual') {\n operator = 'less';\n date = dayAfter;\n }\n }\n\n condition[operator] = {value: date};\n }\n\n return condition;\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n // Special case for '='\n if (condition.greaterOrEqual && condition.less) {\n this.operatorCtrl.setValue('equal');\n this.setTodayOrDate(condition.greaterOrEqual.value);\n\n return;\n }\n\n for (const operator of this.operators) {\n const reloadedOperator = condition[operator.key];\n if (reloadedOperator) {\n this.operatorCtrl.setValue(operator.key);\n this.setTodayOrDate(reloadedOperator.value);\n }\n }\n }\n\n private setTodayOrDate(value: Scalar): void {\n if (value === 'today') {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.todayCtrl.setValue(true);\n } else {\n this.valueCtrl.setValue(this.dateAdapter.deserialize(value));\n this.todayCtrl.setValue(false);\n }\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(dateMin(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax(this.dateAdapter, this.configuration.max));\n }\n\n this.valueCtrl.setValidators(validators);\n }\n\n private getDayAfter(date: D): D {\n return this.dateAdapter.addCalendarDays(this.dateAdapter.clone(date), 1);\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n\n let value = '';\n if (this.todayCtrl.value) {\n value = $localize`Aujourd'hui`;\n } else if (this.valueCtrl.value) {\n value = this.dateAdapter.format(this.valueCtrl.value, this.dateFormats.display.dateInput);\n }\n\n if (operator && value) {\n return operator.label + ' ' + value;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Date</mat-label>\n <input\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n [required]=\"true\"\n matInput\n />\n <mat-datepicker-toggle [for]=\"value\" matIconSuffix></mat-datepicker-toggle>\n <mat-datepicker #value></mat-datepicker>\n <mat-error *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-checkbox [formControl]=\"todayCtrl\" i18n>Aujourd'hui</mat-checkbox>\n</form>\n","import {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection, NaturalSearchSelections} from '../types/values';\nimport {\n Filter,\n FilterGroup,\n FilterGroupCondition,\n FilterGroupConditionField,\n JoinOn,\n LogicalOperator,\n} from './graphql-doctrine.types';\nimport {deepClone, getFacetFromSelection} from './utils';\nimport {replaceToday} from './transformers';\nimport {TypeDateComponent, TypeDateConfiguration} from '../../dropdown-components/type-date/type-date.component';\n\nexport function toGraphQLDoctrineFilter(\n facets: NaturalSearchFacets | null,\n selections: NaturalSearchSelections | null,\n): Filter {\n selections = deepClone(selections);\n\n const filter: Filter = {};\n if (!selections || selections.length === 0) {\n selections = [[]];\n }\n\n for (const groupSelections of selections) {\n const group: FilterGroup = {};\n const neededInversedFlags = facets ? facets.filter(isInvertedFlag) : [];\n\n for (const selection of groupSelections) {\n const facet = getFacetFromSelection(facets, selection);\n const transformedSelection = transformSelection(facet, selection);\n\n // Skip inverted flag and remove it from needed inverted flags\n if (isInvertedFlag(facet)) {\n neededInversedFlags.splice(neededInversedFlags.indexOf(facet), 1);\n } else {\n applyJoinAndCondition(group, transformedSelection);\n }\n }\n\n for (const facet of neededInversedFlags) {\n const transformedSelection = transformSelection(facet, {\n field: facet.field,\n name: facet.name,\n condition: deepClone(facet.condition),\n });\n applyJoinAndCondition(group, transformedSelection);\n }\n\n addGroupToFilter(filter, group);\n }\n\n return filter;\n}\n\nfunction applyJoinAndCondition(group: FilterGroup, selection: NaturalSearchSelection): void {\n // Apply join, then apply operator on that join, if field name has a '.'\n const [joinedRelation, joinedField] = selection.field.split('.');\n let container;\n let wrappedCondition;\n if (joinedField) {\n container = addJoinToGroup(group, joinedRelation);\n wrappedCondition = wrapWithFieldName(joinedField, selection.condition);\n } else {\n container = group;\n wrappedCondition = wrapWithFieldName(selection.field, selection.condition);\n }\n\n addConditionToContainer(container, wrappedCondition);\n}\n\n/**\n * Only add join if it does not already exists\n */\nfunction addJoinToGroup(group: FilterGroup, joinedRelation: string): JoinOn {\n if (!group.joins) {\n group.joins = {};\n }\n\n if (!group.joins[joinedRelation]) {\n group.joins[joinedRelation] = {};\n }\n\n return group.joins[joinedRelation];\n}\n\n/**\n * Only add condition to group or join if it's valid\n */\nfunction addConditionToContainer(container: FilterGroup | JoinOn, condition: FilterGroupCondition): void {\n if (!condition) {\n return;\n }\n\n if (!container.conditions) {\n container.conditions = [];\n }\n\n container.conditions.push(condition);\n}\n\n/**\n * Only add the group if there is something meaningful\n */\nfunction addGroupToFilter(filter: Filter, group: FilterGroup): void {\n if (group.conditions || group.joins) {\n if (!filter.groups) {\n filter.groups = [];\n }\n\n filter.groups.push(group);\n\n if (filter.groups.length > 1) {\n group.groupLogic = LogicalOperator.OR;\n }\n }\n}\n\nfunction wrapWithFieldName(field: string, condition: FilterGroupConditionField): FilterGroupCondition {\n const result: FilterGroupCondition = {};\n\n // We assume a custom operator \"search\"\n if (field === 'search' && condition.like) {\n return {custom: {search: {value: condition.like.value}}};\n } else {\n result[field] = condition;\n }\n\n return result;\n}\n\nfunction transformSelection(facet: Facet | null, selection: NaturalSearchSelection): NaturalSearchSelection {\n const newSelection = facet && facet.transform ? facet.transform(selection) : selection;\n\n return isDateFacet(facet) ? replaceToday(newSelection) : selection;\n}\n\nfunction isInvertedFlag(facet: Facet | null): facet is FlagFacet<FilterGroupConditionField> {\n return (!!facet && 'inversed' in facet && facet.inversed) || false;\n}\n\nfunction isDateFacet(facet: Facet | null): facet is DropdownFacet<TypeDateConfiguration> {\n return !!facet && 'component' in facet && facet.component === TypeDateComponent;\n}\n","import {NaturalSearchSelections} from '../types/values';\nimport {deepClone} from './utils';\nimport {Literal} from '../../../types/types';\nimport {Params} from '@angular/router';\n\n/**\n * Returns a string representation of the selection that can be used in URL.\n *\n * The string can be parsed back with `fromUrl()`\n */\nexport function toUrl(selections: NaturalSearchSelections | null): string | null {\n if (!selections || !selections.length) {\n return null;\n }\n\n const s = deepClone(selections);\n for (const a of s) {\n for (const b of a) {\n (b as Literal)['f'] = b.field;\n (b as Literal)['c'] = b.condition;\n\n delete (b as Literal).field;\n delete (b as Literal).condition;\n }\n }\n\n const result = JSON.stringify(s);\n\n return result === '[[]]' ? null : result;\n}\n\n/**\n * Parse a string, probably coming from URL, into a selection\n */\nexport function fromUrl(selections: string | null): NaturalSearchSelections {\n if (!selections || !selections.length) {\n return [[]];\n }\n\n const result = JSON.parse(selections) as NaturalSearchSelections;\n\n for (const a of result) {\n for (const b of a) {\n b.field = (b as Literal)['f'];\n b.condition = (b as Literal)['c'];\n\n delete (b as Literal)['f'];\n delete (b as Literal)['c'];\n }\n }\n\n if (result.length === 0) {\n result.push([]);\n }\n\n return result;\n}\n\n/**\n * Transform a search selection to navigation parameters to be used in URL.\n *\n * This is typically useful to craft URL to pre-filtered lists.\n */\nexport function toNavigationParameters(selections: NaturalSearchSelections): Params {\n const value = toUrl(selections);\n\n return value ? {ns: JSON.stringify(value)} : {};\n}\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const SESSION_STORAGE = new InjectionToken<NaturalStorage>(\n 'Session storage that can be shimed when running on server or in tests',\n);\n\nexport const LOCAL_STORAGE = new InjectionToken<NaturalStorage>(\n 'Local storage that can be shimed when running on server or in tests',\n);\n\n/**\n * Normal `Storage` type, but without array access\n */\nexport type NaturalStorage = Pick<Storage, 'length' | 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem'>;\n\n/**\n * Memory storage to keep store volatile things in memory\n *\n * Should be used to shim sessionStorage when running on server or in our tests\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMemoryStorage implements NaturalStorage {\n private readonly data = new Map<string, string>();\n\n public get length(): number {\n return this.data.size;\n }\n\n public clear(): void {\n this.data.clear();\n }\n\n public getItem(key: string): string | null {\n const value = this.data.get(key);\n return value === undefined ? null : value;\n }\n\n public key(index: number): string | null {\n let i = 0;\n for (const key of this.data.keys()) {\n if (i++ === index) {\n return key;\n }\n }\n\n return null;\n }\n\n public removeItem(key: string): void {\n this.data.delete(key);\n }\n\n public setItem(key: string, value: string): void {\n this.data.set(key, value);\n }\n}\n\nexport function sessionStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof sessionStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return sessionStorage;\n }\n } catch (e) {\n // nothing do to\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `sessionStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `sessionStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const sessionStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: SESSION_STORAGE,\n useFactory: sessionStorageFactory,\n};\n\n/**\n * Provide in-memory session storage to be used only in tests or SSR\n */\nexport const memorySessionStorageProvider: Provider = {\n provide: SESSION_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n\nexport function localStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof localStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return localStorage;\n }\n } catch (e) {\n // Do nothing\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `localStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `localStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const localStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: LOCAL_STORAGE,\n useFactory: localStorageFactory,\n};\n\n/**\n * Provide in-memory local storage to be used only in tests or SSR\n */\nexport const memoryLocalStorageProvider: Provider = {\n provide: LOCAL_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n","import {Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {ActivatedRoute, NavigationExtras, Router} from '@angular/router';\nimport {clone} from 'lodash-es';\nimport {NaturalStorage, SESSION_STORAGE} from '../modules/common/services/memory-storage';\n\n/**\n * Validator for persisted values retrieved from NaturalPersistenceService. If returns false, the persisted value\n * will be ignored, and instead `null` will be returned.\n *\n * `storageKey` is only given if the value is coming from session storage (and not from URL).\n */\nexport type PersistenceValidator = (key: string, storageKey: string | null, value: unknown) => boolean;\n\nexport const NATURAL_PERSISTENCE_VALIDATOR = new InjectionToken<PersistenceValidator>(\n 'Validator for persisted value retrieved from NaturalPersistenceService. If returns false, the persisted value will never be returned.',\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPersistenceService {\n public constructor(\n private readonly router: Router,\n @Inject(SESSION_STORAGE) private readonly sessionStorage: NaturalStorage,\n @Optional() @Inject(NATURAL_PERSISTENCE_VALIDATOR) private readonly isValid: PersistenceValidator,\n ) {\n // By default, anything is valid\n this.isValid = this.isValid ?? (() => true);\n }\n\n /**\n * Persist in url and local storage the given value with the given key.\n * When stored in storage, we need more \"key\" to identify the controller.\n */\n public persist(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n storageKey: string,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n this.persistInStorage(key, value, storageKey);\n return this.persistInUrl(key, value, route, navigationExtras);\n }\n\n /**\n * Return object with persisted data in url or in session storage\n * Url has priority over session storage because of url sharing. When url is provided, session storage is ignored.\n * Url and storage are synced when arriving in a component :\n * - When loading with url parameters, storage is updated to stay synced\n * - When loading without url, but with storage data, the url is updated\n */\n public get(key: string, route: ActivatedRoute, storageKey: string): any | null {\n // From url\n let params = this.getFromUrl(key, route);\n if (!this.isFalseyValue(params)) {\n this.persistInStorage(key, params, storageKey);\n return params;\n }\n\n // From storage\n params = this.getFromStorage(key, storageKey);\n if (!this.isFalseyValue(params)) {\n this.persistInUrl(key, params, route);\n return params;\n }\n\n return null;\n }\n\n /**\n * Get given key from the url parameters\n */\n public getFromUrl(key: string, route: ActivatedRoute): any | null {\n const value = route.snapshot.paramMap.get(key);\n\n return this.deserialize(key, null, value);\n }\n\n /**\n * Add/override given pair key-value in the url\n * Always JSON.stringify() the given value\n * If the value is falsey, the pair key-value is removed from the url.\n */\n public persistInUrl(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n const params = clone(route.snapshot.url[route.snapshot.url.length - 1].parameters);\n\n if (this.isFalseyValue(value)) {\n delete params[key];\n } else {\n params[key] = JSON.stringify(value);\n }\n\n navigationExtras = Object.assign(navigationExtras || {}, {relativeTo: route});\n\n return this.router.navigate(['.', params], navigationExtras);\n }\n\n public getFromStorage(key: string, storageKey: string): any | null {\n const value = this.sessionStorage.getItem(this.getStorageKey(key, storageKey));\n\n return this.deserialize(key, storageKey, value);\n }\n\n /**\n * Store value in session storage.\n * If value is falsy, the entry is removed\n */\n public persistInStorage(key: string, value: unknown, storageKey: string): void {\n if (this.isFalseyValue(value)) {\n this.sessionStorage.removeItem(this.getStorageKey(key, storageKey));\n } else {\n this.sessionStorage.setItem(this.getStorageKey(key, storageKey), JSON.stringify(value));\n }\n }\n\n private getStorageKey(key: string, storageKey: string): string {\n return storageKey + '-' + key;\n }\n\n // Returns if the given value is falsey\n // Falsey values are : null, undefined and empty string.\n // This cause usually the parameter to be removed from url/storage instead of being stored with no value. Url would be polluted.\n private isFalseyValue(value: unknown): boolean {\n return value == null || value === ''; // == means null or undefined;\n }\n\n private deserialize(key: string, storageKey: string | null, value: string | null): unknown | null {\n if (!value) {\n return null;\n }\n\n let result = null;\n try {\n result = JSON.parse(value);\n } catch (e) {\n // noop\n }\n\n return this.isValid(key, storageKey, result) ? result : null;\n }\n}\n","import {DataSource} from '@angular/cdk/collections';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {Literal} from '../types/types';\n\nexport interface PaginatedData<T> {\n readonly items: readonly T[];\n readonly offset?: number | null;\n readonly pageSize: number;\n readonly pageIndex: number;\n readonly length: number;\n}\n\n/**\n * A NaturalDataSource will connect immediately, in order to know as soon as possible if\n * we need to show a template at all (as seen in my-ichtus)\n *\n * It also allow some extra data manipulation\n */\nexport class NaturalDataSource<T extends PaginatedData<Literal> = PaginatedData<Literal>> extends DataSource<\n T['items'][0]\n> {\n private readonly ngUnsubscribe = new Subject<void>();\n\n private readonly internalData: BehaviorSubject<T | null>;\n\n public constructor(value: Observable<T> | T) {\n super();\n\n if (value instanceof Observable) {\n this.internalData = new BehaviorSubject<T | null>(null);\n value.pipe(takeUntil(this.ngUnsubscribe)).subscribe(res => (this.data = res));\n } else {\n this.internalData = new BehaviorSubject<T | null>(value);\n }\n }\n\n public get internalDataObservable(): Observable<T | null> {\n return this.internalData;\n }\n\n /**\n * Array of data that should be rendered by the table, where each object represents one row.\n */\n public get data(): T | null {\n return this.internalData.value;\n }\n\n public set data(data: T | null) {\n this.internalData.next(data);\n }\n\n public connect(): Observable<T['items']> {\n return this.internalData.pipe(\n takeUntil(this.ngUnsubscribe),\n map(data => (data ? data.items : [])),\n );\n }\n\n public disconnect(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n\n public push(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n fullList.push(item);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n\n public pop(): T['items'][0] | undefined {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n const removedElement = fullList.pop();\n this.data = {...this.data, items: fullList, length: fullList.length};\n\n return removedElement;\n }\n\n public remove(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const index = this.data.items.indexOf(item);\n if (index > -1) {\n const fullList = [...this.data.items];\n fullList.splice(index, 1);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n }\n}\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {Directive, inject, Input, OnDestroy, OnInit} from '@angular/core';\nimport {PageEvent} from '@angular/material/paginator';\nimport {Sort} from '@angular/material/sort';\nimport {ActivatedRoute, Data, NavigationEnd, NavigationExtras, NavigationStart, Router} from '@angular/router';\nimport {defaults, isEmpty, isEqual, pick} from 'lodash-es';\nimport {Observable, Subject} from 'rxjs';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {toGraphQLDoctrineFilter} from '../modules/search/classes/graphql-doctrine';\nimport {fromUrl, toUrl} from '../modules/search/classes/url';\nimport {NaturalSearchFacets} from '../modules/search/types/facet';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalPersistenceService} from '../services/persistence.service';\nimport {NaturalDataSource, PaginatedData} from './data-source';\nimport {\n NaturalQueryVariablesManager,\n PaginationInput,\n QueryVariables,\n Sorting,\n SortingOrder,\n} from './query-variable-manager';\nimport {ExtractTall, ExtractVall, Literal} from '../types/types';\nimport {NavigableItem} from './abstract-navigable-list';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {AvailableColumn} from '../modules/columns-picker/types';\n\ntype MaybeNavigable = Literal | NavigableItem<Literal>;\n\nfunction unwrapNavigable(item: MaybeNavigable): Literal {\n if ('item' in item && 'hasNavigation' in item) {\n return item.item;\n }\n\n return item;\n}\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * Components inheriting from this class can be used as standalone with input attributes.\n *\n * Usage :\n * <natural-my-listing [forcedVariables]=\"{filter:...}\" [selectedColumns]=\"['col1']\" [persistSearch]=\"false\">\n */\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // In most case this should not be specified by inheriting classes.\n // It should only be specified to override default if the service items are\n // mapped to a different structure like in NaturalAbstractNavigableList\n Tall extends PaginatedData<MaybeNavigable> = ExtractTall<TService>,\n >\n extends NaturalAbstractPanel\n implements OnInit, OnDestroy\n{\n /**\n * Wherever search should be loaded from url/storage and persisted in it too.\n */\n @Input() public persistSearch = true;\n\n /**\n * List of columns that are available to the end-user to select from, via `<natural-columns-picker>`\n */\n @Input() public availableColumns: AvailableColumn[] = [];\n\n /**\n * Columns list after interaction with `<natural-columns-picker>`\n */\n public columnsForTable: string[] = [];\n\n /**\n * The default column selection that automatically happened after `<natural-columns-picker>` initialization\n */\n private defaultSelectedColumns: string[] | null = null;\n\n /**\n * Visible (checked) columns\n *\n * Instead of using this, you should consider correctly configuring `AvailableColumn.checked`.\n */\n @Input() public selectedColumns?: string[];\n\n /**\n * Source of the list\n */\n public dataSource?: NaturalDataSource<Tall>;\n\n /**\n * Selection for bulk actions\n */\n public readonly selection = new SelectionModel<ExtractTall<TService>['items'][0]>(true, []);\n\n /**\n * Next executed action from bulk menu\n */\n public bulkActionSelected: string | null = null;\n\n /**\n * Centralisation of query variables\n */\n public variablesManager: NaturalQueryVariablesManager<ExtractVall<TService>> = new NaturalQueryVariablesManager<\n ExtractVall<TService>\n >();\n\n /**\n * Configuration for natural-search facets\n */\n public naturalSearchFacets: NaturalSearchFacets = [];\n\n /**\n * Result of a search (can be provided as input for initialisation)\n */\n public naturalSearchSelections: NaturalSearchSelections = [[]];\n\n /**\n * Data attribute provided by activated route snapshot\n */\n public routeData?: Data;\n\n /**\n * List of page sizes\n */\n public readonly pageSizeOptions = [5, 25, 50, 100, 200];\n\n /**\n * Initial pagination setup\n */\n protected defaultPagination: Required<PaginationInput> = {\n offset: null,\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Initial sorting\n */\n protected defaultSorting?: Array<Sorting>;\n\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly alertService = inject(NaturalAlertService);\n protected readonly persistenceService = inject(NaturalPersistenceService);\n\n public constructor(public readonly service: TService) {\n super();\n }\n\n /**\n * Variables that are always forced on a list, in addition to whatever the end-user might select\n */\n @Input()\n public set forcedVariables(variables: QueryVariables | null | undefined) {\n if (variables) {\n this.applyForcedVariables(variables);\n }\n }\n\n /**\n * If change, check DocumentsComponent that overrides this function without calling super.ngOnInit().\n */\n public ngOnInit(): void {\n this.routeData = this.route.snapshot.data;\n\n this.initFromRoute();\n this.initFromPersisted();\n\n this.variablesManager.defaults('pagination', {pagination: this.defaultPagination} as ExtractVall<TService>);\n this.variablesManager.defaults('sorting', {sorting: this.defaultSorting} as ExtractVall<TService>);\n\n this.dataSource = new NaturalDataSource<Tall>(this.getDataObservable());\n this.selection.clear();\n\n // Update natural search when history changes (back/forward buttons)\n // History state is detectable only on NavigationStart (popstate trigger)\n // But we need parameters from url after NavigationEnd. So proceed in two steps with a flag.\n let isPopState = false;\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(event => event instanceof NavigationStart && event.navigationTrigger === 'popstate'),\n )\n .subscribe(() => {\n isPopState = true;\n });\n\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(event => event instanceof NavigationEnd && isPopState),\n )\n .subscribe(() => {\n isPopState = false; // reset flag\n this.naturalSearchSelections = fromUrl(this.persistenceService.getFromUrl('ns', this.route));\n });\n }\n\n /**\n * Persist search and then launch whatever is required to refresh the list\n */\n public search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // Reset page index to restart the pagination (preserve pageSize)\n\n if (resetPagination) {\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n }\n\n // Persist if activated\n // Two parallel navigations conflict. We first persist the search, then the pagination\n if (this.persistSearch && !this.isPanel) {\n const promise = this.persistenceService.persist(\n 'ns',\n toUrl(naturalSearchSelections),\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise, navigationExtras);\n }\n\n this.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n /**\n * Change sorting variables for query and persist the new value in url and local storage\n * The default value is not persisted\n * @param sortingEvents List of material sorting events\n */\n public sorting(sortingEvents: (Sort & Partial<Pick<Sorting, 'nullAsHighest' | 'emptyStringAsHighest'>>)[]): void {\n // Reset page index to restart the pagination (preserve pageSize)\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n\n // Preserve only sorting events with direction and convert into natural/graphql Sorting type\n let sorting: Sorting[] = sortingEvents\n .filter(e => !!e.direction)\n .map(sortingEvent => {\n const s: Sorting = {\n field: sortingEvent.active,\n };\n\n if (sortingEvent.direction === 'asc') {\n s.order = SortingOrder.ASC;\n } else if (sortingEvent.direction === 'desc') {\n s.order = SortingOrder.DESC;\n }\n\n if ('nullAsHighest' in sortingEvent) {\n s.nullAsHighest = sortingEvent.nullAsHighest;\n }\n\n if ('emptyStringAsHighest' in sortingEvent) {\n s.emptyStringAsHighest = sortingEvent.emptyStringAsHighest;\n }\n\n return s;\n });\n\n // Empty sorting fallbacks on default\n if (sorting.length === 0 && this.defaultSorting) {\n sorting = this.defaultSorting;\n }\n\n // Set sorting as search variable\n this.variablesManager.set('sorting', {sorting: sorting} as ExtractVall<TService>);\n\n if (this.persistSearch && !this.isPanel) {\n // If sorting is equal to default sorting, nullify it to remove from persistence (url and session storage)\n const promise = this.persistenceService.persist(\n 'so',\n isEqual(sorting, this.defaultSorting) ? null : sorting,\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise);\n }\n }\n\n /**\n * Return current pagination, either the user defined one, or the default one\n */\n private getPagination(): PaginationInput {\n const paginationChannel: Partial<ExtractVall<TService>> | undefined = this.variablesManager.get('pagination');\n\n if (paginationChannel && paginationChannel.pagination) {\n // The cast should not be necessary because Typescript correctly narrow down the type to `PaginationInput`\n // but somehow still get confused when returning it\n return paginationChannel.pagination as PaginationInput;\n }\n\n return this.defaultPagination;\n }\n\n /**\n * Change pagination variables for query and persist in url and local storage the new value\n * The default value not persisted\n *\n * @param event Natural or Paginator PageEvent\n * @param defer Promise (usually a route promise) that defers the redirection from this call to prevent route navigation collision\n * @param navigationExtras Angular router navigation options. Is relevant only if persistSearch is true\n */\n public pagination(\n event: PaginationInput | PageEvent,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n let pagination: PaginationInput = this.defaultPagination;\n let forPersistence: PaginationInput | null = null;\n\n // Convert to natural/graphql format, adding missing attributes\n let naturalEvent: PaginationInput = pick(event, Object.keys(this.defaultPagination)); // object with only PaginationInput attributes\n naturalEvent = defaults(naturalEvent, this.defaultPagination); // Default with controller values\n\n if (!isEqual(naturalEvent, this.defaultPagination)) {\n pagination = forPersistence = naturalEvent;\n }\n\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n\n this.persistPagination(forPersistence, defer, navigationExtras);\n }\n\n protected persistPagination(\n pagination: PaginationInput | null,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n if (this.persistSearch && !this.isPanel) {\n // Declare persist function\n const persist = (value: PaginationInput | null): Promise<boolean> =>\n this.persistenceService.persist('pa', value, this.route, this.getStorageKey(), navigationExtras);\n\n // Call function directly or when promise is resolved\n if (defer) {\n defer.then(() => persist(pagination));\n } else {\n persist(pagination);\n }\n }\n }\n\n /**\n * Selects all rows if they are not all selected; otherwise clear selection\n */\n public masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n this.selection.select(unwrapped);\n }\n });\n }\n }\n\n /**\n * Whether the number of selected elements matches the total number of rows\n */\n public isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n let numRows = 0;\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n numRows++;\n }\n });\n\n return numSelected === numRows;\n }\n\n /**\n * Called when a bulk action is selected\n */\n public bulkAction(): void {\n if (!this.bulkActionSelected) {\n throw new Error('Trying to execute a bulk action without selecting one');\n }\n\n if (!(this.bulkActionSelected in this)) {\n throw new Error('Trying to execute a bulk action that does not exist: ' + this.bulkActionSelected);\n }\n\n (this as any)[this.bulkActionSelected]();\n }\n\n /**\n * In non-panel context, header is always visible.\n * In panel context, header is hidden when no results.\n */\n public showHeader(): boolean {\n return !this.isPanel || (this.isPanel && this.showTable());\n }\n\n /**\n * Search is visible in most cases, but hidden on a panel\n */\n public showSearch(): boolean {\n return !this.isPanel;\n }\n\n /**\n * Table should be shown only when there is data\n */\n public showTable(): boolean {\n return !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length > 0;\n }\n\n /**\n * No results is shown when there is no items, but only in non-panel context only.\n * In panels we want discrete mode, there is no search and no \"no-results\"\n */\n public showNoResults(): boolean {\n return !this.isPanel && !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length === 0;\n }\n\n /**\n * Initialize from route.\n *\n * Uses data provided by router such as:\n *\n * - `route.data.forcedVariables`\n * - `route.data.availableColumns`\n * - `route.data.selectedColumns`\n */\n protected initFromRoute(): void {\n // Variables\n if (this.route.snapshot.data.forcedVariables) {\n this.applyForcedVariables(this.route.snapshot.data.forcedVariables);\n }\n\n // Available columns\n if (this.route.snapshot.data.availableColumns) {\n this.availableColumns = this.route.snapshot.data.availableColumns;\n }\n\n // Columns\n if (this.route.snapshot.data.selectedColumns) {\n this.selectedColumns = this.route.snapshot.data.selectedColumns;\n }\n }\n\n protected getDataObservable(): Observable<Tall> {\n // Here the casting is a bit unfortunate but required because NaturalAbstractNavigableList\n // breaks the data structure convention (by wrapping items in a structure). Ideally we should remove\n // the casting and resolve things in a better way, but that's too much work for now\n return this.service\n .watchAll(this.variablesManager as unknown as any)\n .pipe(takeUntil(this.ngUnsubscribe)) as unknown as Observable<Tall>;\n }\n\n protected initFromPersisted(): void {\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n const storageKey = this.getStorageKey();\n\n // Pagination : pa\n const pagination = this.persistenceService.get('pa', this.route, storageKey);\n if (pagination) {\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n }\n\n // Sorting : so\n const sorting = this.persistenceService.get('so', this.route, storageKey);\n if (sorting) {\n this.variablesManager.set('sorting', {sorting} as ExtractVall<TService>);\n }\n\n // Columns\n const persistedColumns = this.persistenceService.get('col', this.route, storageKey);\n if (typeof persistedColumns === 'string') {\n this.selectedColumns = persistedColumns.split(',');\n }\n\n // Natural search : ns\n this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));\n this.translateSearchAndRefreshList(this.naturalSearchSelections, true);\n }\n\n protected translateSearchAndRefreshList(\n naturalSearchSelections: NaturalSearchSelections,\n ignoreEmptyFilter = false,\n ): void {\n const filter = toGraphQLDoctrineFilter(this.naturalSearchFacets, naturalSearchSelections);\n\n if (ignoreEmptyFilter && isEmpty(filter)) {\n return;\n }\n\n this.variablesManager.set('natural-search', {filter} as ExtractVall<TService>);\n }\n\n /**\n * Return current url excluding last route parameters;\n */\n protected getStorageKey(): string {\n const urlTree = this.router.parseUrl(this.router.url);\n urlTree.root.children.primary.segments[urlTree.root.children.primary.segments.length - 1].parameters = {};\n return urlTree.toString();\n }\n\n protected bulkdDeleteConfirmation(): Observable<boolean | undefined> {\n return this.alertService.confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement les éléments sélectionnés ?`,\n $localize`Supprimer définitivement`,\n );\n }\n\n /**\n * Delete multiple items at once\n */\n protected bulkDelete(): Observable<void> {\n const subject = new Subject<void>();\n this.bulkdDeleteConfirmation().subscribe(confirmed => {\n this.bulkActionSelected = null;\n if (confirmed) {\n // Assume that our objects have ID. This is true in almost all cases. But if\n // it is not, like AttributeReportComponent, then the inheriting class must\n // never call this method.\n const selection = this.selection.selected as {id: string}[];\n\n this.service.delete(selection).subscribe(() => {\n this.selection.clear();\n this.alertService.info($localize`Supprimé`);\n subject.next();\n subject.complete();\n });\n }\n });\n\n return subject;\n }\n\n private applyForcedVariables(variables: QueryVariables): void {\n if (variables.filter) {\n this.variablesManager.set('forced-filter', {filter: variables.filter} as ExtractVall<TService>);\n }\n\n if (variables.pagination) {\n this.variablesManager.set('pagination', {pagination: variables.pagination} as ExtractVall<TService>);\n }\n\n if (variables.sorting) {\n this.variablesManager.set('sorting', {sorting: variables.sorting} as ExtractVall<TService>);\n }\n }\n\n public selectColumns(columns: string[]): void {\n this.columnsForTable = columns;\n\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n // The first selection we receive is the default one made by `<natural-columns-picker>`\n if (!this.defaultSelectedColumns) {\n this.defaultSelectedColumns = columns;\n } else {\n // Persist only if wanted columns are different from default selection\n const value = isEqual(this.defaultSelectedColumns, columns) ? null : columns.join(',');\n this.persistenceService.persist('col', value, this.route, this.getStorageKey());\n }\n }\n}\n","import {Directive, Input, OnDestroy, OnInit} from '@angular/core';\nimport {NavigationExtras, RouterLink} from '@angular/router';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalAbstractList} from './abstract-list';\nimport {PaginatedData} from './data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTall, ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {first, Observable} from 'rxjs';\n\ntype BreadcrumbItem = {\n id: string;\n name: string;\n} & Literal;\n\nexport type NavigableItem<T> = {\n item: T;\n hasNavigation: boolean;\n};\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractNavigableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<{id: string}>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends NaturalAbstractList<TService, PaginatedData<NavigableItem<ExtractTall<TService>['items'][0]>>>\n implements OnInit, OnDestroy\n{\n /**\n * Name of filter for child items to access ancestor item\n */\n @Input() public ancestorRelationName = 'parent';\n\n private oldAncertorId: string | null = null;\n\n public breadcrumbs: BreadcrumbItem[] = [];\n\n public constructor(service: TService) {\n super(service);\n }\n\n public override ngOnInit(): void {\n // In fact, \"na\" and \"ns\" key may exist at the same time in url (but shouldn't).\n // When this happens, on page reload, search is priority.\n // \"na\" is a trailing param, and should be considered only when there is no search\n this.route.params.subscribe(params => {\n // \"ns\" stands for natural-search to be shorter in url\n if (params['ns']) {\n return;\n }\n\n let navigationConditionValue: any | null = null;\n\n // \"na\" stands for \"navigation\" (relation) in url\n if (params['na']) {\n navigationConditionValue = {have: {values: [params['na']]}};\n this.service.getOne(params['na']).subscribe(\n // TODO casting should disappear and instead this class should enforce\n // the service to support Tone with a new generic\n (ancestor: BreadcrumbItem) => (this.breadcrumbs = this.getBreadcrumb(ancestor)),\n );\n\n const hasAncestorChanged = params['na'] !== this.oldAncertorId;\n this.oldAncertorId = params['na'];\n this.clearSearch(hasAncestorChanged);\n } else {\n navigationConditionValue = {empty: {}};\n this.breadcrumbs = [];\n }\n\n const condition: Literal = {};\n condition[this.ancestorRelationName] = navigationConditionValue;\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n // todo : check why without \"as Vall\" it errors. Vall is supposed to be QueryVariables, and filter too.\n this.variablesManager.set('navigation', variables as ExtractVall<TService>);\n });\n\n super.ngOnInit();\n }\n\n protected override getDataObservable(): Observable<PaginatedData<NavigableItem<ExtractTallOne<TService>>>> {\n return this.service.watchAll(this.variablesManager as unknown as any).pipe(\n takeUntil(this.ngUnsubscribe),\n map(result => {\n // On each data arriving, we query children count to show/hide chevron\n const navigableItems: NavigableItem<ExtractTallOne<TService>>[] = result.items.map(item => {\n const navigableItem: NavigableItem<ExtractTallOne<TService>> = {\n item: item as ExtractTallOne<TService>,\n hasNavigation: false,\n };\n\n const condition: Literal = {};\n condition[this.ancestorRelationName] = {have: {values: [item.id]}};\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n this.service\n .count(qvm)\n .pipe(first())\n .subscribe(count => (navigableItem.hasNavigation = count > 0));\n\n return navigableItem;\n });\n\n const navigableResult: PaginatedData<NavigableItem<ExtractTallOne<TService>>> = {\n ...result,\n items: navigableItems,\n };\n\n return navigableResult;\n }),\n );\n }\n\n protected override translateSearchAndRefreshList(naturalSearchSelections: NaturalSearchSelections): void {\n // Clear navigation filter if there is a search\n if (naturalSearchSelections.some(s => s.length)) {\n this.variablesManager.set('navigation', null);\n this.breadcrumbs = [];\n }\n\n super.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n public clearSearch(resetPagination = true): void {\n this.naturalSearchSelections = [[]];\n super.search([[]], undefined, resetPagination);\n this.persistenceService.persistInStorage('ns', null, this.getStorageKey());\n }\n\n public override search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // na stands for navigation\n this.persistenceService.persistInUrl('na', null, this.route).then(() => {\n super.search(naturalSearchSelections, navigationExtras, resetPagination);\n });\n }\n\n /**\n * Return an array for router link usage\n */\n public getChildLink(ancestor: {id: string} | null): RouterLink['routerLink'] {\n if (ancestor && ancestor.id) {\n return ['.', {na: ancestor.id}];\n } else {\n return ['.', {}];\n }\n }\n\n /**\n * Depth is limited by queries\n * @param item with an ancestor relation (must match ancestorRelationName attribute)\n */\n protected getBreadcrumb(item: BreadcrumbItem): BreadcrumbItem[] {\n const ancestor = item[this.ancestorRelationName];\n if (ancestor) {\n return this.getBreadcrumb(ancestor).concat([item]);\n }\n\n return [item];\n }\n}\n","import {DocumentNode} from '@apollo/client/core';\nimport {isObject} from 'lodash-es';\nimport {formatIsoDateTime} from './utility';\n\nfunction isFile(value: any): boolean {\n return (\n (typeof File !== 'undefined' && value instanceof File) ||\n (typeof Blob !== 'undefined' && value instanceof Blob) ||\n (typeof FileList !== 'undefined' && value instanceof FileList)\n );\n}\n\n/**\n * Detect if the given variables have a file to be uploaded or not, and\n * also convert date to be serialized with their timezone.\n */\nexport function hasFilesAndProcessDate(variables: unknown): boolean {\n let fileFound = false;\n if (!isObject(variables)) {\n return false;\n }\n\n Object.values(variables).forEach(value => {\n if (value instanceof Date) {\n // Replace native toJSON() function by our own implementation\n value.toJSON = () => formatIsoDateTime(value);\n }\n\n if (isFile(value)) {\n fileFound = true;\n }\n\n if (hasFilesAndProcessDate(value)) {\n fileFound = true;\n }\n });\n\n return fileFound;\n}\n\n/**\n * Whether the given GraphQL document contains at least one mutation\n */\nexport function isMutation(query: DocumentNode): boolean {\n return query.definitions.some(\n definition => definition.kind === 'OperationDefinition' && definition.operation === 'mutation',\n );\n}\n","import {MonoTypeOperatorFunction, Observable, timer} from 'rxjs';\nimport {map, take, takeUntil, tap} from 'rxjs/operators';\n\n/**\n * Behave like setTimeout(), but with a mandatory cancel mechanism.\n *\n * This is typically useful to replace setTimeout() in components where the callback\n * would crash if executed after the component destruction. That can easily happen\n * when the user navigate quickly between pages.\n *\n * Typical usage in a component would be:\n *\n * ```ts\n * cancellableTimeout(this.ngUnsubscribe).subscribe(myCallback);\n * ```\n *\n * Instead of the more error prone:\n *\n * ```ts\n * public foo(): void {\n * this.timeout = setTimeout(myCallBack);\n * }\n *\n * public ngOnDestroy(): void {\n * if (this.timeout) {\n * clearTimeout(this.timeout);\n * this.timeout = null;\n * }\n * }\n * ```\n */\nexport function cancellableTimeout(canceller: Observable<unknown>, milliSeconds = 0): Observable<void> {\n return timer(milliSeconds).pipe(\n take(1),\n takeUntil(canceller),\n map(() => {\n return;\n }),\n );\n}\n\n/**\n * For debugging purpose only, will dump in console everything that happen to\n * the observable\n */\nexport function debug<T>(debugName: string): MonoTypeOperatorFunction<T> {\n return tap<T>({\n subscribe: () => console.log('SUBSCRIBE', debugName),\n unsubscribe: () => console.log('UNSUBSCRIBE', debugName),\n next: value => console.log('NEXT', debugName, value),\n error: error => console.log('ERROR', debugName, error),\n complete: () => console.log('COMPLETE', debugName),\n });\n}\n","import {Apollo, gql, MutationResult} from 'apollo-angular';\nimport {FetchResult, NetworkStatus, WatchQueryFetchPolicy} from '@apollo/client/core';\nimport {AbstractControl, AsyncValidatorFn, UntypedFormControl, UntypedFormGroup, ValidatorFn} from '@angular/forms';\nimport {DocumentNode} from 'graphql';\nimport {defaults, merge, mergeWith, omit, pick} from 'lodash-es';\nimport {catchError, combineLatest, EMPTY, first, from, Observable, of, OperatorFunction} from 'rxjs';\nimport {debounceTime, filter, map, shareReplay, switchMap, takeWhile, tap} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../classes/query-variable-manager';\nimport {Literal} from '../types/types';\nimport {makePlural, mergeOverrideArray, relationsToIds, upperCaseFirstLetter} from '../classes/utility';\nimport {PaginatedData} from '../classes/data-source';\nimport {NaturalDebounceService} from './debounce.service';\n\nexport interface FormValidators {\n [key: string]: ValidatorFn[];\n}\n\nexport interface FormAsyncValidators {\n [key: string]: AsyncValidatorFn[];\n}\n\nexport interface VariablesWithInput {\n input: Literal;\n}\n\nexport interface FormControls {\n [key: string]: AbstractControl;\n}\n\ninterface Resolve<TOne> {\n model: TOne;\n}\n\nexport type WithId<T> = {id: string} & T;\n\nexport abstract class NaturalAbstractModelService<\n Tone,\n Vone extends {id: string},\n Tall extends PaginatedData<Literal>,\n Vall extends QueryVariables,\n Tcreate,\n Vcreate extends VariablesWithInput,\n Tupdate,\n Vupdate extends {id: string; input: Literal},\n Tdelete,\n Vdelete extends {ids: string[]},\n> {\n /**\n * Store the creation mutations that are pending\n */\n private readonly creatingCache = new Map<Vcreate['input'] | WithId<Vupdate['input']>, Observable<Tcreate>>();\n\n public constructor(\n protected readonly apollo: Apollo,\n protected readonly naturalDebounceService: NaturalDebounceService,\n protected readonly name: string,\n protected readonly oneQuery: DocumentNode | null,\n protected readonly allQuery: DocumentNode | null,\n protected readonly createMutation: DocumentNode | null,\n protected readonly updateMutation: DocumentNode | null,\n protected readonly deleteMutation: DocumentNode | null,\n ) {}\n\n public getConsolidatedForClient(): Literal {\n return Object.assign(this.getDefaultForServer(), this.getDefaultForClient());\n }\n\n /**\n * List of individual fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormValidators(model?: Literal): FormValidators {\n return {};\n }\n\n /**\n * List of individual async fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormAsyncValidators(model?: Literal): FormAsyncValidators {\n return {};\n }\n\n /**\n * List of grouped fields validators (like password + confirm password)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupValidators(model?: Literal): ValidatorFn[] {\n return [];\n }\n\n /**\n * List of async group fields validators (like unique constraint on multiple columns)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupAsyncValidators(model?: Literal): AsyncValidatorFn[] {\n return [];\n }\n\n public getFormConfig(model: Literal): FormControls {\n const values = this.getConsolidatedForClient();\n const validators = this.getFormValidators(model);\n const asyncValidators = this.getFormAsyncValidators(model);\n const controls: FormControls = {};\n const disabled = model.permissions ? !model.permissions.update : false;\n\n if (model.id) {\n controls['id'] = new UntypedFormControl({value: model.id, disabled: true});\n }\n\n // Configure form for each field of model\n for (const key of Object.keys(values)) {\n const value = model[key] !== undefined ? model[key] : values[key];\n const formState = {\n value: value,\n disabled: disabled,\n };\n const validator = typeof validators[key] !== 'undefined' ? validators[key] : null;\n const asyncValidator = typeof asyncValidators[key] !== 'undefined' ? asyncValidators[key] : null;\n\n controls[key] = new UntypedFormControl(formState, validator, asyncValidator);\n }\n\n // Configure form for extra validators that are not on a specific field\n for (const key of Object.keys(validators)) {\n if (!controls[key]) {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, validators[key]);\n }\n }\n\n for (const key of Object.keys(asyncValidators)) {\n if (controls[key] && asyncValidators[key]) {\n controls[key].setAsyncValidators(asyncValidators[key]);\n } else {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, null, asyncValidators[key]);\n }\n }\n\n return controls;\n }\n\n /**\n * Create the final FormGroup for the object, including all validators\n *\n * This method should **not** be overridden, but instead `getFormConfig`,\n * `getFormGroupValidators`, `getFormGroupAsyncValidators` might be.\n */\n public getFormGroup(model: Literal): UntypedFormGroup {\n const formConfig = this.getFormConfig(model);\n return new UntypedFormGroup(formConfig, {\n validators: this.getFormGroupValidators(model),\n asyncValidators: this.getFormGroupAsyncValidators(model),\n });\n }\n\n /**\n * Get a single object\n *\n * If available it will emit object from cache immediately, then it\n * will **always** fetch from network and then the observable will be completed\n */\n public getOne(id: string): Observable<Tone> {\n this.throwIfObservable(id);\n this.throwIfNotQuery(this.oneQuery);\n\n return this.getVariablesForOne(id).pipe(\n switchMap(variables => {\n this.throwIfNotQuery(this.oneQuery);\n\n return this.apollo.watchQuery<unknown, Vone>({\n query: this.oneQuery,\n variables: variables,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-only',\n }).valueChanges;\n }),\n filter(result => !!result.data),\n takeWhile(result => result.networkStatus !== NetworkStatus.ready, true),\n map(result => (result.data as Literal)[this.name]),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * It will **always** fetch from network and then the observable will be completed.\n * No cache is ever used, so it's slow but correct.\n */\n public getAll(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return this.getPartialVariablesForAll().pipe(\n first(),\n switchMap(partialVariables => {\n this.throwIfNotQuery(this.allQuery);\n\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n this.mapAll(),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * Every time the observable variables change, and they are not undefined,\n * it will return result from cache, then it will **always** fetch from network.\n *\n * You must subscribe to start getting results (and fetch from network).\n *\n * The observable result will only complete when unsubscribing. That means you **must** unsubscribe.\n */\n public watchAll(\n queryVariablesManager: NaturalQueryVariablesManager<Vall>,\n fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network',\n ): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return combineLatest({\n variables: queryVariablesManager.variables.pipe(\n // Ignore very fast variable changes\n debounceTime(20),\n // Wait for variables to be defined to prevent duplicate query: with and without variables\n // Null is accepted value for \"no variables\"\n filter(variables => typeof variables !== 'undefined'),\n ),\n partialVariables: this.getPartialVariablesForAll(),\n }).pipe(\n switchMap(result => {\n // Apply partial variables from service\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', result.partialVariables);\n\n this.throwIfNotQuery(this.allQuery);\n\n return this.apollo\n .watchQuery<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: fetchPolicy,\n })\n .valueChanges.pipe(\n catchError(() => EMPTY),\n filter(r => !!r.data),\n this.mapAll(),\n );\n }),\n );\n }\n\n /**\n * This functions allow to quickly create or update objects.\n *\n * Manages a \"creation is pending\" status, and update when creation is ready.\n * Uses regular update/updateNow and create methods.\n * Used mainly when editing multiple objects in same controller (like in editable arrays)\n */\n public createOrUpdate(\n object: Vcreate['input'] | WithId<Vupdate['input']>,\n now = false,\n ): Observable<Tcreate | Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n this.throwIfNotQuery(this.updateMutation);\n\n // If creation is pending, listen to creation observable and when ready, fire update\n const pendingCreation = this.creatingCache.get(object);\n if (pendingCreation) {\n return pendingCreation.pipe(\n switchMap(() => {\n return this.update(object as WithId<Vupdate['input']>);\n }),\n );\n }\n\n // If object has Id, just save it\n if ('id' in object && object.id) {\n if (now) {\n // used mainly for tests, because lodash debounced used in update() does not work fine with fakeAsync and tick()\n return this.updateNow(object as WithId<Vupdate['input']>);\n } else {\n return this.update(object as WithId<Vupdate['input']>);\n }\n }\n\n // If object was not saving, and has no ID, create it\n const creation = this.create(object).pipe(\n tap(() => {\n this.creatingCache.delete(object); // remove from cache\n }),\n );\n\n // stores creating observable in a cache replayable version of the observable,\n // so several update() can subscribe to the same creation\n this.creatingCache.set(object, creation.pipe(shareReplay()));\n\n return creation;\n }\n\n /**\n * Create an object in DB and then refetch the list of objects\n */\n public create(object: Vcreate['input']): Observable<Tcreate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n\n const variables = merge(\n {},\n {input: this.getInput(object)},\n this.getPartialVariablesForCreation(object),\n ) as Vcreate;\n\n return this.apollo\n .mutate<Tcreate, Vcreate>({\n mutation: this.createMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n const newObject = this.mapCreation(result);\n\n if (newObject) {\n return mergeWith(object, newObject, mergeOverrideArray);\n } else {\n return newObject;\n }\n }),\n );\n }\n\n /**\n * Update an object, after a short debounce\n */\n public update(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n // Keep a single instance of the debounced update function\n const id = object.id;\n\n return this.naturalDebounceService.debounce(this, id, this.updateNow(object));\n }\n\n /**\n * Update an object immediately when subscribing\n */\n public updateNow(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n const variables = merge(\n {\n id: object.id,\n input: this.getInput(object),\n },\n this.getPartialVariablesForUpdate(object),\n ) as Vupdate;\n\n return this.apollo\n .mutate<Tupdate, Vupdate>({\n mutation: this.updateMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n const mappedResult = this.mapUpdate(result);\n\n return mergeWith(object, mappedResult, mergeOverrideArray);\n }),\n );\n }\n\n /**\n * Update an object but without automatically injecting values coming\n * from `getDefaultForServer()`.\n */\n public updatePartially(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n const variables = {\n id: object.id,\n input: omit(relationsToIds(object), 'id'),\n } as Vupdate;\n\n return this.apollo\n .mutate<Tupdate, Vupdate>({\n mutation: this.updateMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n return this.mapUpdate(result);\n }),\n );\n }\n\n /**\n * Delete objects and then refetch the list of objects\n */\n public delete(objects: {id: string}[]): Observable<Tdelete> {\n this.throwIfObservable(objects);\n this.throwIfNotQuery(this.deleteMutation);\n\n const ids = objects.map(o => {\n // Cancel pending update\n this.naturalDebounceService.cancel(this, o.id);\n\n return o.id;\n });\n const variables = merge(\n {\n ids: ids,\n },\n this.getPartialVariablesForDelete(objects),\n ) as Vdelete;\n\n return this.apollo\n .mutate<Tdelete, Vdelete>({\n mutation: this.deleteMutation,\n variables: variables,\n })\n .pipe(\n // Delay the observable until Apollo refetch is completed\n switchMap(result => {\n const mappedResult = this.mapDelete(result);\n\n return from(this.apollo.client.reFetchObservableQueries()).pipe(map(() => mappedResult));\n }),\n );\n }\n\n /**\n * Resolve model and items related to the model, if the id is provided, in order to show a form\n */\n public resolve(id: string): Observable<Resolve<Tone>> {\n // Load model if id is given\n let observable: Observable<Tone>;\n if (id) {\n observable = this.getOne(id);\n } else {\n observable = of(this.getConsolidatedForClient() as Tone);\n }\n\n return observable.pipe(\n map(result => {\n return {model: result};\n }),\n );\n }\n\n /**\n * Return an object that match the GraphQL input type.\n * It creates an object with manually filled data and add uncompleted data (like required attributes that can be empty strings)\n */\n public getInput(object: Literal): Vcreate['input'] | Vupdate['input'] {\n // Convert relations to their IDs for mutation\n object = relationsToIds(object);\n\n // Pick only attributes that we can find in the empty object\n // In other words, prevent to select data that has unwanted attributes\n const emptyObject = this.getDefaultForServer();\n let input = pick(object, Object.keys(emptyObject));\n\n // Complete a potentially uncompleted object with default values\n input = defaults(input, emptyObject);\n\n return input;\n }\n\n /**\n * Return the number of objects matching the query. It may never complete.\n *\n * This is used for the unique validator\n */\n public count(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<number> {\n const plural = makePlural(this.name);\n const queryName = 'Count' + upperCaseFirstLetter(plural);\n const filterType = upperCaseFirstLetter(this.name) + 'Filter';\n\n const query = gql`\n query ${queryName} ($filter: ${filterType}) {\n count: ${plural} (filter: $filter, pagination: {pageSize: 0, pageIndex: 0}) {\n length\n }\n }`;\n\n return this.getPartialVariablesForAll().pipe(\n switchMap(partialVariables => {\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<{count: {length: number}}, Vall>({\n query: query,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n map(result => result.data.count.length),\n );\n }\n\n /**\n * Return empty object with some default values from server perspective\n *\n * This is typically useful when showing a form for creation\n */\n protected getDefaultForServer(): Vcreate['input'] | Vupdate['input'] {\n return {};\n }\n\n /**\n * Return empty object with some default values from frontend perspective\n *\n * Where empty object must respect graphql XXXInput type, may need some default values for other fields\n */\n protected getDefaultForClient(): Literal {\n return {};\n }\n\n /**\n * This is used to extract only the array of fetched objects out of the entire fetched data\n */\n protected mapAll(): OperatorFunction<FetchResult<unknown>, Tall> {\n const plural = makePlural(this.name);\n return map(result => (result.data as any)[plural]); // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the created object out of the entire fetched data\n */\n protected mapCreation(result: MutationResult<unknown>): Tcreate {\n const name = 'create' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the updated object out of the entire fetched data\n */\n protected mapUpdate(result: MutationResult<unknown>): Tupdate {\n const name = 'update' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only flag when deleting an object\n */\n protected mapDelete(result: MutationResult<unknown>): Tdelete {\n const name = 'delete' + makePlural(upperCaseFirstLetter(this.name));\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * Returns additional variables to be used when getting a single object\n *\n * This is typically a site or state ID, and is needed to get appropriate access rights\n */\n protected getPartialVariablesForOne(): Observable<Partial<Vone>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when getting multiple objects\n *\n * This is typically a site or state ID, but it could be something else to further filter the query\n */\n public getPartialVariablesForAll(): Observable<Partial<Vall>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when creating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForCreation(object: Literal): Partial<Vcreate> {\n return {};\n }\n\n /**\n * Returns additional variables to be used when updating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForUpdate(object: Literal): Partial<Vupdate> {\n return {};\n }\n\n /**\n * Return additional variables to be used when deleting an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForDelete(objects: Literal[]): Partial<Vdelete> {\n return {};\n }\n\n /**\n * Throw exception to prevent executing queries with invalid variables\n */\n protected throwIfObservable(value: unknown): void {\n if (value instanceof Observable) {\n throw new Error(\n 'Cannot use Observable as variables. Instead you should use .subscribe() to call the method with a real value',\n );\n }\n }\n\n /**\n * Merge given ID with additional partial variables if there is any\n */\n private getVariablesForOne(id: string): Observable<Vone> {\n return this.getPartialVariablesForOne().pipe(\n map(partialVariables => merge({}, {id: id} as Vone, partialVariables)),\n );\n }\n\n /**\n * Throw exception to prevent executing null queries\n */\n private throwIfNotQuery(query: DocumentNode | null): asserts query {\n if (!query) {\n throw new Error('GraphQL query for this method was not configured in this service constructor');\n }\n }\n}\n","import {\n catchError,\n debounceTime,\n EMPTY,\n forkJoin,\n map,\n mergeMap,\n Observable,\n of,\n raceWith,\n ReplaySubject,\n shareReplay,\n Subject,\n take,\n} from 'rxjs';\nimport {Injectable} from '@angular/core';\nimport {NaturalAbstractModelService} from './abstract-model.service';\n\ntype Debounced<T> = {\n source: Observable<T>;\n debouncer: Subject<void>;\n canceller: Subject<void>;\n result: Observable<T>;\n};\ntype Key = NaturalAbstractModelService<unknown, any, any, any, unknown, any, unknown, any, unknown, any>;\n\n/**\n * Debounce subscriptions to observable, with possibility to cancel one, or flush all of them. Typically,\n * observables are object updates, so `NaturalAbstractModelService.updateNow()`.\n *\n * `key` must be an instance of `NaturalAbstractModelService` to separate objects by their types. So User with ID 1 is\n * not confused with Product with ID 1. It has no other purpose.\n *\n * `id` should be the ID of the object that will be updated.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDebounceService {\n private readonly flusher = new Subject<void>();\n\n /**\n * Stores the debounced update function\n */\n private readonly allDebouncedUpdateCache = new Map<Key, Map<string, Debounced<unknown>>>();\n\n /**\n * Debounce the given source observable for a short time. If called multiple times with the same key and id,\n * it will postpone the subscription to the source observable.\n *\n * Giving the same key and id but a different source observable will replace the original observable, but\n * keep the same debouncing timeline.\n */\n public debounce<T>(key: Key, id: string, source: Observable<T>): Observable<T> {\n const debouncedUpdateCache = this.getMap(key) as Map<string, Debounced<T>>;\n let debounced = debouncedUpdateCache.get(id);\n\n if (debounced) {\n debounced.source = source;\n } else {\n const debouncer = new ReplaySubject<void>(1);\n let wasCancelled = false;\n const canceller = new Subject<void>();\n canceller.subscribe(() => {\n wasCancelled = true;\n debouncer.complete();\n canceller.complete();\n this.delete(key, id);\n });\n\n debounced = {\n debouncer,\n canceller,\n source,\n result: debouncer.pipe(\n debounceTime(2000), // Wait 2 seconds...\n raceWith(this.flusher), // ...unless flusher is triggered\n take(1),\n mergeMap(() => {\n this.delete(key, id);\n\n if (wasCancelled || !debounced) {\n return EMPTY;\n }\n\n return debounced.source;\n }),\n shareReplay(), // All attempts to update will share the exact same single result from API\n ),\n };\n\n debouncedUpdateCache.set(id, debounced);\n }\n\n // Notify our debounced update each time we ask to update\n debounced.debouncer.next();\n\n // Return and observable that is updated when mutation is done\n return debounced.result;\n }\n\n public cancel(key: Key, id: string): void {\n const debounced = this.allDebouncedUpdateCache.get(key)?.get(id);\n debounced?.canceller.next();\n }\n\n /**\n * Immediately execute all pending updates.\n *\n * It should typically be called before login out.\n *\n * The returned observable will complete when all updates complete, even if some of them error.\n */\n public flush(): Observable<void> {\n const all: Observable<unknown>[] = [];\n this.allDebouncedUpdateCache.forEach(map =>\n map.forEach(debounced => {\n all.push(debounced.result.pipe(catchError(() => of(undefined))));\n }),\n );\n\n if (!all.length) {\n all.push(of(undefined));\n }\n\n return new Observable(subscriber => {\n const subscription = forkJoin(all)\n .pipe(map(() => undefined))\n .subscribe(subscriber);\n\n // Flush only after subscription process is finished\n this.flusher.next();\n\n return subscription;\n });\n }\n\n /**\n * Count of pending updates\n */\n public get count(): number {\n let count = 0;\n this.allDebouncedUpdateCache.forEach(map => (count += map.size));\n\n return count;\n }\n\n private getMap(key: Key): Map<string, Debounced<unknown>> {\n let debouncedUpdateCache = this.allDebouncedUpdateCache.get(key);\n if (!debouncedUpdateCache) {\n debouncedUpdateCache = new Map<string, Debounced<unknown>>();\n this.allDebouncedUpdateCache.set(key, debouncedUpdateCache);\n }\n\n return debouncedUpdateCache;\n }\n\n private delete(key: Key, id: string): void {\n const map = this.allDebouncedUpdateCache.get(key);\n if (!map) {\n return;\n }\n\n map.delete(id);\n\n if (!map.size) {\n this.allDebouncedUpdateCache.delete(key);\n }\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {Injectable} from '@angular/core';\n\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nconst enumTypeQuery = gql`\n query EnumType($name: String!) {\n __type(name: $name) {\n __typename\n enumValues {\n name\n description\n }\n }\n }\n`;\n\ninterface EnumType {\n __type: null | {\n __typename: string;\n enumValues: null | Array<{\n name: string;\n description: null | string;\n }>;\n };\n}\n\nexport interface IEnum {\n value: string;\n name: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalEnumService {\n public constructor(private readonly apollo: Apollo) {}\n\n /**\n * Return a list of observable enumerables considering the given name\n */\n public get(name: string): Observable<IEnum[]> {\n // Load possible action statuses\n return this.apollo\n .query<EnumType>({\n query: enumTypeQuery,\n variables: {name: name},\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(result => {\n const values: IEnum[] = [];\n if (result.data.__type && result.data.__type.enumValues) {\n for (const enumValue of result.data.__type.enumValues) {\n values.push({\n value: enumValue.name,\n name: enumValue.description || '',\n });\n }\n }\n\n return values;\n }),\n );\n }\n\n /**\n * Returns the enum user-friendly name, instead of its value.\n */\n public getValueName(value: string, enumName: string): Observable<string> {\n return this.get(enumName).pipe(\n map(values => {\n for (const v of values) {\n if (v.value === value) {\n return v.name;\n }\n }\n\n return '';\n }),\n );\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {FetchResult} from '@apollo/client/core';\nimport {Injectable} from '@angular/core';\n\nimport {clone} from 'lodash-es';\nimport {forkJoin, Observable, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {Literal} from '../types/types';\nimport {upperCaseFirstLetter} from '../classes/utility';\n\n/**\n * Query to get list of mutations\n */\nconst queriesQuery = gql`\n query Mutations {\n __type(name: \"Mutation\") {\n fields {\n name\n args {\n name\n type {\n ofType {\n name\n }\n }\n }\n }\n }\n }\n`;\n\ntype IntrospectedArg = {\n name: string;\n type: {\n ofType: null | {\n name: null | string;\n };\n };\n};\n\ninterface IntrospectedMutations {\n __type: null | {\n fields: null | Array<{\n name: string;\n args: Array<IntrospectedArg>;\n }>;\n };\n}\n\nexport interface LinkableObject {\n id: string;\n __typename: string;\n}\n\ninterface MutationArg {\n name: string;\n type: string;\n}\n\ninterface Mutation {\n name: string;\n arg1: MutationArg;\n arg2: MutationArg;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalLinkMutationService {\n /**\n * Receives the list of available mutations\n */\n private allMutations?: Mutation[];\n\n public constructor(private readonly apollo: Apollo) {}\n\n /**\n * Link two objects together\n */\n public link(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>> {\n // clone prevents to affect the original reference\n const clonedVariables = clone(variables);\n\n return this.getMutation('link', obj1, obj2, otherName, clonedVariables).pipe(\n switchMap(mutation => this.execute(mutation)),\n );\n }\n\n /**\n * Link many objects\n */\n public linkMany(\n obj1: LinkableObject,\n objects: LinkableObject[],\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>[]> {\n return forkJoin(objects.map(obj2 => this.link(obj1, obj2, otherName, variables)));\n }\n\n /**\n * Unlink two objects\n */\n public unlink(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n ): Observable<FetchResult<{id: string}>> {\n return this.getMutation('unlink', obj1, obj2, otherName).pipe(switchMap(mutation => this.execute(mutation)));\n }\n\n /**\n * Return the list of all available mutation names\n */\n private getAllMutationNames(): Observable<Mutation[]> {\n if (this.allMutations) {\n return of(this.allMutations);\n }\n\n const mapArg = (arg: IntrospectedArg): MutationArg => {\n return {\n name: arg.name,\n type: arg.type?.ofType?.name?.replace(/ID$/, '') || 'should-never-happen',\n };\n };\n\n return this.apollo\n .query<IntrospectedMutations>({\n query: queriesQuery,\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(({data}) => {\n if (data.__type && data.__type.fields) {\n this.allMutations = data.__type.fields\n .filter(v => v.name.match(/^(link|unlink)/))\n .map(v => {\n return {\n name: v.name,\n arg1: mapArg(v.args[0]),\n arg2: mapArg(v.args[1]),\n };\n });\n } else {\n this.allMutations = [];\n }\n\n return this.allMutations;\n }),\n );\n }\n\n /**\n * Generate mutation using patterns and replacing variables\n */\n private getMutation(\n action: string,\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null,\n variables: Literal = {},\n ): Observable<string> {\n otherName = otherName ? upperCaseFirstLetter(otherName) : otherName;\n const mutationName = action + obj1.__typename + (otherName || obj2.__typename);\n const reversedMutationName = action + obj2.__typename + (otherName || obj1.__typename);\n\n return this.getAllMutationNames().pipe(\n map(allMutationNames => {\n const mutation =\n allMutationNames.find(mut => mut.name === mutationName) ||\n allMutationNames.find(mut => mut.name === reversedMutationName);\n\n if (mutation) {\n return this.buildTemplate(mutation, obj1, obj2, variables);\n }\n\n throw TypeError('API does not allow to ' + action + ' ' + obj1.__typename + ' and ' + obj2.__typename);\n }),\n );\n }\n\n /**\n * Execute mutation\n */\n private execute(mutation: string): Observable<FetchResult<{id: string}>> {\n return this.apollo\n .mutate<{id: string}>({\n mutation: gql(mutation),\n })\n .pipe(\n map(r => {\n this.apollo.client.reFetchObservableQueries();\n return r;\n }),\n );\n }\n\n /**\n * Build the actual mutation string\n */\n private buildTemplate(\n mutation: Mutation,\n obj1: LinkableObject,\n obj2: LinkableObject,\n variables: Literal = {},\n ): string {\n let name1;\n let name2;\n if (obj1.__typename === mutation.arg1.type) {\n name1 = mutation.arg1.name;\n name2 = mutation.arg2.name;\n } else {\n name1 = mutation.arg2.name;\n name2 = mutation.arg1.name;\n }\n variables[name1] = obj1.id;\n variables[name2] = obj2.id;\n\n let serializedVariables = '';\n for (const key of Object.keys(variables)) {\n serializedVariables += key + ': ' + JSON.stringify(variables[key]) + ' ';\n }\n\n return `mutation linkAndUnlink {\n ${mutation.name}(${serializedVariables}) {\n id\n }\n }`;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NativeDateAdapter} from '@angular/material/core';\n\nconst patterns: readonly RegExp[] = [\n /^(?<day>\\d{1,2})\\.(?<month>\\d{1,2})\\.(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})-(?<month>\\d{1,2})-(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\/(?<month>\\d{1,2})\\/(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\\\(?<month>\\d{1,2})\\\\(?<year>\\d{4}|\\d{2})$/,\n // strict ISO format\n /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/,\n];\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSwissParsingDateAdapter extends NativeDateAdapter {\n /**\n * Parse commonly accepted swiss format, such as:\n *\n * - 24.12.2018\n * - 1.4.18\n * - 2018-12-24\n */\n public override parse(value: unknown): Date | null {\n if (typeof value === 'number') {\n return new Date(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n for (const pattern of patterns) {\n const m = trimmed.match(pattern);\n if (m?.groups) {\n const year = +m.groups.year;\n const month = +m.groups.month;\n const day = +m.groups.day;\n\n return this.createDateIfValid(year, month, day);\n }\n }\n }\n\n return null;\n }\n\n private createDateIfValid(year: number, month: number, date: number): Date | null {\n // Assume year 2000 if only two digits\n if (year < 100) {\n year += 2000;\n }\n\n month = month - 1;\n if (month >= 0 && month <= 11 && date >= 1 && date <= 31) {\n return this.createDate(year, month, date);\n }\n\n return null;\n }\n\n public override getFirstDayOfWeek(): number {\n // Always starts on Monday, even though it is not true for Canada, U.S., Mexico and many more\n // Also see https://github.com/tc39/ecma402/issues/6\n return 1;\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './alert.service';\nexport * from './confirm.component';\n","import {Directive, Host, HostBinding, Inject, InjectionToken, Input, Optional, Self} from '@angular/core';\nimport {MatIcon, MatIconRegistry} from '@angular/material/icon';\nimport {DomSanitizer} from '@angular/platform-browser';\n\ninterface NaturalIconType {\n name: string;\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n}\n\nexport interface NaturalIconConfig {\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n}\n\nexport interface NaturalIconsConfig {\n [key: string]: NaturalIconConfig;\n}\n\nexport const NATURAL_ICONS_CONFIG = new InjectionToken<NaturalIconsConfig>('Configuration for Natural Icons');\n\nconst naturalRegistered: unique symbol = Symbol('Natural icon registered');\n\n/**\n * Allows to use `<mat-icon>` without knowing where an icon comes from (SVG or font) or with aliases for Material font.\n *\n * SVG icons and Material font aliases must be configured ahead of time, via `NATURAL_ICONS_CONFIG`.\n *\n * It also make it easy to give a specific size to the icon via `[size]`.\n *\n * Usage:\n *\n * ```html\n * <mat-icon naturalIcon=\"search\"></mat-icon>\n * <mat-icon naturalIcon=\"my-svg-icon-name\"></mat-icon>\n * <mat-icon naturalIcon=\"my-alias-for-search\"></mat-icon>\n * <mat-icon naturalIcon=\"search\" [size]=\"150\"></mat-icon>\n * ```\n */\n@Directive({\n selector: 'mat-icon[naturalIcon]',\n standalone: true,\n})\nexport class NaturalIconDirective {\n @HostBinding('style.font-size.px')\n @HostBinding('style.min-height.px')\n @HostBinding('style.min-width.px')\n private _size: number | undefined = undefined;\n\n @HostBinding('class') private classes = '';\n\n public constructor(\n private readonly matIconRegistry: MatIconRegistry,\n private readonly domSanitizer: DomSanitizer,\n @Optional() @Inject(NATURAL_ICONS_CONFIG) private readonly config: NaturalIconsConfig | null,\n @Host() @Self() public readonly matIconComponent: MatIcon,\n ) {\n this.registerIcons(config ?? {});\n }\n\n @Input({required: true})\n public set naturalIcon(value: string) {\n const newIcon: NaturalIconType = {\n name: value,\n ...(this.config?.[value] ?? {font: value}),\n };\n\n if (newIcon.class) {\n this.classes = newIcon.class;\n }\n\n this.matIconComponent.fontIcon = undefined!;\n this.matIconComponent.svgIcon = undefined!;\n\n if (newIcon.font) {\n this.matIconComponent.fontIcon = newIcon.font;\n } else if (newIcon.svg) {\n this.matIconComponent.svgIcon = newIcon.name;\n }\n }\n\n @Input()\n public set size(size: number | undefined | null) {\n this._size = size ?? undefined;\n }\n\n private registerIcons(config: NaturalIconsConfig): void {\n // Ensure that this specific instance of registry has our our icons\n // exactly once, not less and not more\n const registry = this.matIconRegistry as any;\n if (registry[naturalRegistered]) {\n return;\n }\n registry[naturalRegistered] = true;\n\n for (const key of Object.keys(config)) {\n const svg = config[key].svg;\n if (svg) {\n this.matIconRegistry.addSvgIcon(key, this.domSanitizer.bypassSecurityTrustResourceUrl(svg));\n }\n }\n }\n}\n","import {Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {AvailableColumn, Button} from './types';\nimport {cancellableTimeout} from '../../classes/rxjs';\nimport {map, Subject} from 'rxjs';\nimport {ThemePalette} from '@angular/material/core';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {FormsModule} from '@angular/forms';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NgIf, NgFor, NgClass, AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'natural-columns-picker',\n templateUrl: './columns-picker.component.html',\n styleUrls: ['./columns-picker.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatButtonModule,\n MatMenuModule,\n MatIconModule,\n NaturalIconDirective,\n NgFor,\n NgClass,\n MatCheckboxModule,\n MatTooltipModule,\n FormsModule,\n AsyncPipe,\n ],\n})\nexport class NaturalColumnsPickerComponent implements OnChanges, OnDestroy {\n private _selections?: string[];\n private _availableColumns: Required<AvailableColumn>[] = [];\n\n @Input()\n public buttons: Readonly<Readonly<Button>[]> | null = [];\n\n /**\n * Set all the columns that are available.\n */\n @Input()\n public set availableColumns(columns: Readonly<Readonly<AvailableColumn>[]> | undefined) {\n this._availableColumns =\n columns?.map(column => {\n return {\n checked: true,\n hidden: false,\n ...column,\n };\n }) ?? [];\n }\n\n /**\n * Set the columns that we would like to select but might be unavailable.\n *\n * If a column is unavailable it will be ignored silently. To know what columns were actually applied\n * you should use `selectionChange`.\n *\n * It is often set once on component initialization, but it can also be set again later in the lifespan of the component.\n */\n @Input()\n public set selections(columns: string[] | undefined) {\n this._selections = columns;\n\n if (!columns || !this._availableColumns.length) {\n return;\n }\n\n this._availableColumns.forEach(col => {\n col.checked = columns.includes(col.id);\n });\n }\n\n /**\n * Emit a list of valid and selected column keys whenever the selection changes\n */\n @Output() public readonly selectionChange = new EventEmitter<string[]>();\n\n /**\n * Displayed options in the dropdown menu\n */\n public displayedColumns: Required<AvailableColumn>[] = [];\n\n private readonly ngUnsubscribe = new Subject<void>();\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n public constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n private initColumns(): void {\n this._availableColumns?.forEach(col => {\n col.checked = this._selections?.length ? this._selections.includes(col.id) : col.checked;\n });\n\n // Show options only for columns that are not hidden\n this.displayedColumns = this._availableColumns.filter(col => !col.hidden) ?? [];\n }\n\n public updateColumns(): void {\n const selectedColumns = this._availableColumns.filter(col => col.checked).map(col => col.id);\n this.selectionChange.emit(selectedColumns);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Unfortunately need a timeout to avoid an ExpressionChangedAfterItHasBeenCheckedError on /state/4989/process\n cancellableTimeout(this.ngUnsubscribe).subscribe(() => {\n if (changes.availableColumns) {\n this.initColumns();\n this.updateColumns();\n } else if (changes.selections) {\n this.updateColumns();\n }\n });\n }\n\n public defaultTrue(value: boolean | undefined): boolean {\n return value ?? true;\n }\n\n public color(button: Button): ThemePalette | null {\n return button.checked ? 'primary' : null;\n }\n\n public useCheckbox(button: Button): boolean {\n return 'checked' in button;\n }\n\n public needMargin(button: Button | null = null): string {\n return this.buttons?.some(this.useCheckbox) && (!button || !this.useCheckbox(button))\n ? 'align-with-checkbox'\n : '';\n }\n\n public someVisibleButtons(): boolean {\n const visibleButtons = this.buttons?.reduce((sum, button) => (this.defaultTrue(button.show) ? 1 : 0), 0) ?? 0;\n\n return visibleButtons > 0;\n }\n}\n","<div>\n <ng-container *ngIf=\"(isMobile | async) && someVisibleButtons(); else elseBlock\">\n <button mat-icon-button [matMenuTriggerFor]=\"mobileMenu\">\n <mat-icon naturalIcon=\"more_vert\"></mat-icon>\n </button>\n\n <mat-menu #mobileMenu=\"matMenu\">\n <ng-template matMenuContent>\n <ng-container *ngFor=\"let button of buttons\">\n <a\n mat-menu-item\n *ngIf=\"button.href\"\n [href]=\"defaultTrue(button.show) && button.href\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [ngClass]=\"needMargin(button)\"\n >\n <mat-checkbox *ngIf=\"useCheckbox(button)\" [checked]=\"button.checked\"></mat-checkbox>\n\n {{ button.label }}\n </a>\n\n <button\n mat-menu-item\n *ngIf=\"defaultTrue(button.show) && !button.href && !button.buttons\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [ngClass]=\"needMargin(button)\"\n >\n <mat-checkbox *ngIf=\"useCheckbox(button)\" [checked]=\"button.checked\"></mat-checkbox>\n\n {{ button.label }}\n </button>\n\n <ng-container *ngIf=\"defaultTrue(button.show) && button.buttons\">\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n (click)=\"button.click?.(button, $event)\"\n [ngClass]=\"needMargin(button)\"\n >\n <mat-checkbox *ngIf=\"useCheckbox(button)\" [checked]=\"button.checked\"></mat-checkbox>\n\n {{ button.label }}\n </button>\n\n <mat-menu #subMenu=\"matMenu\">\n <ng-template matMenuContent>\n <a\n *ngFor=\"let subButton of button.buttons\"\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n </ng-template>\n </mat-menu>\n </ng-container>\n </ng-container>\n\n <button\n *ngIf=\"displayedColumns.length\"\n [matMenuTriggerFor]=\"columnMenu\"\n mat-menu-item\n [ngClass]=\"needMargin(null)\"\n >\n <span i18n>Colonnes</span>\n </button>\n </ng-template>\n </mat-menu>\n </ng-container>\n\n <ng-template #elseBlock>\n <ng-container *ngFor=\"let button of buttons\">\n <a\n mat-icon-button\n *ngIf=\"button.href\"\n [href]=\"defaultTrue(button.show) && button.href\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n >\n <mat-icon [naturalIcon]=\"button.icon\"></mat-icon>\n </a>\n\n <button\n mat-icon-button\n *ngIf=\"defaultTrue(button.show) && !button.href && !button.buttons\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n >\n <mat-icon [naturalIcon]=\"button.icon\"></mat-icon>\n </button>\n\n <ng-container *ngIf=\"defaultTrue(button.show) && button.buttons\">\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"button.click?.(button, $event)\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n >\n <mat-icon [naturalIcon]=\"button.icon\"></mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n <ng-template matMenuContent>\n <a\n *ngFor=\"let subButton of button.buttons\"\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n </ng-template>\n </mat-menu>\n </ng-container>\n </ng-container>\n\n <button\n *ngIf=\"displayedColumns.length\"\n [matMenuTriggerFor]=\"columnMenu\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Sélectionner les colonnes\"\n >\n <mat-icon naturalIcon=\"view_column\"></mat-icon>\n </button>\n </ng-template>\n</div>\n\n<mat-menu #columnMenu=\"matMenu\">\n <ng-template matMenuContent>\n <div\n (click)=\"$event.stopPropagation(); column.checked = !column.checked; updateColumns()\"\n *ngFor=\"let column of displayedColumns\"\n mat-menu-item\n >\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"updateColumns()\" [(ngModel)]=\"column.checked\">{{\n column.label\n }}</mat-checkbox>\n </div>\n </ng-template>\n</mat-menu>\n","/*\n * Public API Surface of natural\n */\n\nexport {AvailableColumn, Button, SubButton} from './types';\nexport * from './columns-picker.component';\n","import {AfterViewInit, Directive, Input} from '@angular/core';\nimport {MatTab, MatTabGroup} from '@angular/material/tabs';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {clone} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\n\n/**\n * Returns an identifier for the tab\n */\nfunction getTabId(tab: MatTab): string {\n return tab.content?.viewContainerRef.element.nativeElement.id ?? '';\n}\n\n/**\n * Usage :\n *\n * <mat-tab-group mat-stretch-tabs=\"false\" [naturalLinkableTab]=\"!isPanel\">\n * <mat-tab label=\"Third 1\">third 1</mat-tab> // First tab doesn't need id. This keeps url clean on default one\n * <mat-tab label=\"Third 2\" id=\"third2\">Third 2</mat-tab>\n * ...\n * </mat-tab-group>\n */\n@Directive({\n selector: 'mat-tab-group[naturalLinkableTab]',\n standalone: true,\n})\nexport class NaturalLinkableTabDirective extends NaturalAbstractController implements AfterViewInit {\n /**\n * If false, disables the persistent navigation\n */\n @Input() public naturalLinkableTab: boolean | '' = true;\n\n public constructor(\n private readonly component: MatTabGroup,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n ) {\n super();\n }\n\n public ngAfterViewInit(): void {\n if (this.naturalLinkableTab === false) {\n return;\n }\n\n // When url params change, update the mat-tab-group selected tab\n this.route.fragment.pipe(takeUntil(this.ngUnsubscribe)).subscribe(fragment => {\n // Get index of tab that matches wanted name\n const tabIndex = this.getTabIndex(fragment);\n\n // If tab index is valid (>= 0) go to given fragment\n // If there is no fragment at all, go to first tab (index is -1 in this case)\n if (tabIndex >= 0 || !fragment) {\n this.component.selectedIndex = tabIndex;\n }\n });\n\n // When mat-tab-groups selected tab change, update url\n this.component.selectedTabChange.pipe(takeUntil(this.ngUnsubscribe)).subscribe(event => {\n const activatedTabName = getTabId(event.tab);\n const segments = this.route.snapshot.url;\n if (!segments.length) {\n // This should never happen in normal usage, because it would means there is no route at all in the app\n throw new Error('Cannot update URL for tabs without any segments in URL');\n }\n\n // Get url matrix params (/segment;matrix=param) only without route params (segment/:id)\n const params = clone(segments[segments.length - 1].parameters);\n\n this.router.navigate(['.', params], {\n relativeTo: this.route,\n queryParamsHandling: 'preserve',\n fragment: activatedTabName && activatedTabName.length ? activatedTabName : undefined,\n });\n });\n }\n\n private getTabIndex(fragment: string | null): number {\n return this.component._tabs.toArray().findIndex(tab => fragment === getTabId(tab));\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {upperCaseFirstLetter} from '../../../classes/utility';\n\n/**\n * Returns the string with the first letter as capital\n */\n@Pipe({\n name: 'capitalize',\n standalone: true,\n})\nexport class NaturalCapitalizePipe implements PipeTransform {\n public transform(value: string | null): string | null {\n if (value) {\n return upperCaseFirstLetter(value);\n }\n\n return value;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'ellipsis',\n standalone: true,\n})\nexport class NaturalEllipsisPipe implements PipeTransform {\n public transform(value: string, limit: number): string {\n return value.substr(0, limit - 1) + (value.length > limit ? '…' : '');\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {NaturalEnumService} from '../../../services/enum.service';\nimport {Observable} from 'rxjs';\n\n/**\n * A pipe to output an enum user-friendly name, instead of its value.\n *\n * Usage would be: {{ element.priority | enum: 'Priority' | async }}\n */\n@Pipe({\n name: 'enum',\n standalone: true,\n})\nexport class NaturalEnumPipe implements PipeTransform {\n public constructor(private readonly enumService: NaturalEnumService) {}\n\n public transform(value: any, enumName: string): Observable<string> {\n return this.enumService.getValueName(value, enumName);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {DatePipe} from '@angular/common';\n\n/**\n * A normal DatePipe but with default formatting to be '12.24.2020 23:30' to match the most common use-cases\n */\n@Pipe({\n name: 'swissDate',\n standalone: true,\n})\nexport class NaturalSwissDatePipe extends DatePipe implements PipeTransform {\n public override transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n public override transform(\n value: Date | string | number | null | undefined,\n format?: string,\n timezone?: string,\n locale?: string,\n ): string | null;\n public override transform(\n value: Date | string | number | null | undefined,\n format = 'dd.MM.y HH:mm',\n timezone?: string,\n locale?: string,\n ): string | null {\n return super.transform(value, format, timezone, locale);\n }\n}\n","import {Inject, Optional, Pipe, PipeTransform} from '@angular/core';\n\nfunction isDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * Returns a string to approximately describe the date.\n *\n * Eg:\n *\n * - \"il y a quelques minutes\"\n * - \"dans 3 jours\"\n * - \"dans 3 ans\"\n */\n@Pipe({\n name: 'timeAgo',\n standalone: true,\n})\nexport class NaturalTimeAgoPipe implements PipeTransform {\n public constructor(\n @Optional() @Inject('SHOULD_NEVER_BE_INJECTED') private readonly fakedNow: number | null = null,\n ) {}\n\n private getNow(): number {\n return this.fakedNow ?? Date.now();\n }\n\n public transform(date: Date | string | null | undefined): string {\n if (!date) {\n return '';\n }\n\n const stamp = isDate(date) ? date.getTime() : Date.parse(date);\n const now = this.getNow();\n\n const $seconds = (stamp - now) / 1000;\n const minutes = $seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n const weeks = days / 7;\n const months = days / 31;\n const years = days / 365;\n\n // Find out the best unit to use for display\n if (years <= -2) {\n const value = Math.round(Math.abs(years));\n return $localize`il y a ${value} ans`;\n } else if (years <= -1) {\n return $localize`il y a un an`;\n } else if (months <= -2) {\n const value = Math.round(Math.abs(months));\n return $localize`il y a ${value} mois`;\n } else if (months <= -1) {\n return $localize`il y a un mois`;\n } else if (weeks <= -2) {\n const value = Math.round(Math.abs(weeks));\n return $localize`il y a ${value} semaines`;\n } else if (weeks <= -1) {\n return $localize`il y a une semaine`;\n } else if (days <= -2) {\n const value = Math.round(Math.abs(days));\n return $localize`il y a ${value} jours`;\n } else if (days <= -1) {\n return $localize`il y a un jour`;\n } else if (hours <= -2) {\n const value = Math.round(Math.abs(hours));\n return $localize`il y a ${value} heures`;\n } else if (hours <= -1) {\n return $localize`il y a une heure`;\n } else if (minutes <= -5) {\n const value = Math.round(Math.abs(minutes));\n return $localize`il y a ${value} minutes`;\n } else if (minutes <= 0) {\n return $localize`il y a quelques minutes`;\n } else if (years > 2) {\n const value = Math.round(years);\n return $localize`dans ${value} ans`;\n } else if (years > 1) {\n return $localize`dans un an`;\n } else if (months > 2) {\n const value = Math.round(months);\n return $localize`dans ${value} mois`;\n } else if (months > 1) {\n return $localize`dans un mois`;\n } else if (weeks > 2) {\n const value = Math.round(weeks);\n return $localize`dans ${value} semaines`;\n } else if (weeks > 1) {\n return $localize`dans une semaine`;\n } else if (days > 2) {\n const value = Math.round(days);\n return $localize`dans ${value} jours`;\n } else if (days > 1) {\n return $localize`dans un jour`;\n } else if (hours > 2) {\n const value = Math.round(hours);\n return $localize`dans ${value} heures`;\n } else if (hours > 1) {\n return $localize`dans une heure`;\n } else if (minutes > 5) {\n const value = Math.round(minutes);\n return $localize`dans ${value} minutes`;\n } else if (minutes > 0) {\n return $localize`dans quelques minutes`;\n } else {\n throw new Error('Time travelling just happened');\n }\n }\n}\n","import {Directive, ElementRef, Input} from '@angular/core';\n\n@Directive({\n selector: 'img[naturalSrcDensity]',\n standalone: true,\n})\nexport class NaturalSrcDensityDirective {\n /**\n * Automatically apply image selection based on screen density.\n *\n * The given URL **MUST** be the normal density URL. And it **MUST** include\n * the size as last path segment. That size will automatically be changed\n * for other screen densities. That means that the server **MUST** be able to\n * serve an image of the given size.\n *\n * Usage:\n *\n * ```html\n * <img [naturalSrcDensity]=\"'/api/image/123/200'\" />\n * ```\n *\n * Will generate something like:\n *\n * ```html\n * <img\n * src=\"/api/image/123/200\"\n * srcset=\"/api/image/123/200, /api/image/123/300 1.5x, /api/image/123/400 2x, /api/image/123/600 3x, /api/image/123/800 4x\"\n * />\n * ```\n *\n * See https://web.dev/codelab-density-descriptors/\n */\n @Input({required: true})\n public set naturalSrcDensity(src: string) {\n if (!src) {\n return;\n }\n\n const match = src.match(/^(.*\\/)(\\d+)$/);\n const base = match?.[1];\n const size = +(match?.[2] ?? 0);\n\n let srcset = '';\n if (base && size) {\n // This should cover most common densities according to https://www.mydevice.io/#tab1\n const size15 = Math.round(size * 1.5);\n const size2 = size * 2;\n const size3 = size * 3;\n const size4 = size * 4;\n\n srcset = `${base}${size}, ${base}${size15} 1.5x, ${base}${size2} 2x, ${base}${size3} 3x, ${base}${size4} 4x`;\n }\n\n this.elementRef.nativeElement.src = src;\n this.elementRef.nativeElement.srcset = srcset;\n }\n\n public constructor(private readonly elementRef: ElementRef<HTMLImageElement>) {}\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Component, OnDestroy} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {ActivatedRoute, Router, RouterLink} from '@angular/router';\n\nexport interface NaturalDialogTriggerRoutingData<T, D> {\n component: ComponentType<T>;\n afterClosedRoute?: RouterLink['routerLink'];\n dialogConfig: MatDialogConfig<D>;\n}\n\nexport type NaturalDialogTriggerProvidedData<D> = {\n data?: Readonly<D> | null;\n activatedRoute: ActivatedRoute;\n};\n\nexport type NaturalDialogTriggerRedirectionValues = RouterLink['routerLink'] | null | undefined | '' | -1;\n\n@Component({\n template: '',\n standalone: true,\n})\nexport class NaturalDialogTriggerComponent<T, D> implements OnDestroy {\n private readonly dialogRef: MatDialogRef<T, NaturalDialogTriggerRedirectionValues>;\n\n private readonly triggerConfig: NaturalDialogTriggerRoutingData<T, D>;\n\n public constructor(\n private readonly dialog: MatDialog,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n ) {\n // Data from activated route\n this.triggerConfig = this.route.snapshot.data.trigger as NaturalDialogTriggerRoutingData<T, D>;\n\n // Get data relative to dialog service configuration\n const {data, ...config} = this.triggerConfig.dialogConfig;\n const dialogConfig: MatDialogConfig<NaturalDialogTriggerProvidedData<D>> = {\n ...config,\n data: {\n data: data,\n // Set data accessible into component instantiated by the dialog service\n activatedRoute: this.route,\n },\n };\n\n this.dialogRef = this.dialog.open<\n T,\n NaturalDialogTriggerProvidedData<D>,\n NaturalDialogTriggerRedirectionValues\n >(this.triggerConfig.component, dialogConfig);\n\n // Redirect on closing (if applicable)\n this.dialogRef.beforeClosed().subscribe(exitValue => this.redirect(exitValue));\n }\n\n /**\n * Called when router leaves route, and so on, closes the modal with undefined value to prevent a new redirection\n */\n public ngOnDestroy(): void {\n if (this.dialogRef) {\n this.dialogRef.close(-1); // -1 = no redirection\n }\n }\n\n /**\n * Redirects on modal closing under following rules/conditions\n *\n * If -1 : no redirection\n * If undefined, null or empty string : uses the router provided redirection route or fallbacks on parent route if router don't provide\n * If a value is provided, should be of type any[] and it's used for redirection.\n */\n public redirect(exitValue: NaturalDialogTriggerRedirectionValues): void {\n const isEmptyExitValue = exitValue == null || exitValue === ''; // undefined, null or ''\n\n if (exitValue === -1) {\n // if -1, don't redirect\n return;\n } else if (!isEmptyExitValue) {\n // If value provided, redirect to that route\n this.router.navigate(exitValue as any[]);\n } else if (isEmptyExitValue && this.triggerConfig.afterClosedRoute) {\n // If value is not provided (null) and router context specified default redirection route, use it\n this.router.navigate(this.triggerConfig.afterClosedRoute as any[]);\n } else if (isEmptyExitValue) {\n // If neither of component or router provides redirection, go to parent (care : parent can't have empty path : ''),\n this.router.navigate(['.'], {relativeTo: this.route.parent});\n }\n }\n}\n","import {Inject, Injectable, InjectionToken} from '@angular/core';\nimport {Meta, Title} from '@angular/platform-browser';\nimport {ActivatedRouteSnapshot, Data, NavigationEnd, PRIMARY_OUTLET, Router} from '@angular/router';\nimport {filter} from 'rxjs/operators';\nimport {NaturalDialogTriggerComponent} from '../../dialog-trigger/dialog-trigger.component';\n\nexport type NaturalSeo = NaturalSeoBasic | NaturalSeoCallback | NaturalSeoResolve;\n\n/**\n * Typically used for \"static\" pages where there is not a single resolved object. So\n * all pages such as \"About\", or list of objects (list of risks, etc.).\n *\n * This should be the most common used variant.\n */\nexport type NaturalSeoBasic = Robots & {\n /**\n * The page title, that will be concatenated with application name\n */\n title: string;\n /**\n * If given will be used as page description, otherwise fallback on default value\n */\n description?: string;\n};\n\n/**\n * Typically used for a \"dynamic\" page where a single object is resolved. So a detail page, such\n * as the detail of a risk and so on.\n */\nexport type NaturalSeoResolve = Robots & {\n /**\n * The key to be used in the resolved data to find the resolved object. The fullName\n * or name of the object will be used for page title, and the object description, if any,\n * will be used for page description.\n */\n resolveKey: string;\n};\n\n/**\n * Rarely used for a page that has very specific needs and need to build title and description in a custom way.\n * The callback back will be given the resolved data, and it is up to the callback to find whatever it needs.\n */\nexport type NaturalSeoCallback = (routeData: Data) => NaturalSeoBasic;\n\ninterface Robots {\n /**\n * If given will be used as robots meta tag, otherwise fallback on default value\n */\n robots?: string;\n}\n\nexport interface NaturalSeoConfig {\n /**\n * The name of the application that will always appear in the page title\n */\n applicationName: string;\n\n /**\n * Default value for description meta that is used for pages without value\n */\n defaultDescription?: string;\n\n /**\n * Default value for robots meta that is used for pages without value\n */\n defaultRobots?: string;\n\n /**\n * If given, the callback will be called for each route and must return a string that will\n * be inserted between the page title and the application name.\n *\n * It should be used to complete the title with info that are often, but not necessarily always,\n * available throughout the entire application. Typically used for the site/state in OKpilot.\n */\n extraPart?: (routeData: Data) => string;\n}\n\nexport const NATURAL_SEO_CONFIG = new InjectionToken<NaturalSeoConfig>('Configuration for SEO service');\n\nexport function stripTags(str: string): string {\n return str.replace(/<\\/?[^>]+>/g, '');\n}\n\ntype ResolvedData = {\n model?: {\n name?: string;\n fullName?: string;\n description?: string;\n };\n};\n\n/**\n * This service is responsible to keep up to date the page title and page description according\n * to what is configured in routing or default values.\n *\n * It **must** be injected in the root module of the application to have effects in all modules. And it\n * must be provided a configuration.\n *\n * The full title has the following structure:\n *\n * dialog title - page title - extra part - app name\n *\n * `dialog title` only exists if a `NaturalDialogTriggerComponent` is currently open, and that some SEO is\n * configured for it in the routing.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSeoService {\n private routeData?: Data;\n\n public constructor(\n @Inject(NATURAL_SEO_CONFIG) private readonly config: NaturalSeoConfig,\n private readonly router: Router,\n private readonly titleService: Title,\n private readonly metaTagService: Meta,\n ) {\n this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {\n const root = this.router.routerState.root.snapshot;\n this.routeData = this.getRouteData(root);\n const seo: NaturalSeo = this.routeData.seo ?? {title: ''};\n\n const dialogRouteData = this.getDialogRouteData(root);\n const dialogSeo: NaturalSeo = dialogRouteData?.seo;\n\n let basic = this.toBasic(seo, this.routeData);\n if (dialogRouteData && dialogSeo) {\n const dialogBasic = this.toBasic(dialogSeo, dialogRouteData);\n basic = {\n ...dialogBasic,\n title: this.join([dialogBasic.title, basic.title]),\n };\n }\n\n this.update(basic);\n });\n }\n\n /**\n * Update the SEO with given info. The extra part and app name will be appended automatically.\n *\n * In most cases this should not be used, and instead the SEO should be configured in the routing,\n * possibly with the callback variant for some dynamism.\n *\n * But in rare cases only the Component is able to build a proper page title, after it gather everything it\n * needed. For those cases the Component can inject this service and update the SEO directly.\n */\n public update(seo: NaturalSeoBasic): void {\n // Title\n const parts = [\n seo.title,\n this.config.extraPart && this.routeData ? this.config.extraPart(this.routeData) : '',\n this.config.applicationName,\n ];\n\n const title = this.join(parts);\n this.titleService.setTitle(title);\n\n // Description\n const description = seo?.description ?? this.config.defaultDescription;\n this.updateTag('description', description);\n\n // Robots\n const robots = seo?.robots ?? this.config.defaultRobots;\n this.updateTag('robots', robots);\n }\n\n private join(parts: string[]): string {\n return parts.filter(s => !!s).join(' - ');\n }\n\n private updateTag(name: string, value?: string): void {\n if (value) {\n this.metaTagService.updateTag({\n name: name,\n value: stripTags(value),\n });\n } else {\n this.metaTagService.removeTag(`name=\"${name}\"`);\n }\n }\n\n /**\n * Returns the data from the most deep/specific activated route\n */\n private getRouteData(route: ActivatedRouteSnapshot): Data {\n if (route.firstChild) {\n return this.getRouteData(route.firstChild);\n } else {\n return route.data;\n }\n }\n\n /**\n * Returns the data from the `NaturalDialogTriggerComponent` if one is open\n */\n private getDialogRouteData(route: ActivatedRouteSnapshot): Data | null {\n if (route.component === NaturalDialogTriggerComponent && route.outlet !== PRIMARY_OUTLET) {\n return route.data;\n }\n\n for (const child of route.children) {\n const data = this.getDialogRouteData(child);\n if (data) {\n return data;\n }\n }\n\n return null;\n }\n\n private toBasic(seo: NaturalSeo, routeData: Data): NaturalSeoBasic {\n if (typeof seo === 'function') {\n return seo(routeData);\n } else if ('resolveKey' in seo) {\n const data: ResolvedData | undefined = routeData[seo.resolveKey];\n if (!data) {\n throw new Error('Could not find resolved data for SEO service with key: ' + seo.resolveKey);\n }\n\n return {\n title: data.model?.fullName ?? data.model?.name ?? '',\n description: data.model?.description,\n robots: seo.robots,\n };\n }\n\n return seo;\n }\n}\n","import {APP_INITIALIZER, inject, Provider} from '@angular/core';\nimport {NATURAL_SEO_CONFIG, NaturalSeoConfig, NaturalSeoService} from './seo.service';\n\n/**\n * Configure and starts `NaturalSeoService`\n */\nexport function provideSeo(config: NaturalSeoConfig): Provider[] {\n return [\n {\n provide: NATURAL_SEO_CONFIG,\n useValue: config,\n },\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: (): (() => void) => {\n // injection required, but works without doing anything else\n inject(NaturalSeoService);\n\n return () => undefined;\n },\n },\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './directives/linkable-tab.directive';\nexport * from './pipes/capitalize.pipe';\nexport * from './pipes/ellipsis.pipe';\nexport * from './pipes/enum.pipe';\nexport * from './pipes/swiss-date.pipe';\nexport {NaturalTimeAgoPipe} from './pipes/time-ago.pipe';\nexport * from './services/memory-storage';\nexport {NaturalSrcDensityDirective} from './directives/src-density.directive';\nexport {\n NATURAL_SEO_CONFIG,\n NaturalSeoConfig,\n NaturalSeoService,\n NaturalSeo,\n NaturalSeoBasic,\n NaturalSeoResolve,\n NaturalSeoCallback,\n} from './services/seo.service';\nexport {provideSeo} from './services/seo.provider';\n","import {Component, Input} from '@angular/core';\nimport {Literal} from '../../types/types';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {RouterLink} from '@angular/router';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NgIf, NgFor} from '@angular/common';\n\n@Component({\n selector: 'natural-detail-header',\n templateUrl: './detail-header.component.html',\n styleUrls: ['./detail-header.component.scss'],\n standalone: true,\n imports: [NgIf, MatButtonModule, RouterLink, NgFor, MatIconModule, NaturalIconDirective],\n})\nexport class NaturalDetailHeaderComponent {\n /**\n * Base URL used to build links, defaults to '/'\n */\n @Input() public currentBaseUrl?: string;\n\n /**\n * Must be set to get proper links when used in panels\n */\n @Input() public isPanel = false;\n\n /**\n * If given will show icon before title\n */\n @Input() public icon = '';\n /**\n * Title shown if model has no name, or empty name.\n *\n * Typically should be the human name for the object type, eg: 'Product'\n */\n @Input() public label = '';\n\n /**\n * Label of the root of the breadcrumb, defaults to the value of `label`.\n *\n * Typically should be the plural form of the object type, eg: 'Products'\n */\n @Input() public rootLabel = '';\n\n /**\n * Title shown if model has no id.\n *\n * Typically should be similar to 'New product'.\n */\n @Input() public newLabel = '';\n @Input({required: true}) public model!: Literal;\n @Input() public breadcrumbs: Literal[] = [];\n @Input() public listRoute: any[] = [];\n @Input() public listFragment: string | undefined;\n @Input() public link?: (id: string) => any[];\n\n public getRootLink(): string[] {\n return [this.currentBaseUrl || '/'].concat(this.listRoute);\n }\n\n public getLink(id: string): any[] {\n if (this.link) {\n return this.getRootLink().concat(this.link(id));\n }\n\n return this.getRootLink().concat([id]);\n }\n}\n","<div class=\"breadcrumb\">\n <a\n *ngIf=\"rootLabel || label\"\n [routerLink]=\"isPanel ? [] : getRootLink()\"\n [fragment]=\"listFragment\"\n color=\"primary\"\n mat-button\n >{{ rootLabel || label }}</a\n >\n <ng-container *ngFor=\"let parent of breadcrumbs\">\n /\n <a [routerLink]=\"isPanel ? [] : getLink(parent.id)\" color=\"primary\" mat-button>\n {{ parent?.fullName || parent?.name }}</a\n >\n </ng-container>\n</div>\n\n<div class=\"body\">\n <div *ngIf=\"icon\" style=\"width: 30px\">\n <mat-icon [naturalIcon]=\"icon\"></mat-icon>\n </div>\n <div *ngIf=\"!model.id\" class=\"mat-headline-5 no-margin newLabel\">{{ newLabel }}</div>\n <div *ngIf=\"model.id\" class=\"mat-headline-5 no-margin label\">{{ model.name || model.fullName || label }}</div>\n <div>\n <ng-content></ng-content>\n </div>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './detail-header.component';\n","import {AfterViewInit, Component, Inject, OnDestroy, ViewChild} from '@angular/core';\nimport {MatSelectionList, MatListModule} from '@angular/material/list';\nimport {BehaviorSubject, merge, Observable, of} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {FormControl, FormGroup, ValidatorFn, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\nimport {map, startWith, takeUntil} from 'rxjs/operators';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from '../types';\nimport {MatOptionModule} from '@angular/material/core';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {NgIf, NgFor} from '@angular/common';\n\nexport type TypeSelectItem =\n | Scalar\n | {\n id: Scalar;\n name: Scalar;\n }\n | {\n value: Scalar;\n name: Scalar;\n };\n\nexport interface TypeSelectConfiguration {\n items: TypeSelectItem[] | Observable<TypeSelectItem[]>;\n multiple?: boolean;\n /**\n * If true (default) a selectbox allows to choose an operator. Otherwise, the selectbox is hidden and the operator will always be `is`.\n */\n operators?: boolean;\n}\n\n@Component({\n templateUrl: './type-select.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n NgIf,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n MatListModule,\n ],\n})\nexport class TypeSelectComponent\n extends NaturalAbstractController\n implements DropdownComponent, AfterViewInit, OnDestroy\n{\n public readonly renderedValue = new BehaviorSubject<string>('');\n @ViewChild(MatSelectionList, {static: false}) public list!: MatSelectionList;\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public items: TypeSelectItem[] = [];\n public readonly configuration: Required<TypeSelectConfiguration>;\n\n private readonly defaults: Required<TypeSelectConfiguration> = {\n items: [],\n multiple: true,\n operators: true,\n };\n\n public constructor(@Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeSelectConfiguration>) {\n super();\n this.configuration = {...this.defaults, ...data.configuration};\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n public ngAfterViewInit(): void {\n if (!this.isMultiple() && this.list) {\n (this.list.selectedOptions as any)._multiple = false;\n }\n }\n\n public getId(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item) {\n return (item as any).id || (item as any).value;\n }\n\n return item as Scalar;\n }\n\n public getDisplay(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item && item.name) {\n return item.name;\n }\n\n return item as Scalar;\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const values = this.valueCtrl.value;\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private isMultiple(): boolean {\n return this.configuration.multiple;\n }\n\n private getItemById(id: Scalar): TypeSelectItem | undefined {\n return this.items.find(item => this.getId(item) === id);\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (condition) {\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n }\n\n // Always reload value, even without condition because we need to load list of available items in all cases\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n private reloadValue(condition: FilterGroupConditionField | null): Observable<Scalar[]> {\n const wantedIds = condition?.in?.values ?? [];\n\n const items$ = Array.isArray(this.configuration.items)\n ? of(this.configuration.items)\n : this.configuration.items;\n\n return items$.pipe(\n takeUntil(this.ngUnsubscribe),\n map(items => {\n this.items = items;\n\n // Reload selection, according to possible values from configuration\n const possibleIds = this.items.map(item => this.getId(item));\n const wantedAndPossibleIds = wantedIds.filter(id => possibleIds.some(i => i === id));\n\n return wantedAndPossibleIds;\n }),\n );\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection =\n this.valueCtrl.value\n ?.map((id: Scalar) => {\n const item = this.getItemById(id);\n if (item) {\n return this.getDisplay(item);\n }\n })\n .join(', ') ?? null;\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (!this.configuration.operators) {\n return 'is';\n }\n\n if (condition.in && !condition.in.not) {\n return 'is';\n } else if (condition.in && condition.in.not) {\n return 'isnot';\n } else if (condition.null && condition.null.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n private operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: Scalar[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {in: {values: values}};\n case 'isnot':\n return {in: {values: values, not: true}};\n case 'any':\n return {null: {not: true}};\n case 'none':\n return {null: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + key);\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" *ngIf=\"configuration.operators\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-selection-list *ngIf=\"requireValueCtrl\" [formControl]=\"valueCtrl\">\n <mat-list-option *ngFor=\"let item of items\" [value]=\"getId(item)\" checkboxPosition=\"before\">\n {{ getDisplay(item) }}\n </mat-list-option>\n </mat-selection-list>\n</form>\n","import {Directive, Inject} from '@angular/core';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../search/types/dropdown-component';\nimport {FormControl, FormGroup, ValidatorFn, Validators} from '@angular/forms';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from './types';\nimport {startWith} from 'rxjs/operators';\n\n@Directive()\nexport abstract class AbstractAssociationSelectComponent<C> implements DropdownComponent {\n public readonly configuration: C;\n public readonly renderedValue = new BehaviorSubject<string>('');\n\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public constructor(@Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<C>) {\n this.configuration = data.configuration;\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n protected abstract reloadValue(condition: FilterGroupConditionField): Observable<unknown>;\n\n protected abstract renderValueWithoutOperator(): string;\n\n public abstract getCondition(): FilterGroupConditionField;\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n protected getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection = this.renderValueWithoutOperator();\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n protected conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (condition.have && !condition.have.not) {\n return 'is';\n } else if (condition.have && condition.have.not) {\n return 'isnot';\n } else if (condition.empty && condition.empty.not) {\n return 'any';\n } else if (condition.empty && !condition.empty.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n protected operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: string[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {have: {values: values}};\n case 'isnot':\n return {have: {values: values, not: true}};\n case 'any':\n return {empty: {not: true}};\n case 'none':\n return {empty: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + key);\n }\n }\n}\n","import {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, DoCheck, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormControlDirective,\n FormControlName,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\n\n/**\n * This will completely ignore internal formControl and instead use the one from the component\n * which comes from outside of this component. This basically allows us to **not** depend on\n * touched status propagation between outside and inside world, and thus get rid of our legacy\n * custom FormControl class (\"NaturalFormControl\").\n */\nclass ExternalFormControlMatcher<T, I> extends ErrorStateMatcher {\n public constructor(private readonly component: AbstractSelect<T, I>) {\n super();\n }\n\n public override isErrorState(): boolean {\n const externalCtrl = this.component.ngControl?.control || this.component.internalCtrl;\n if (externalCtrl) {\n return !!(externalCtrl.errors && (externalCtrl.touched || externalCtrl.dirty));\n }\n\n return false;\n }\n}\n\n@Directive()\nexport abstract class AbstractSelect<V, I>\n extends NaturalAbstractController\n implements OnInit, OnDestroy, ControlValueAccessor, DoCheck\n{\n @Input() public placeholder?: string;\n\n /**\n * If the field is required\n */\n @Input()\n public set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.applyRequired();\n }\n\n public get required(): boolean {\n return !!this._required;\n }\n\n private _required: boolean | undefined;\n\n /**\n * Add a suffix button that is a link to given destination\n */\n @Input() public navigateTo?: any[] | string | null;\n\n /**\n * If provided cause a new clear button to appear\n */\n @Input() public clearLabel?: string;\n\n /**\n * Whether to show the search icon\n */\n @Input() public showIcon = true;\n\n /**\n * Icon name\n */\n @Input() public icon = 'search';\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n @Input() public displayWith?: (item: V | null) => string;\n\n /**\n * Emit the selected value whenever it changes\n */\n @Output() public readonly selectionChange = new EventEmitter<V | null>();\n\n /**\n * Emits when internal input is blurred\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() public readonly blur = new EventEmitter<void>();\n\n /**\n * Contains internal representation for current selection AND searched text (for autocomplete)\n *\n * It is **not** necessarily `V | null`.\n *\n * - NaturalSelectComponent: `string | V | null`. We allow `string`\n * only when `optionRequired` is false, so most of the time it is `V | null`.\n * - NaturalSelectHierarchicComponent: `string | null`.\n * - NaturalSelectEnumComponent: `V | null`.\n *\n * In natural-select context, we use pristine and dirty to identify if the displayed value is search or committed model :\n * - Pristine status (unchanged value) means the model is displayed and propagated = the selection is committed\n * - Dirty status (changed value) means we are in search/autocomplete mode\n */\n public readonly internalCtrl = new FormControl<I | null>(null);\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onChange?: (item: V | null) => void;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onTouched?: () => void;\n\n public readonly matcher: ExternalFormControlMatcher<V, I>;\n\n public constructor(@Optional() @Self() public readonly ngControl: NgControl | null) {\n super();\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.matcher = new ExternalFormControlMatcher(this);\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.applyRequired();\n }\n }\n\n public writeValue(value: I | null): void {\n this.internalCtrl.setValue(value);\n }\n\n public ngOnInit(): void {\n const isReactive = this.ngControl instanceof FormControlDirective || this.ngControl instanceof FormControlName;\n if (isReactive && typeof this._required !== 'undefined') {\n console.warn('<natural-select-*> should not be used as ReactiveForm and with the [required] attribute');\n }\n }\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public registerOnChange(fn: (item: V | null) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public abstract getDisplayFn(): (item: V | null) => string;\n\n /**\n * Commit the model to null\n * Emit and event to update the model\n */\n public clear(): void {\n this.internalCtrl.setValue(null);\n this.propagateValue(null);\n }\n\n /**\n * If input is dirty (search running) restore to model value\n */\n public onBlur(): void {\n this.touch();\n this.blur.emit();\n }\n\n /**\n * Commit the model change\n */\n public propagateValue(value: V | null): void {\n // before selectionChange to allow formControl to update before change is effectively emitted\n if (this.onChange) {\n this.onChange(value);\n }\n\n this.selectionChange.emit(value);\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel && !!this.internalCtrl.value;\n }\n\n public touch(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n public hasRequiredError(): boolean {\n const control = this.ngControl?.control ? this.ngControl?.control : this.internalCtrl;\n\n return control.hasError('required');\n }\n\n /**\n * Apply Validators.required on the internal form, based on ngControl or [required] attribute, giving priority to attribute.\n */\n private applyRequired(): void {\n // Required status on parent validator\n const outerRequiredStatus = this?.ngControl?.control?.validator?.({} as AbstractControl)?.required;\n\n // Wanted required status, giving priority to template\n const newRequiredStatus = typeof this._required !== 'undefined' ? this._required : outerRequiredStatus;\n\n // Actual internal validation status\n const currentRequiredStatus = this.internalCtrl?.validator?.({} as AbstractControl)?.required;\n\n // If wanted status is similar to actual status, stop everything\n if (currentRequiredStatus === newRequiredStatus) {\n return;\n }\n\n // Apply only if changed\n if (newRequiredStatus) {\n this.internalCtrl.setValidators(Validators.required);\n } else {\n this.internalCtrl.clearValidators();\n }\n\n this.internalCtrl.updateValueAndValidity();\n }\n}\n","import {AfterViewInit, Component, ContentChild, Input, OnDestroy, OnInit, TemplateRef, ViewChild} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocompleteTrigger, MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {merge} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, finalize, map, takeUntil} from 'rxjs/operators';\nimport {PaginatedData} from '../../../classes/data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall, Literal} from '../../../types/types';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgTemplateOutlet, NgIf, AsyncPipe} from '@angular/common';\n\ntype V<TService> = string | ExtractTallOne<TService>;\n\n/**\n * Default usage:\n * ```html\n * <natural-select [service]=\"myServiceInstance\" [(model)]=\"myModel\" (modelChange)=myChangeFn($event)></natural-select>\n * ```\n *\n * Custom template usage :\n * ```html\n * <natural-select [service]=\"svc\" [(ngModel)]=\"model\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-select>\n * ```\n *\n * `[(ngModel)]` and `(ngModelChange)` are optional.\n *\n * Placeholder :\n * ```html\n * <natural-select placeholder=\"my placeholder\"></natural-select>\n * ```\n *\n * Search with like %xxx% on specified field `name` instead of custom filter on whole object\n * ```html\n * <natural-select searchField=\"name\"></natural-select>\n * ```\n *\n * Allows to input free string without selecting an option from autocomplete suggestions\n * ```html\n * <natural-select [optionRequired]=\"false\"></natural-select>\n * ```\n */\n@Component({\n selector: 'natural-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n standalone: true,\n imports: [\n MatAutocompleteModule,\n NgFor,\n MatOptionModule,\n NgTemplateOutlet,\n NgIf,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n ReactiveFormsModule,\n MatIconModule,\n NaturalIconDirective,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatTooltipModule,\n RouterLink,\n AsyncPipe,\n ],\n})\nexport class NaturalSelectComponent<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends AbstractSelect<V<TService>, V<TService>>\n implements OnInit, OnDestroy, ControlValueAccessor, AfterViewInit\n{\n @ViewChild(MatAutocompleteTrigger) public autoTrigger!: MatAutocompleteTrigger;\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<any>;\n\n /**\n * Service with watchAll function that accepts queryVariables.\n */\n @Input({required: true}) public service!: TService;\n\n /**\n * If false, allows to input free string without selecting an option from autocomplete suggestions\n */\n @Input() public optionRequired = true;\n\n /**\n * The field on which to search for, default to 'custom'.\n */\n @Input() public searchField: 'custom' | string = 'custom';\n\n /**\n * The operator with which to search for, default to 'search' if `searchField` is 'custom', else 'like'.\n */\n @Input() public searchOperator: 'search' | string | null = null;\n\n /**\n * Cache the committed value during search mode.\n * It's used to be restored in case we cancel the selection\n */\n private lastValidValue: V<TService> | null = null;\n\n /**\n * Additional filter for query\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter'] | null | undefined) {\n this.variablesManager.set('additional-filter', {filter: filter});\n }\n\n /**\n * Items returned by server to show in listing\n */\n public items: null | Observable<readonly any[]> = null;\n\n /**\n * Whether we are searching something\n */\n public loading = false;\n\n /**\n * Number of items not shown in result list\n * Shows a message after list if positive\n */\n public moreNbItems = 0;\n\n /**\n * Default page size\n */\n private pageSize = 10;\n\n /**\n * Init search options\n */\n private variablesManager = new NaturalQueryVariablesManager<QueryVariables>();\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public override set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public ngAfterViewInit(): void {\n this.internalCtrl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged(), debounceTime(300))\n .subscribe(val => this.search(val));\n }\n\n public onInternalFormChange(): void {\n // If we allow free string typing, then we propagate it as it is being typed\n if (!this.optionRequired) {\n this.propagateValue(this.internalCtrl.value);\n }\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.initService();\n }\n\n public override onBlur(): void {\n if (this.internalCtrl.dirty) {\n this.reset();\n }\n super.onBlur();\n }\n\n /**\n * Reset form to it's initial value\n * Discard searched text (in autocomplete use case)\n * Doest not commit the change to the model (no change event is emitted)\n */\n public reset(): void {\n this.internalCtrl.setValue(this.lastValidValue);\n this.internalCtrl.markAsPristine();\n }\n\n /**\n * Enter semantic means we want to validate something.\n * If we hit ENTER while typing a text, the stroke is ignored because the value is invalid (it's accepted in free text mode)\n * If we hit ENTER while the input field is empty, we validate the unselection (empty is a valid value)\n */\n public onKeyEnter(): void {\n if (!this.internalCtrl.value) {\n this.clear();\n this.autoTrigger.closePanel();\n }\n }\n\n public override writeValue(value: V<TService> | null): void {\n super.writeValue(value);\n this.lastValidValue = this.internalCtrl.value;\n }\n\n private initService(): void {\n // Assert given service has a watchAll function\n if (typeof this.service.watchAll !== 'function') {\n throw new TypeError('Provided service does not contain watchAll function');\n }\n\n const defaultPagination = {\n pagination: {\n pageIndex: 0,\n pageSize: this.pageSize,\n },\n };\n\n const variables = merge(defaultPagination, this.getSearchFilter(null));\n this.variablesManager.set('variables', variables);\n }\n\n public startSearch(): void {\n // Start search only once\n if (this.items) {\n return;\n }\n\n // Init query, and when query results arrive, finish loading, and count items\n this.items = this.service.watchAll(this.variablesManager).pipe(\n takeUntil(this.ngUnsubscribe),\n finalize(() => (this.loading = false)),\n map(data => {\n this.loading = false;\n const nbTotal = data.length;\n const nbListed = Math.min(data.length, this.pageSize);\n this.moreNbItems = nbTotal - nbListed;\n\n return data.items;\n }),\n );\n\n this.loading = true;\n this.items.subscribe();\n }\n\n /**\n * Commit the model change\n * Set internal form as pristine to reflect that the visible value match the model\n */\n public override propagateValue(value: V<TService> | null): void {\n this.internalCtrl.markAsPristine();\n this.lastValidValue = this.internalCtrl.value;\n this.loading = false;\n\n // If we cleared value via button, but we allow free string typing, then force to empty string\n if (!this.optionRequired && value === null) {\n value = '';\n }\n\n super.propagateValue(value);\n }\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: V<TService> | null) => string {\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return (item: any) => {\n if (!item) {\n return '';\n }\n\n if (typeof item === 'string') {\n return item;\n }\n\n return item.fullName || item.name || item.iban || item[this.searchField] || item.id;\n };\n }\n\n public override clear(): void {\n this.search(null);\n super.clear();\n }\n\n public search(term: V<TService> | null): void {\n if (typeof term === 'string' || term === null) {\n if (term) {\n this.loading = !!this.items;\n }\n\n this.variablesManager.merge('variables', this.getSearchFilter(term));\n }\n }\n\n public override showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel && !!this.internalCtrl.value;\n }\n\n private getSearchFilter(term: string | null): QueryVariables {\n const searchOperator = this.searchOperator ?? (this.searchField === 'custom' ? 'search' : 'like');\n if (term && searchOperator === 'like') {\n term = '%' + term + '%';\n }\n\n return {\n filter: {\n groups: [\n {\n conditions: [\n {\n [this.searchField]: term\n ? {\n [searchOperator]: {value: term},\n }\n : null,\n },\n ],\n },\n ],\n },\n };\n }\n\n public getVariablesForDebug(): Readonly<QueryVariables> | undefined {\n return this.variablesManager.variables.value;\n }\n}\n","<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n <mat-option *ngFor=\"let item of items | async\" [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n ></ng-template>\n </mat-option>\n <div *ngIf=\"moreNbItems > 0\" class=\"mat-caption\" i18n style=\"padding: 5px 10px\"\n >{{ moreNbItems }} élément(s) supplémentaire(s)</div\n >\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n <!-- Meta data -->\n <mat-icon *ngIf=\"!loading && showIcon\" [naturalIcon]=\"icon\" matIconPrefix></mat-icon>\n\n <div class=\"loading-wrapper\" matIconPrefix *ngIf=\"loading\">\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\"></mat-progress-spinner>\n </div>\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matIconSuffix>\n <button\n *ngIf=\"internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel\"\n (click)=\"clear()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Désélectionner\"\n >\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.dirty && internalCtrl.enabled && optionRequired\"\n (click)=\"reset()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Annuler la recherche\"\n >\n <mat-icon naturalIcon=\"undo\"></mat-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.pristine && internalCtrl.value && navigateTo\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\"></mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error>\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n<div *ngIf=\"showClearButton()\" class=\"external-buttons\">\n <button (click)=\"clear()\" *ngIf=\"showClearButton()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n</div>\n","import {Component} from '@angular/core';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {ExtractTone, ExtractVall} from '../../../types/types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {NaturalSelectComponent} from '../../select/select/select.component';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport interface TypeSelectNaturalConfiguration<\n TService extends NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>,\n> {\n service: TService;\n placeholder: string;\n filter?: ExtractVall<TService>['filter'];\n}\n\n@Component({\n templateUrl: './type-natural-select.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n NgIf,\n NaturalSelectComponent,\n ],\n})\nexport class TypeNaturalSelectComponent<\n TService extends NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>,\n> extends AbstractAssociationSelectComponent<TypeSelectNaturalConfiguration<TService>> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const id = this.valueCtrl.value?.id;\n const values = id ? [id] : [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n protected reloadValue(condition: FilterGroupConditionField): Observable<ExtractTone<TService>> {\n if (!condition.have) {\n return EMPTY;\n }\n\n return this.configuration.service.getOne(condition.have.values[0]);\n }\n\n protected renderValueWithoutOperator(): string {\n const selected: {id: string; name?: string; fullName?: string} | null = this.valueCtrl.value;\n const selectedName = selected?.fullName || selected?.name || '';\n\n return selectedName;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <natural-select\n style=\"display: inline\"\n *ngIf=\"configuration && requireValueCtrl\"\n [formControl]=\"valueCtrl\"\n [placeholder]=\"configuration.placeholder\"\n [service]=\"configuration.service\"\n [filter]=\"configuration.filter\"\n ></natural-select>\n</form>\n","import {Component, Inject} from '@angular/core';\nimport {FormControl, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {NgIf} from '@angular/common';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport class InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl | null): boolean {\n return control && control.invalid && control.value;\n }\n}\n\n@Component({\n templateUrl: './type-text.component.html',\n styleUrls: ['./type-text.component.scss'],\n standalone: true,\n imports: [MatFormFieldModule, MatInputModule, FormsModule, ReactiveFormsModule, NgIf],\n})\nexport class TypeTextComponent implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly formCtrl = new FormControl('', {nonNullable: true});\n public readonly matcher = new InvalidWithValueStateMatcher();\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<never>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.formCtrl.valueChanges.subscribe(value => {\n this.renderedValue.next(value === null ? '' : this.formCtrl.value + '');\n });\n\n this.formCtrl.setValidators([Validators.required]);\n\n if (data.condition && data.condition.like) {\n this.formCtrl.setValue('' + data.condition.like.value);\n }\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.formCtrl.value) {\n return {};\n }\n\n return {like: {value: this.formCtrl.value}};\n }\n\n public isValid(): boolean {\n return this.formCtrl.valid;\n }\n\n public isDirty(): boolean {\n return this.formCtrl.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n}\n","<mat-form-field>\n <mat-label i18n>Valeur</mat-label>\n <input\n (keydown.enter)=\"close()\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"formCtrl\"\n [required]=\"true\"\n matInput\n type=\"text\"\n />\n <mat-error *ngIf=\"formCtrl.hasError('required')\">*</mat-error>\n</mat-form-field>\n","import {Component, Inject} from '@angular/core';\nimport {FormControl, FormGroup, ValidatorFn, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {possibleComparableOperators, PossibleComparableOpertorKeys} from '../types';\nimport {InvalidWithValueStateMatcher} from '../type-text/type-text.component';\nimport {decimal} from '../../../classes/validators';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport interface TypeNumberConfiguration {\n min?: number | null;\n max?: number | null;\n step?: number | null;\n}\n\n@Component({\n templateUrl: './type-number.component.html',\n styleUrls: ['./type-number.component.scss'],\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n MatInputModule,\n NgIf,\n ],\n})\nexport class TypeNumberComponent implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeNumberConfiguration>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOpertorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n public readonly operators = possibleComparableOperators;\n\n private readonly defaults: Required<TypeNumberConfiguration> = {\n min: null,\n max: null,\n step: null,\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeNumberConfiguration>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const condition: FilterGroupConditionField = {};\n condition[this.operatorCtrl.value] = {\n value: this.valueCtrl.value,\n };\n\n return condition;\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(Validators.min(this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(Validators.max(this.configuration.max));\n }\n\n if (this.configuration.step) {\n const decimals = ('' + this.configuration.step).match(/\\.(\\d+)$/)?.[1] ?? '';\n const decimalCount = decimals.length;\n validators.push(decimal(decimalCount));\n }\n\n this.valueCtrl.setValidators(validators);\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n for (const operator of this.operators) {\n const reloadedCondition = condition[operator.key];\n if (reloadedCondition) {\n this.operatorCtrl.setValue(operator.key);\n this.valueCtrl.setValue(reloadedCondition.value);\n }\n }\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (this.valueCtrl.value === null || !operator) {\n return '';\n } else {\n return operator.label + ' ' + this.valueCtrl.value;\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 4em; margin-right: 1em\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Valeur</mat-label>\n <input\n (keydown.enter)=\"close()\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"valueCtrl\"\n [attr.max]=\"configuration.max\"\n [attr.min]=\"configuration.min\"\n [required]=\"true\"\n [step]=\"configuration.step\"\n matInput\n type=\"number\"\n />\n <mat-error *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</mat-error>\n </mat-form-field>\n</form>\n","import {HierarchicModelNode} from './model-node';\n\nexport class HierarchicFlatNode {\n public loading = false;\n\n public constructor(\n public readonly node: HierarchicModelNode,\n public readonly name: string,\n public readonly level: number = 0,\n public expandable: boolean = false,\n public readonly selectable: boolean = true,\n public deselectable: boolean = true,\n ) {}\n}\n","import {BehaviorSubject} from 'rxjs';\nimport {NaturalHierarchicConfiguration} from './hierarchic-configuration';\nimport {NameOrFullName} from '../../../types/types';\n\nexport type HierarchicModel = {__typename: string} & NameOrFullName;\n\nexport class HierarchicModelNode {\n public childrenChange: BehaviorSubject<HierarchicModelNode[]> = new BehaviorSubject<HierarchicModelNode[]>([]);\n\n public constructor(\n public readonly model: HierarchicModel,\n public readonly config: NaturalHierarchicConfiguration,\n ) {}\n\n public get children(): HierarchicModelNode[] {\n return this.childrenChange.value;\n }\n}\n","import {Injectable, Injector} from '@angular/core';\nimport {intersection} from 'lodash-es';\nimport {BehaviorSubject, first, forkJoin, Observable} from 'rxjs';\n\nimport {finalize, map} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {HierarchicFlatNode} from '../classes/flat-node';\nimport {\n NaturalHierarchicConfiguration,\n NaturalHierarchicServiceConfiguration,\n} from '../classes/hierarchic-configuration';\nimport {\n HierarchicFilterConfiguration,\n HierarchicFiltersConfiguration,\n} from '../classes/hierarchic-filters-configuration';\nimport {HierarchicModel, HierarchicModelNode} from '../classes/model-node';\nimport {Literal} from '../../../types/types';\nimport {FilterGroupCondition} from '../../search/classes/graphql-doctrine.types';\n\nexport interface OrganizedModelSelection {\n [key: string]: any[];\n}\n\ninterface ContextualizedConfig {\n configuration: NaturalHierarchicServiceConfiguration;\n variablesManager: NaturalQueryVariablesManager;\n}\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorService {\n /**\n * Stores the global result of the tree\n * This observable contains Node.\n * When it's updated, the TreeController and TreeFlattener process the new array to generate the flat tree.\n */\n public readonly dataChange: BehaviorSubject<HierarchicModelNode[]> = new BehaviorSubject<HierarchicModelNode[]>([]);\n\n /**\n * Configuration for relations and selection constraints\n *\n * The list should be sorted in the order of the hierarchic (list first parent rules, then child rules)\n */\n private configuration: NaturalHierarchicConfiguration[] = [];\n\n public constructor(private readonly injector: Injector) {}\n\n /**\n * Init component by saving the complete configuration, and then retrieving root elements.\n * Updates **another** observable (this.dataChange) when data is retrieved.\n */\n public init(\n config: NaturalHierarchicConfiguration[],\n contextFilter: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n ): Observable<unknown> {\n this.validateConfiguration(config);\n this.configuration = this.injectServicesInConfiguration(config);\n return this.getList(null, contextFilter, searchVariables).pipe(map(data => this.dataChange.next(data)));\n }\n\n /**\n * Get list of children, considering given FlatNode id as a parent.\n * Mark loading status individually on nodes.\n */\n public loadChildren(\n flatNode: HierarchicFlatNode,\n contextFilter: HierarchicFiltersConfiguration | null = null,\n ): void {\n // Dont refetch children. Improve performances\n // Prevents interferences between HierarchicModelNode structure and angular components navigation.\n // Prevents a bug where grand children were lost if closing root\n if (flatNode.node.children.length) {\n return;\n }\n\n flatNode.loading = true;\n this.getList(flatNode, contextFilter)\n .pipe(finalize(() => (flatNode.loading = false)))\n .subscribe(items => {\n flatNode.node.childrenChange.next(items);\n this.dataChange.next(this.dataChange.value);\n });\n }\n\n public search(searchVariables: QueryVariables, contextFilter: HierarchicFiltersConfiguration | null = null): void {\n this.getList(null, contextFilter, searchVariables).subscribe(items => {\n this.dataChange.next(items);\n });\n }\n\n /**\n * Retrieve elements from the server\n * Get root elements if node is null, or child elements if node is given\n */\n private getList(\n node: HierarchicFlatNode | null = null,\n contextFilters: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n ): Observable<HierarchicModelNode[]> {\n const configurations = this.getContextualizedConfigs(node, contextFilters, searchVariables);\n const observables = configurations.map(c => c.configuration.injectedService.getAll(c.variablesManager));\n\n // Fire queries, and merge results, transforming apollo items into Node Object.\n return forkJoin(observables).pipe(\n map(results => {\n const listing: HierarchicModelNode[] = [];\n\n // For each result of an observable\n for (let i = 0; i < results.length; i++) {\n // For each item of the result, convert into Node object\n for (const item of results[i].items) {\n listing.push(this.getOrCreateModelNode(item, configurations[i].configuration));\n }\n }\n\n return listing;\n }),\n );\n }\n\n public countItems(node: HierarchicFlatNode, contextFilters: HierarchicFiltersConfiguration | null = null): void {\n const configurations = this.getContextualizedConfigs(node, contextFilters, null);\n const observables = configurations.map(c =>\n c.configuration.injectedService.count(c.variablesManager).pipe(first()),\n );\n\n forkJoin(observables).subscribe(results => {\n const totalItems = results.reduce((total, length) => total + length, 0);\n node.expandable = totalItems > 0;\n });\n }\n\n private getContextualizedConfigs(\n node: HierarchicFlatNode | null = null,\n contextFilters: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n ): ContextualizedConfig[] {\n const configsAndServices: ContextualizedConfig[] = [];\n\n // Considering the whole configuration may cause queries with no/wrong results we have imperatively to avoid !\n // e.g there are cross dependencies between equipments and taxonomies filters. Both have \"parents\" and \"taxonomies\" filters...\n // When clicking on a equipment, the configuration of taxonomies with match \"parents\" filter, but use the id of the equipment\n // To fix this, we should only consider configuration after the one given by the node passed as argument.\n // That would mean : no child can affect parent.\n // That would mean : sorting in the configuration have semantic/hierarchy implications\n const configs = node ? this.getNextConfigs(node.node.config) : this.configuration;\n\n const pagination = {pageIndex: 0, pageSize: 999};\n\n for (const config of configs) {\n const item: ContextualizedConfig = {} as ContextualizedConfig;\n const contextFilter = this.getFilterByService(config, contextFilters);\n const filter = this.getServiceFilter(node, config, contextFilter, !!searchVariables);\n\n if (!filter || !config.injectedService) {\n continue;\n }\n\n const variablesManager = new NaturalQueryVariablesManager();\n\n variablesManager.set('variables', {filter: filter, pagination: pagination});\n variablesManager.set('config-filter', {filter: config.filter});\n\n if (searchVariables) {\n variablesManager.set('natural-search', searchVariables);\n }\n\n // Cast NaturalHierarchicServiceConfiguration because the undefined\n // injectedServices are filtered earlier and we can validate value\n item.configuration = config as NaturalHierarchicServiceConfiguration;\n item.variablesManager = variablesManager;\n configsAndServices.push(item);\n }\n\n return configsAndServices;\n }\n\n /**\n * Return models matching given FlatNodes\n * Returns a Literal of models grouped by their configuration attribute \"selectableAtKey\"\n */\n public toOrganizedSelection(nodes: HierarchicModelNode[]): OrganizedModelSelection {\n const selection = this.configuration.reduce((group, config) => {\n if (config.selectableAtKey) {\n group[config.selectableAtKey] = [];\n }\n return group;\n }, {} as Literal);\n\n for (const node of nodes) {\n if (node.config.selectableAtKey) {\n selection[node.config.selectableAtKey].push(node.model);\n }\n }\n\n return selection;\n }\n\n /**\n * Transforms an OrganizedModelSelection into a list of ModelNodes\n */\n public fromOrganizedSelection(organizedModelSelection: OrganizedModelSelection): HierarchicModelNode[] {\n if (!organizedModelSelection) {\n return [];\n }\n\n const result: HierarchicModelNode[] = [];\n for (const selectableAtKey of Object.keys(organizedModelSelection)) {\n const config = this.getConfigurationBySelectableKey(selectableAtKey);\n if (config) {\n for (const model of organizedModelSelection[selectableAtKey]) {\n result.push(new HierarchicModelNode(model, config));\n }\n }\n }\n return result;\n }\n\n private injectServicesInConfiguration(\n configurations: NaturalHierarchicConfiguration[],\n ): NaturalHierarchicConfiguration[] {\n for (const config of configurations) {\n if (!config.injectedService) {\n config.injectedService = this.injector.get(config.service);\n }\n }\n\n return configurations;\n }\n\n /**\n * Checks that each configuration.selectableAtKey attribute is unique\n */\n private validateConfiguration(configurations: NaturalHierarchicConfiguration[]): void {\n const selectableAtKeyAttributes: string[] = [];\n for (const config of configurations) {\n if (config.selectableAtKey) {\n const keyIndex = selectableAtKeyAttributes.indexOf(config.selectableAtKey);\n\n if (keyIndex === -1 && config.selectableAtKey) {\n selectableAtKeyAttributes.push(config.selectableAtKey);\n }\n\n // TODO : remove ?\n // This behavior maybe dangerous in case we re-open hierarchical selector with the last returned config having non-unique\n // keys\n if (keyIndex < -1) {\n console.warn('Invalid hierarchic configuration : selectableAtKey attribute should be unique');\n }\n }\n }\n }\n\n /**\n * Return configurations setup in the list after the given one\n */\n private getNextConfigs(config: NaturalHierarchicConfiguration): NaturalHierarchicConfiguration[] {\n const configIndex = this.configuration.findIndex(c => c === config);\n return this.configuration.slice(configIndex);\n }\n\n /**\n * Builds queryVariables filter for children query\n */\n private getServiceFilter(\n flatNode: HierarchicFlatNode | null,\n config: NaturalHierarchicConfiguration,\n contextFilter: HierarchicFilterConfiguration['filter'] | null = null,\n allDeeps = false,\n ): HierarchicFilterConfiguration['filter'] | null {\n const fieldCondition: FilterGroupCondition = {};\n\n // if no parent, filter empty elements\n if (!flatNode) {\n if (!config.parentsRelationNames) {\n return contextFilter ? contextFilter : {};\n }\n\n if (!allDeeps) {\n config.parentsRelationNames.forEach(f => {\n fieldCondition[f] = {empty: {}};\n });\n }\n } else {\n if (!flatNode.node.config.childrenRelationNames || !config.parentsRelationNames) {\n return null;\n }\n\n const matchingFilters = intersection(\n flatNode.node.config.childrenRelationNames,\n config.parentsRelationNames,\n );\n if (!matchingFilters.length) {\n return null;\n }\n fieldCondition[matchingFilters[0]] = {have: {values: [flatNode.node.model.id]}};\n }\n\n const filters = {groups: [{conditions: [fieldCondition]}]};\n\n // todo : is it right ? shouldn't it be managed with QueryVariablesManager's channels ? ?\n if (contextFilter) {\n filters.groups.push(...contextFilter.groups);\n }\n\n return filters;\n }\n\n /**\n * Return a context filter applicable to the service for given config\n *\n * @param config Applicable config\n * @param contextFilters List of context filters\n */\n private getFilterByService(\n config: NaturalHierarchicConfiguration,\n contextFilters: HierarchicFilterConfiguration[] | null,\n ): HierarchicFilterConfiguration['filter'] | null {\n if (!contextFilters || !config) {\n return null;\n }\n\n const filter = contextFilters.find(f => f.service === config.service);\n return filter ? filter.filter : null;\n }\n\n /**\n * Search in configurations.selectableAtKey attribute to find given key and return the configuration\n */\n private getConfigurationBySelectableKey(\n key: NaturalHierarchicConfiguration['selectableAtKey'],\n ): NaturalHierarchicConfiguration | null {\n if (!this.configuration) {\n return null;\n }\n\n return this.configuration.find(conf => conf.selectableAtKey === key) || null;\n }\n\n private getOrCreateModelNode(\n item: HierarchicModel,\n configuration: NaturalHierarchicConfiguration,\n ): HierarchicModelNode {\n const node = this.dataChange.value.find(n => n.model.id === item.id && n.model.__typename === item.__typename);\n return node || new HierarchicModelNode(item, configuration);\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {Facet, NaturalSearchFacets} from '../types/facet';\nimport {MatListModule} from '@angular/material/list';\nimport {NgIf, NgFor} from '@angular/common';\n\n/**\n * Configuration for facet selection\n */\nexport interface FacetSelectorConfiguration {\n facets: NaturalSearchFacets;\n}\n\n@Component({\n templateUrl: './facet-selector.component.html',\n styleUrls: ['./facet-selector.component.scss'],\n standalone: true,\n imports: [NgIf, MatListModule, NgFor],\n})\nexport class FacetSelectorComponent implements DropdownComponent {\n // Never has a real value\n public renderedValue = new BehaviorSubject<string>('');\n public facets: NaturalSearchFacets;\n public selection: Facet | null = null;\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) public data: NaturalDropdownData<FacetSelectorConfiguration>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.facets = data.configuration.facets;\n }\n\n /**\n * Get value, including rich object types\n */\n public getCondition(): FilterGroupConditionField {\n return {};\n }\n\n /**\n * Allow to close the dropdown with a valid value\n */\n public close(): void {\n if (this.selection) {\n this.dropdownRef.close({\n condition: {},\n facet: this.selection,\n });\n }\n }\n\n public isValid(): boolean {\n return !!this.selection;\n }\n\n public isDirty(): boolean {\n return true;\n }\n}\n","<div class=\"dropdown-title mat-body-2\" *ngIf=\"data.title\">{{ data.title }}</div>\n<mat-nav-list>\n <mat-list-item (click)=\"selection = facet; close()\" *ngFor=\"let facet of facets\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n</mat-nav-list>\n","import {\n Component,\n ComponentRef,\n createComponent,\n createEnvironmentInjector,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n StaticProvider,\n ViewChild,\n} from '@angular/core';\nimport {FormControl, ValidationErrors, ValidatorFn, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {ErrorStateMatcher, MatRipple, MatRippleModule} from '@angular/material/core';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {getFacetFromSelection} from '../classes/utils';\nimport {NaturalDropdownRef} from '../dropdown-container/dropdown-ref';\nimport {\n NATURAL_DROPDOWN_DATA,\n NaturalDropdownData,\n NaturalDropdownService,\n} from '../dropdown-container/dropdown.service';\nimport {FacetSelectorComponent, FacetSelectorConfiguration} from '../facet-selector/facet-selector.component';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {DropdownResult, NaturalSearchSelection} from '../types/values';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {NgIf} from '@angular/common';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\n// Required to check invalid fields when initializing natural-search\nclass AlwaysErrorStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null): boolean {\n return !!control && control.invalid;\n }\n}\n\nfunction isComponentValid(component: DropdownComponent): ValidatorFn {\n return (): ValidationErrors | null => {\n if (!component.isValid()) {\n return {component: true};\n }\n\n return null;\n };\n}\n\n@Component({\n selector: 'natural-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatRippleModule,\n NgIf,\n MatInputModule,\n FormsModule,\n ReactiveFormsModule,\n MatIconModule,\n NaturalIconDirective,\n MatButtonModule,\n ],\n})\nexport class NaturalInputComponent implements OnInit, OnChanges, OnDestroy {\n /**\n * Controls the ripple effect, used when opening a dropdown\n */\n @ViewChild(MatRipple, {static: true}) public ripple!: MatRipple;\n\n /**\n * Native element ref for <input> related to this <natural-input> component\n */\n @ViewChild('input', {static: true}) public input!: ElementRef<HTMLInputElement>;\n\n /**\n * Label for this field\n */\n @Input() public placeholder?: string;\n\n /**\n * Name of the field on which do a global search (without facet)\n */\n @Input() public searchFieldName = 'search';\n\n /**\n * Selected setted for this component\n */\n @Input() public selection: NaturalSearchSelection | null = null;\n\n /**\n * Available facets, allows the user to pick one, than generated then a selection\n */\n @Input({required: true}) public facets!: NaturalSearchFacets;\n\n /**\n * Text display in the dropdown to select the facet\n */\n @Input() public dropdownTitle = '';\n\n /**\n * Emits when user a added/updated/deleted a search (from global context or from facet)\n */\n @Output() public readonly selectionChange = new EventEmitter<NaturalSearchSelection>();\n\n /**\n * Emits when user removes the search by pressing the cross icon\n */\n @Output() public readonly cleared = new EventEmitter<NaturalInputComponent>();\n\n /**\n * Selected facet from the list of available facets\n */\n public facet: Facet | null = null;\n\n /**\n * Controller for the input field\n */\n public readonly formCtrl = new FormControl<string | null>(null);\n\n /**\n * Customer error matcher that should validate on each change (including initialisation)\n */\n public readonly errorMatcher = new AlwaysErrorStateMatcher();\n\n /**\n * Reference of the opened dropdown container\n */\n private dropdownRef: NaturalDropdownRef | null = null;\n\n /**\n * Reference of the component inside the dropdown container\n */\n private dropdownComponentRef: ComponentRef<DropdownComponent> | null = null;\n\n /**\n * Minimum input length (number of chars)\n * See length attribute\n */\n private readonly minLength = 5;\n\n /**\n * Size of the input (number of chars)\n * Match the input.size attribute\n */\n public length = this.minLength;\n\n /**\n * Flag, that, if marked as yes, prevents the opening of the dropdown\n * Is used to prevent dropdown opening when natural-search takes the focus from parent context (like on modal opening)\n */\n private neutralizeDropdownOpening = false;\n\n /**\n * Custom management for taking the focus from parent context\n * When focusing manually on the <input>, a dropdown is opened\n * But when the focus is given from angular in a parent context (like a dialog) the dropdown would open and we don't want it.\n */\n @HostListener('focus')\n public focus(): void {\n this.neutralizeDropdownOpening = true;\n this.input.nativeElement.focus();\n this.neutralizeDropdownOpening = false;\n }\n\n public constructor(\n private readonly element: ElementRef<HTMLElement>,\n private readonly dropdownService: NaturalDropdownService,\n private readonly injector: EnvironmentInjector,\n ) {}\n\n public ngOnInit(): void {\n this.input.nativeElement.addEventListener('focus', () => {\n this.openDropdown();\n });\n\n this.input.nativeElement.addEventListener('keyup', () => {\n if (!this.dropdownRef) {\n return;\n }\n\n if (this.formCtrl.value !== '') {\n this.dropdownRef.close();\n }\n });\n\n if (!this.placeholder) {\n this.placeholder = $localize`Recherche`;\n }\n\n const placeholderSize = (this.facet ? this.facet.display.length : this.placeholder.length) * 0.66;\n this.length = Math.max(this.minLength, Math.ceil(placeholderSize));\n }\n\n public ngOnDestroy(): void {\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n }\n\n public ngOnChanges(): void {\n if (!this.facets && this.selection) {\n setTimeout(() => this.clear());\n } else if (this.facets && this.selection) {\n this.facet = getFacetFromSelection(this.facets, this.selection);\n\n if (this.isDropdown()) {\n const dropdownComponent = this.createComponent(this.facet as DropdownFacet<FacetSelectorConfiguration>);\n this.formCtrl.setValidators([isComponentValid(dropdownComponent)]);\n dropdownComponent.renderedValue.subscribe(value => {\n this.formCtrl.setValue(value);\n });\n } else if (this.isFlag()) {\n this.formCtrl.setValue('');\n } else if (\n this.selection &&\n this.selection.field === this.searchFieldName &&\n this.selection.condition.like\n ) {\n // global search mode\n this.formCtrl.setValue('' + this.selection.condition.like.value);\n } else {\n // If component is invalid (no facet and not a global search), clear from result and destroy component\n setTimeout(() => this.clear());\n }\n }\n }\n\n public search(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.formCtrl.value) {\n return;\n }\n\n if (this.isDropdown()) {\n return;\n }\n\n if (this.formCtrl.valid && this.formCtrl.dirty) {\n this.selectionChange.emit(this.getSelection({like: {value: this.formCtrl.value}}));\n }\n }\n\n public clear(): void {\n this.facet = null;\n this.selection = null;\n this.formCtrl.setValue(null);\n this.cleared.emit(this);\n }\n\n public openDropdown(): void {\n if (this.dropdownRef || this.neutralizeDropdownOpening) {\n // Prevent to open multiple dropdowns.\n // Happens as we open on \"focus\", and alt+tab re-activate focus on an element that already had\n // focus when leaving window with another alt+tab\n return;\n }\n\n this.launchRipple();\n\n // If there is no facet and no string typed, show panel to select the facet\n if (!this.facet && !this.formCtrl.value) {\n this.openFacetSelectorDropdown(this.dropdownTitle);\n } else {\n // If a facet is selected, open specific component dropdown\n this.openTypeDropdown();\n }\n }\n\n public isDropdown(): boolean {\n return !!(this.facet && (this.facet as DropdownFacet<unknown>).component);\n }\n\n public isFlag(): boolean {\n return !!(this.facet && (this.facet as FlagFacet<FilterGroupConditionField>).condition);\n }\n\n private createComponent(facet: DropdownFacet<unknown>): DropdownComponent {\n // Always destroy and recreate component\n // Todo : test if facet has changed, if not re-use the component\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n\n const condition = this.selection ? (this.selection.condition as FilterGroupConditionField) : null;\n const data: NaturalDropdownData = {\n condition: condition,\n configuration: facet.configuration,\n };\n\n const injector = createEnvironmentInjector(this.createProviders(data), this.injector);\n this.dropdownComponentRef = createComponent(facet.component, {\n environmentInjector: injector,\n });\n\n return this.dropdownComponentRef.instance;\n }\n\n private createProviders(data: NaturalDropdownData): StaticProvider[] {\n // Customize injector to allow data and dropdown reference injection in component\n return [\n {\n provide: NaturalDropdownRef,\n useValue: null,\n },\n {\n provide: NATURAL_DROPDOWN_DATA,\n useValue: data,\n },\n ];\n }\n\n private launchRipple(): void {\n const rippleRef = this.ripple.launch({\n persistent: true,\n centered: true,\n });\n\n rippleRef.fadeOut();\n }\n\n private openFacetSelectorDropdown(title: string | undefined): void {\n if (!this.facets || (this.facets && !this.facets.length)) {\n return;\n }\n\n const data: NaturalDropdownData<FacetSelectorConfiguration> = {\n condition: {},\n title: title,\n configuration: {\n facets: this.facets,\n },\n };\n\n const injectorTokens = this.createProviders(data);\n this.dropdownRef = this.dropdownService.open(FacetSelectorComponent, this.element, injectorTokens, false);\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n if (result.facet) {\n this.setFacet(result.facet);\n } else if (result.condition) {\n this.setValue(result);\n }\n }\n });\n }\n\n private openTypeDropdown(): void {\n if (!this.isDropdown()) {\n return;\n }\n\n const dropdownFacet = this.facet as DropdownFacet<unknown>;\n\n const data: NaturalDropdownData = {\n condition: this.selection ? this.selection.condition : null,\n configuration: dropdownFacet.configuration,\n };\n\n const injectorTokens = this.createProviders(data);\n const component = dropdownFacet.component;\n this.dropdownRef = this.dropdownService.open(\n component,\n this.element,\n injectorTokens,\n dropdownFacet.showValidateButton !== undefined ? dropdownFacet.showValidateButton : true,\n );\n\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n this.setValue(result);\n }\n });\n }\n\n private setFacet(facet: Facet): void {\n this.facet = facet;\n\n if (this.isDropdown()) {\n this.openTypeDropdown();\n } else if (this.isFlag()) {\n this.setValue({\n condition: (facet as FlagFacet<FilterGroupConditionField>).condition,\n });\n } else {\n this.input.nativeElement.focus();\n }\n }\n\n private setValue(result: DropdownResult): void {\n if (this.facet) {\n this.selectionChange.emit(this.getSelection(result.condition));\n }\n }\n\n private getSelection(condition: NaturalSearchSelection['condition']): NaturalSearchSelection {\n const selection: NaturalSearchSelection = {\n field: this.facet ? this.facet.field : this.searchFieldName,\n condition: condition,\n };\n\n if (this.facet && this.facet.name) {\n selection.name = this.facet.name;\n }\n\n return selection;\n }\n}\n","<!-- click condition should match to allow click action only when no other button is visible -->\n<mat-form-field #field matRipple (click)=\"!selection && !(facet && !selection) ? openDropdown() : null\">\n <mat-label *ngIf=\"facet\">{{ facet.display }}</mat-label>\n <mat-label *ngIf=\"!facet\">{{ placeholder }}</mat-label>\n\n <input\n #input\n (blur)=\"search($event)\"\n (keydown.enter)=\"search($event)\"\n [attr.size]=\"length\"\n [errorStateMatcher]=\"errorMatcher\"\n [formControl]=\"formCtrl\"\n [readonly]=\"(isDropdown() && !!selection) || isFlag()\"\n autocomplete=\"off\"\n matInput\n type=\"text\"\n />\n\n <mat-icon *ngIf=\"!facet && !selection\" naturalIcon=\"search\" matIconPrefix></mat-icon>\n\n <button (click)=\"clear()\" *ngIf=\"selection\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n\n <button (click)=\"clear()\" *ngIf=\"facet && !selection\" mat-icon-button matIconSuffix>\n <mat-icon naturalIcon=\"undo\"></mat-icon>\n </button>\n</mat-form-field>\n<div class=\"hide\">{{ formCtrl.value ? formCtrl.value : facet ? facet.display : placeholder }}</div>\n","import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalInputComponent} from '../input/input.component';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelection} from '../types/values';\nimport {NgFor} from '@angular/common';\n\n@Component({\n selector: 'natural-group',\n templateUrl: './group.component.html',\n styleUrls: ['./group.component.scss'],\n standalone: true,\n imports: [NgFor, NaturalInputComponent],\n})\nexport class NaturalGroupComponent {\n @ViewChild('newValueInput') public newValueInput!: NaturalInputComponent;\n\n /**\n * Text display in the dropdown to select the facet\n */\n @Input() public dropdownTitle = '';\n @Input({required: true}) public placeholder!: string;\n @Input({required: true}) public facets!: NaturalSearchFacets;\n @Output() public readonly selectionChange = new EventEmitter<GroupSelections>();\n public innerSelections: GroupSelections = [];\n\n @Input() public set selections(selection: GroupSelections) {\n this.innerSelections = deepClone(selection);\n }\n\n public updateInput(selection: NaturalSearchSelection, index: number): void {\n this.innerSelections[index] = selection;\n this.selectionChange.emit(this.innerSelections);\n }\n\n public addInput(selection: NaturalSearchSelection): void {\n this.newValueInput.clear();\n this.innerSelections.push(selection);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public removeInput(index: number): void {\n this.innerSelections.splice(index, 1);\n this.selectionChange.emit(this.innerSelections);\n }\n}\n","<natural-input\n (cleared)=\"removeInput(i)\"\n (selectionChange)=\"updateInput($event, i)\"\n *ngFor=\"let selection of innerSelections; let i = index\"\n [facets]=\"facets\"\n [selection]=\"selection\"\n></natural-input>\n\n<natural-input\n #newValueInput\n (selectionChange)=\"addInput($event)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n tabIndex=\"10\"\n cdkFocusInitial\n [dropdownTitle]=\"dropdownTitle\"\n></natural-input>\n","import {Component, EventEmitter, Input, OnChanges, Output} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelections} from '../types/values';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {map} from 'rxjs';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalGroupComponent} from '../group/group.component';\nimport {NgClass, NgFor, NgIf, AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'natural-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss'],\n standalone: true,\n imports: [\n NgClass,\n NgFor,\n NaturalGroupComponent,\n NgIf,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n NaturalIconDirective,\n MatDividerModule,\n AsyncPipe,\n ],\n})\nexport class NaturalSearchComponent implements OnChanges {\n /**\n * Placeholder for last input (the free search input)\n */\n @Input() public placeholder = $localize`Rechercher`;\n\n /**\n * Exhaustive list of facets to be used in this <natural-search>\n */\n @Input() public facets: NaturalSearchFacets = [];\n\n /**\n * Whether to allow end-user to create multiple `OR` groups\n */\n @Input() public multipleGroups = false;\n\n /**\n * Text display in the dropdown to select the facet\n */\n @Input() public dropdownTitle = '';\n\n /**\n * Emits when some selection has been setted by the user\n */\n @Output() public readonly selectionChange = new EventEmitter<NaturalSearchSelections>();\n\n /**\n * Cleaned inputted selections. Allow valid selections to be manipulated inside component\n */\n public innerSelections: NaturalSearchSelections = [[]];\n\n /**\n * Input to display at component initialisation\n */\n @Input()\n public set selections(selections: NaturalSearchSelections) {\n this.innerSelections = selections && selections[0] ? deepClone(selections) : [[]];\n }\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n public constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n public ngOnChanges(): void {\n if (!this.facets) {\n this.facets = [];\n }\n }\n\n public updateGroup(groupSelections: GroupSelections, groupIndex: number): void {\n for (let i = 0; i < groupSelections.length; i++) {\n this.innerSelections[groupIndex][i] = groupSelections[i];\n }\n this.innerSelections[groupIndex].length = groupSelections.length;\n this.selectionChange.emit(this.innerSelections);\n }\n\n public addGroup(): void {\n this.innerSelections.push([]);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public removeGroup(index: number): void {\n this.innerSelections.splice(index, 1);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public clear(): void {\n this.innerSelections = [[]];\n this.selectionChange.emit([[]]);\n }\n}\n","<div class=\"natural-search\" [ngClass]=\"{mobile: isMobile | async, hasMultipleGroups: innerSelections.length > 1}\">\n <div class=\"groupsWrapper\">\n <ng-container *ngFor=\"let groupSelections of innerSelections; let i = index; let last = last\">\n <div class=\"groupWrapper\">\n <natural-group\n (selectionChange)=\"updateGroup($event, i)\"\n [facets]=\"facets\"\n [placeholder]=\"placeholder\"\n [selections]=\"groupSelections\"\n [dropdownTitle]=\"dropdownTitle\"\n ></natural-group>\n\n <div class=\"endOfRowButton\">\n <button\n (click)=\"removeGroup(i)\"\n *ngIf=\"innerSelections.length > 1\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Supprimer ce groupe\"\n >\n <mat-icon naturalIcon=\"remove\"></mat-icon>\n </button>\n </div>\n </div>\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </ng-container>\n </div>\n\n <div class=\"endOfRowButton\">\n <button\n (click)=\"addGroup()\"\n *ngIf=\"multipleGroups\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Ajouter un groupe\"\n >\n <mat-icon naturalIcon=\"add\"></mat-icon>\n </button>\n\n <button\n (click)=\"clear()\"\n mat-icon-button\n class=\"clear-button\"\n i18n-matTooltip\n matTooltip=\"Annuler la recherche\"\n >\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n </div>\n</div>\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {FlatTreeControl} from '@angular/cdk/tree';\nimport {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule} from '@angular/material/tree';\nimport {Observable} from 'rxjs';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractController} from '../../../classes/abstract-controller';\nimport {QueryVariables} from '../../../classes/query-variable-manager';\nimport {Literal} from '../../../types/types';\nimport {toGraphQLDoctrineFilter} from '../../search/classes/graphql-doctrine';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {HierarchicFlatNode} from '../classes/flat-node';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {HierarchicModelNode} from '../classes/model-node';\nimport {NaturalHierarchicSelectorService, OrganizedModelSelection} from './hierarchic-selector.service';\nimport {replaceObjectKeepingReference} from '../../../classes/utility';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {NgIf, NgClass, NgFor} from '@angular/common';\nimport {NaturalSearchComponent} from '../../search/search/search.component';\n\n@Component({\n selector: 'natural-hierarchic-selector',\n templateUrl: './hierarchic-selector.component.html',\n styleUrls: ['./hierarchic-selector.component.scss'],\n providers: [NaturalHierarchicSelectorService],\n standalone: true,\n imports: [\n NaturalSearchComponent,\n NgIf,\n MatProgressSpinnerModule,\n MatTreeModule,\n NgClass,\n MatButtonModule,\n MatIconModule,\n NaturalIconDirective,\n MatCheckboxModule,\n MatChipsModule,\n NgFor,\n ],\n})\nexport class NaturalHierarchicSelectorComponent extends NaturalAbstractController implements OnInit, OnChanges {\n /**\n * Function that receives a model and returns a string for display value\n */\n @Input() public displayWith?: (item: any) => string;\n\n /**\n * Config for items and relations arrangement\n */\n @Input({required: true}) public config!: NaturalHierarchicConfiguration[];\n\n /**\n * If multiple or single item selection\n */\n @Input() public multiple = false;\n\n /**\n * Selected items\n * Organized by key, containing each an array of selected items of same type\n */\n @Input() public selected: OrganizedModelSelection = {};\n\n /**\n * Wherever if selectable elements can be unselected\n */\n @Input() public allowUnselect = true;\n\n /**\n * Filters that apply to each query\n */\n @Input() public filters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Search facets\n */\n @Input() public searchFacets: NaturalSearchFacets = [];\n\n /**\n * Selections to apply on natural-search on component initialisation\n */\n @Input() public searchSelections: NaturalSearchSelections = [];\n\n /**\n * Emits when natural-search selections change\n */\n @Output() public readonly searchSelectionChange = new EventEmitter<NaturalSearchSelections>();\n\n /**\n * Inner representation of selected @Input() to allow flat listing as mat-chip.\n */\n public selectedNodes: HierarchicModelNode[] = [];\n\n /**\n * Emits selection change\n * Returns a Literal where selected models are organized by key\n */\n @Output() public readonly selectionChange = new EventEmitter<OrganizedModelSelection>();\n\n /**\n * Controller for nodes selection\n */\n public flatNodesSelection!: SelectionModel<HierarchicFlatNode>;\n\n public treeControl!: FlatTreeControl<HierarchicFlatNode>;\n public treeFlattener!: MatTreeFlattener<HierarchicModelNode, HierarchicFlatNode>;\n public dataSource!: MatTreeFlatDataSource<HierarchicModelNode, HierarchicFlatNode>;\n\n public loading = false;\n\n /**\n * Cache for transformed nodes\n */\n private flatNodeMap: Map<string, HierarchicFlatNode> = new Map<string, HierarchicFlatNode>();\n\n public constructor(private readonly hierarchicSelectorService: NaturalHierarchicSelectorService) {\n super();\n }\n\n /**\n * Angular OnInit implementation\n */\n public ngOnInit(): void {\n // Init tree checkbox selectors\n this.flatNodesSelection = new SelectionModel<any>(this.multiple);\n\n // Tree controllers and manipulators\n this.treeFlattener = new MatTreeFlattener(\n this.transformer(),\n this.getLevel(),\n this.isExpandable(),\n this.getChildren(),\n );\n this.treeControl = new FlatTreeControl<HierarchicFlatNode>(this.getLevel(), this.isExpandable());\n\n // The dataSource contains a nested ModelNodes list. Each ModelNode has a child attribute that returns an observable.\n // The dataSource contains a flat representation of the nested ModelNodes that is generated by the treeFlattener related functions\n this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\n\n // Update dataSource when receiving new list -> we assign the whole tree\n // The treeControl and treeFlattener will generate the displayed tree\n this.hierarchicSelectorService.dataChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => (this.dataSource.data = data));\n\n // Prevent empty screen on first load and init NaturalHierarchicSelectorService with inputted configuration\n let variables;\n if (this.searchSelections.some(s => s.length)) {\n variables = {filter: toGraphQLDoctrineFilter(this.searchFacets, this.searchSelections)};\n }\n this.loadRoots(variables);\n\n // OrganizedSelection into list usable by template\n this.updateInnerSelection(this.selected);\n }\n\n /**\n * Angular OnChange implementation\n */\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.selected && !changes.selected.firstChange) {\n this.updateInnerSelection(this.selected);\n }\n\n if (changes.filters && !changes.filters.firstChange) {\n this.loadRoots();\n }\n }\n\n /**\n * Toggle selection of a FlatNode, considering if multiple selection is activated or not\n */\n public toggleFlatNode(flatNode: HierarchicFlatNode): void {\n if (this.multiple) {\n // Is multiple allowed, just toggle element\n if (this.flatNodesSelection.isSelected(flatNode)) {\n this.unselectFlatNode(flatNode);\n } else {\n this.selectFlatNode(flatNode);\n }\n } else if (!this.multiple) {\n if (this.flatNodesSelection.isSelected(flatNode)) {\n this.unselectSingleFlatNode();\n } else {\n // If not multiple, and we want to select an element, unselect everything before to keep a single selection\n this.selectSingleFlatNode(flatNode);\n }\n }\n }\n\n /**\n * When unselecting an element from the mat-chips, it can be deep in the hierarchy, and the tree element may not exist...\n * ... but we still need to remove the element from the mat-chips list.\n */\n public unselectModelNode(node: HierarchicModelNode): void {\n const flatNode = this.getFlatNode(node);\n if (flatNode) {\n this.unselectFlatNode(flatNode);\n } else {\n // Remove from chips list only if no flatNode, because unselectFlatNode() already deals with it.\n this.removeModelNode(node);\n this.updateSelection(this.selectedNodes);\n }\n }\n\n public isNodeTogglable(flatNode: HierarchicFlatNode): boolean {\n if (this.isNodeSelected(flatNode.node)) {\n return flatNode.deselectable;\n } else {\n return flatNode.selectable;\n }\n }\n\n private getDisplayFn(config: NaturalHierarchicConfiguration): (item: any) => string {\n if (config.displayWith) {\n return config.displayWith;\n }\n\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return item => (item ? item.fullName || item.name : '');\n }\n\n public loadChildren(flatNode: HierarchicFlatNode): void {\n if (this.treeControl.isExpanded(flatNode)) {\n this.hierarchicSelectorService.loadChildren(flatNode, this.filters);\n }\n }\n\n /**\n * Created to collapse all children when closing a parent, but not sure it's good.\n */\n // public loadChildren(flatNode: HierarchicFlatNode) {\n // if (this.treeControl.isExpanded(flatNode)) {\n //\n // const cachedFlatNode = this.getFlatNode(flatNode.node);\n // if (cachedFlatNode) {\n // this.hierarchicSelectorService.loadChildren(cachedFlatNode, this.filters);\n //\n // // Close children\n // cachedFlatNode.node.children.forEach(child => {\n // const childNode = this.getFlatNode(child);\n // if (childNode) {\n // this.treeControl.collapse(childNode);\n // }\n // });\n // }\n // }\n // }\n\n private getChildren(): (node: HierarchicModelNode) => Observable<HierarchicModelNode[]> {\n return (node: HierarchicModelNode): Observable<HierarchicModelNode[]> => {\n return node.childrenChange;\n };\n }\n\n /**\n * Transforms a HierarchicModelNode into a FlatNode\n */\n private transformer(): (node: HierarchicModelNode, level: number) => HierarchicFlatNode {\n return (node: HierarchicModelNode, level: number) => {\n return this.getOrCreateFlatNode(node, level);\n };\n }\n\n /**\n * Return deep of the node in the tree\n */\n private getLevel(): (node: HierarchicFlatNode) => number {\n return (node: HierarchicFlatNode) => {\n return node.level;\n };\n }\n\n /**\n * Is always expandable because we load on demand, we don't know if there are children yet\n */\n private isExpandable(): (node: HierarchicFlatNode) => boolean {\n return (node: HierarchicFlatNode) => {\n return node.expandable;\n };\n }\n\n private getOrCreateFlatNode(node: HierarchicModelNode, level: number): HierarchicFlatNode {\n // Return FlatNode if exists\n const flatNode = this.getFlatNode(node);\n if (flatNode) {\n return flatNode;\n }\n\n // Return new FlatNode\n return this.createFlatNode(node, level);\n }\n\n public search(selections: NaturalSearchSelections): void {\n this.searchSelectionChange.emit(selections);\n if (selections.some(s => s.length)) {\n const variables = {filter: toGraphQLDoctrineFilter(this.searchFacets, selections)};\n this.hierarchicSelectorService.search(variables, this.filters);\n } else {\n this.loadRoots();\n }\n }\n\n private loadRoots(searchVariables?: QueryVariables): void {\n this.loading = true;\n this.flatNodeMap = new Map<string, HierarchicFlatNode>();\n this.hierarchicSelectorService\n .init(this.config, this.filters, searchVariables || null)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe();\n }\n\n /**\n * Sync inner selection (tree and mat-chips) according to selected input attribute\n */\n private updateInnerSelection(selected: OrganizedModelSelection): void {\n // Transform an OrganizedModelSelection into a ModelNode list that is used in the selected zone of the component (see template)\n this.selectedNodes = this.hierarchicSelectorService.fromOrganizedSelection(selected);\n\n this.flatNodesSelection.clear();\n for (const node of this.selectedNodes) {\n const flatNode = this.getFlatNode(node);\n if (flatNode) {\n this.flatNodesSelection.select(flatNode);\n }\n }\n }\n\n /**\n * Unselect a node, keeping the rest of the selected untouched\n */\n private unselectFlatNode(flatNode: HierarchicFlatNode): void {\n this.flatNodesSelection.deselect(flatNode);\n this.removeModelNode(flatNode.node);\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Remove a node from chip lists\n */\n private removeModelNode(node: HierarchicModelNode): void {\n const key = this.getMapKey(node.model);\n const selectionIndex = this.selectedNodes.findIndex(n => this.getMapKey(n.model) === key);\n this.selectedNodes.splice(selectionIndex, 1);\n }\n\n /**\n * Select a node, keeping th rest of the selected untouched\n */\n private selectFlatNode(flatNode: HierarchicFlatNode): void {\n this.flatNodesSelection.select(flatNode);\n this.selectedNodes.push(flatNode.node);\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Clear all selected and select the given node\n */\n private selectSingleFlatNode(flatNode: HierarchicFlatNode): void {\n this.flatNodesSelection.clear();\n this.flatNodesSelection.select(flatNode);\n this.selectedNodes = [flatNode.node];\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Clear all selected and select the given node\n */\n private unselectSingleFlatNode(): void {\n this.flatNodesSelection.clear();\n this.selectedNodes = [];\n this.updateSelection(this.selectedNodes);\n }\n\n /**\n * Transform the given elements into the organized selection that is emitted to output\n */\n private updateSelection(selected: HierarchicModelNode[]): void {\n const organizedFlatNodesSelection = this.hierarchicSelectorService.toOrganizedSelection(selected);\n replaceObjectKeepingReference(this.selected, organizedFlatNodesSelection);\n this.selectionChange.emit(organizedFlatNodesSelection);\n }\n\n private isNodeSelected(node: HierarchicModelNode): boolean {\n const key = this.getMapKey(node.model);\n\n return this.selectedNodes.some(n => this.getMapKey(n.model) === key);\n }\n\n private getFlatNode(node: HierarchicModelNode): HierarchicFlatNode | null {\n const key = this.getMapKey(node.model);\n return this.flatNodeMap.get(key) || null;\n }\n\n private createFlatNode(node: HierarchicModelNode, level: number): HierarchicFlatNode {\n const key = this.getMapKey(node.model);\n const name = this.getDisplayFn(node.config)(node.model);\n const expandable = false;\n const isCustomSelectable = node.config.isSelectableCallback\n ? node.config.isSelectableCallback(node.model)\n : true;\n const isSelectable = !!node.config.selectableAtKey && isCustomSelectable;\n\n const flatNode = new HierarchicFlatNode(node, name, level, expandable, isSelectable);\n\n this.hierarchicSelectorService.countItems(flatNode, this.filters);\n\n // Mark node as selected if needed (checks the selected processed input)\n if (this.isNodeSelected(node)) {\n if (!this.allowUnselect) {\n flatNode.deselectable = false;\n }\n this.flatNodesSelection.select(flatNode);\n }\n\n // Cache FlatNode\n this.flatNodeMap.set(key, flatNode);\n\n return flatNode;\n }\n\n /**\n * Returns an identifier key for map cache\n * As many object types can be used, this function considers typename and ID to return something like document-123\n */\n private getMapKey(model: Literal): string {\n return model.__typename + '-' + model.id;\n }\n}\n","<div [style.margin-bottom.px]=\"20\">\n <natural-search\n (selectionChange)=\"search($event)\"\n [facets]=\"searchFacets\"\n [selections]=\"searchSelections\"\n ></natural-search>\n</div>\n\n<div class=\"body\">\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"36\"\n mode=\"indeterminate\"\n style=\"margin: 10px\"\n ></mat-progress-spinner>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n <button\n (click)=\"loadChildren(node)\"\n *ngIf=\"node.expandable\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n <mat-progress-spinner\n *ngIf=\"node.loading\"\n [diameter]=\"24\"\n [strokeWidth]=\"5\"\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <mat-icon\n *ngIf=\"!node.loading\"\n [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\"\n ></mat-icon>\n </button>\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n <mat-icon\n *ngIf=\"node.node.config.icon\"\n [naturalIcon]=\"node.node.config.icon\"\n style=\"margin-right: 10px\"\n ></mat-icon>\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n <mat-chip-option\n (removed)=\"unselectModelNode(node)\"\n *ngFor=\"let node of selectedNodes\"\n [removable]=\"true\"\n [selectable]=\"false\"\n >\n <mat-icon *ngIf=\"node.config.icon\" [naturalIcon]=\"node.config.icon\"></mat-icon>\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <mat-icon matChipRemove naturalIcon=\"cancel\"></mat-icon>\n </mat-chip-option>\n </mat-chip-listbox>\n</div>\n\n<div *ngIf=\"!loading && !dataSource.data.length\" class=\"margin-v\" i18n>Aucun résultat</div>\n","import {Component} from '@angular/core';\nimport {NaturalQueryVariablesManager} from '../../../classes/query-variable-manager';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {Literal} from '../../../types/types';\nimport {NaturalHierarchicConfiguration} from '../../hierarchic-selector/classes/hierarchic-configuration';\nimport {OrganizedModelSelection} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalHierarchicSelectorComponent} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.component';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgFor, NgIf} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport interface HierarchicFilterConfiguration<T = Literal> {\n service: NaturalHierarchicConfiguration['service'];\n filter: T;\n}\n\nexport type HierarchicFiltersConfiguration<T = Literal> = Array<HierarchicFilterConfiguration<T>>;\n\nexport interface TypeHierarchicSelectorConfiguration {\n key: string;\n service: NaturalAbstractModelService<any, any, any, any, any, any, any, any, any, any>;\n config: NaturalHierarchicConfiguration[];\n filters?: HierarchicFiltersConfiguration;\n}\n\n@Component({\n templateUrl: './type-hierarchic-selector.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n NgFor,\n MatOptionModule,\n NgIf,\n NaturalHierarchicSelectorComponent,\n ],\n})\nexport class TypeHierarchicSelectorComponent extends AbstractAssociationSelectComponent<TypeHierarchicSelectorConfiguration> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const ids: string[] =\n this.valueCtrl.value?.[this.configuration.key].map((item: any) => {\n return item.id;\n }) ?? [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, ids);\n }\n\n protected reloadValue(condition: FilterGroupConditionField): Observable<any | null> {\n if (!condition.have) {\n return EMPTY;\n }\n\n const ids = condition.have.values;\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('a', {\n filter: {\n groups: [{conditions: [{id: {in: {values: ids}}}]}],\n },\n });\n\n return this.configuration.service.getAll(qvm).pipe(\n map(v => {\n const selection: OrganizedModelSelection = {};\n\n selection[this.configuration.key] = v.items;\n\n return this.noEmptySelection(selection);\n }),\n );\n }\n\n protected renderValueWithoutOperator(): string {\n const items = this.valueCtrl.value?.[this.configuration.key];\n if (!items) {\n return '';\n }\n\n return items\n .map((item: any) => {\n return item.fullName || item.name;\n })\n .join(', ');\n }\n\n public selectionChange(selection: OrganizedModelSelection): void {\n this.valueCtrl.setValue(this.noEmptySelection(selection));\n this.valueCtrl.markAsDirty();\n }\n\n /**\n * We need to keep `null` in our valueCtrl so the required validator works properly, so\n * filter here\n */\n private noEmptySelection(selection: OrganizedModelSelection): OrganizedModelSelection | null {\n return selection[this.configuration.key].length ? selection : null;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <natural-hierarchic-selector\n *ngIf=\"requireValueCtrl\"\n (selectionChange)=\"selectionChange($event)\"\n [config]=\"configuration.config\"\n [filters]=\"configuration.filters\"\n [multiple]=\"true\"\n [selected]=\"valueCtrl.value || {}\"\n style=\"margin-right: 20px\"\n ></natural-hierarchic-selector>\n</form>\n","import {Component, Inject} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n NgForm,\n ValidationErrors,\n ValidatorFn,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {DateAdapter, ErrorStateMatcher, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {NgIf} from '@angular/common';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nexport interface TypeDateRangeConfiguration<D = any> {\n min?: D | null;\n max?: D | null;\n}\n\nclass InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null, form: FormGroupDirective | NgForm | null): boolean {\n return (form && form.invalid && (form.value.to || form.value.from)) || (control && control.invalid);\n }\n}\n\nfunction parseFromControl<D>(control: AbstractControl, key: string): D | null {\n const c = control.get(key);\n if (!c) {\n return null;\n }\n\n return c.value;\n}\n\n/**\n * From >= To\n */\nfunction toGreaterThanFrom<D>(dateAdapter: DateAdapter<D>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const from = parseFromControl<D>(control, 'from');\n const to = parseFromControl<D>(control, 'to');\n\n if (from && to && dateAdapter.compareDate(from, to) > 0) {\n return {toGreaterThanFrom: true};\n }\n\n return null;\n };\n}\n\n/**\n * Date range with mandatory bounding dates.\n *\n * If you need optional bounding date, then use `TypeDateComponent` instead.\n */\n@Component({\n templateUrl: './type-date-range.component.html',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, NgIf],\n})\nexport class TypeDateRangeComponent<D = any> implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateRangeConfiguration<D>>;\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly fromCtrl = new FormControl<D | null>(null);\n public readonly toCtrl = new FormControl<D | null>(null);\n public readonly form = new FormGroup({\n from: this.fromCtrl,\n to: this.toCtrl,\n });\n\n private readonly defaults: Required<TypeDateRangeConfiguration<D>> = {\n min: null,\n max: null,\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeDateRangeConfiguration<D>>,\n private dateAdapter: DateAdapter<D>,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges).subscribe(() => {\n this.renderedValue.next(this.getRenderedValue());\n });\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const from = serialize<D>(this.dateAdapter, this.fromCtrl.value);\n const to = serialize<D>(this.dateAdapter, this.toCtrl.value);\n\n if (from && to) {\n return {between: {from, to}};\n } else {\n return {};\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const value = {\n from: null as D | null,\n to: null as D | null,\n };\n\n if (condition.between) {\n value.from = this.dateAdapter.parse(condition.between.from, null);\n value.to = this.dateAdapter.parse(condition.between.to, null);\n }\n\n this.form.setValue(value);\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(dateMin<D>(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax<D>(this.dateAdapter, this.configuration.max));\n }\n\n this.fromCtrl.setValidators(validators);\n this.toCtrl.setValidators(validators);\n\n this.form.setValidators([\n toGreaterThanFrom<D>(this.dateAdapter), // From < To\n ]);\n }\n\n public render(value: D | null): string {\n return value ? this.dateAdapter.format(value, this.dateFormats.display.dateInput) : '';\n }\n\n private getRenderedValue(): string {\n const from = this.render(this.fromCtrl.value);\n const to = this.render(this.toCtrl.value);\n\n if (from && to) {\n return from + ' - ' + to;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"from\"\n placeholder=\"De\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"from\"></mat-datepicker-toggle>\n <mat-datepicker #from></mat-datepicker>\n <mat-error *ngIf=\"form.hasError('toGreaterThanFrom')\"\n >{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\"\n >< {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\"\n >> {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"to\"\n placeholder=\"à\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"to\"></mat-datepicker-toggle>\n <mat-datepicker #to></mat-datepicker>\n <mat-error *ngIf=\"toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\">\n < {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\">\n > {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n</form>\n","import {CommonModule, NgFor, NgIf} from '@angular/common';\nimport {Component, Inject} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../../../types/types';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {isEqual} from 'lodash-es';\n\nexport interface TypeOption {\n display: string;\n condition: Literal;\n}\n\nexport interface TypeOptionsConfiguration {\n options: TypeOption[];\n}\n\n@Component({\n templateUrl: './type-options.component.html',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, NgIf, NgFor, MatButtonToggleModule, CommonModule],\n})\nexport class TypeOptionsComponent implements DropdownComponent {\n public readonly renderedValue: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n public readonly formControl = new FormControl<TypeOption>({} as TypeOption, {nonNullable: true});\n\n public readonly configuration: Required<TypeOptionsConfiguration>;\n\n private readonly defaults: Required<TypeOptionsConfiguration> = {\n options: [],\n };\n\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) public data: NaturalDropdownData<TypeOptionsConfiguration>,\n protected dropdownRef: NaturalDropdownRef,\n ) {\n this.configuration = {...this.defaults, ...data.configuration};\n\n if (!this.configuration.options.length) {\n throw new Error('TypeOptions need options, empty array or null given');\n }\n\n this.formControl.setValidators([Validators.required]);\n\n if (data.condition) {\n const option = this.configuration.options.find(option => isEqual(option.condition, data.condition));\n\n if (option) {\n this.formControl.setValue(option);\n this.renderedValue.next(option.display);\n }\n }\n\n // Update rendered value\n this.formControl.valueChanges.subscribe(option => {\n if (option) {\n this.renderedValue.next(option.display);\n this.dropdownRef.close(option);\n }\n });\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n return this.formControl.value.condition;\n }\n\n public isValid(): boolean {\n return this.formControl.valid && !!this.formControl.value?.condition;\n }\n\n public isDirty(): boolean {\n return this.formControl.dirty;\n }\n}\n","<mat-button-toggle-group [formControl]=\"formControl\">\n <mat-button-toggle *ngFor=\"let option of configuration.options\" [value]=\"option\">{{\n option.display\n }}</mat-button-toggle>\n</mat-button-toggle-group>\n","import {CommonModule, NgFor, NgIf} from '@angular/common';\nimport {Component, Inject} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {TypeOptionsComponent, TypeOptionsConfiguration} from '../type-options/type-options.component';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\n\nexport interface TypeBooleanConfiguration {\n displayWhenActive: string;\n displayWhenInactive: string;\n}\n\n@Component({\n templateUrl: '../type-options/type-options.component.html',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, NgIf, NgFor, MatButtonToggleModule, CommonModule],\n})\nexport class TypeBooleanComponent extends TypeOptionsComponent implements DropdownComponent {\n public constructor(\n @Inject(NATURAL_DROPDOWN_DATA) data: NaturalDropdownData<TypeBooleanConfiguration>,\n dropdownRef: NaturalDropdownRef,\n ) {\n // Set up options from hardcoded conditions with custom labels from config\n const configuration: TypeOptionsConfiguration = {\n options: [\n {\n display: data.configuration.displayWhenActive,\n condition: {equal: {value: true}},\n },\n {\n display: data.configuration.displayWhenInactive,\n condition: {equal: {value: false}},\n },\n ],\n };\n\n const typeOptionsData: NaturalDropdownData<TypeOptionsConfiguration> = {\n ...data,\n ...{configuration: configuration},\n };\n\n super(typeOptionsData, dropdownRef);\n }\n}\n","/*\n * Public API Surface of natural-search dropdown components\n */\nexport {TypeSelectConfiguration, TypeSelectComponent} from './type-select/type-select.component';\n\nexport {\n TypeSelectNaturalConfiguration,\n TypeNaturalSelectComponent,\n} from './type-natural-select/type-natural-select.component';\n\nexport {TypeNumberConfiguration, TypeNumberComponent} from './type-number/type-number.component';\n\nexport {\n TypeHierarchicSelectorConfiguration,\n TypeHierarchicSelectorComponent,\n} from './type-hierarchic-selector/type-hierarchic-selector.component';\n\nexport {TypeDateConfiguration, TypeDateComponent} from './type-date/type-date.component';\n\nexport {TypeDateRangeConfiguration, TypeDateRangeComponent} from './type-date-range/type-date-range.component';\n\nexport {TypeTextComponent} from './type-text/type-text.component';\n\nexport {TypeBooleanConfiguration, TypeBooleanComponent} from './type-boolean/type-boolean.component';\nexport {TypeOptionsConfiguration, TypeOption, TypeOptionsComponent} from './type-options/type-options.component';\n","export function acceptType(accept: string, type: string, filename: string): boolean {\n if (!accept.trim()) {\n return true;\n }\n\n type = type.toLowerCase();\n filename = filename.toLowerCase();\n\n return accept.split(',').some(mimeOrExtension => {\n mimeOrExtension = mimeOrExtension.trim().toLowerCase();\n if (mimeOrExtension.startsWith('.')) {\n return filename.endsWith(mimeOrExtension);\n } else {\n // Transform `*` into `.*`\n const pattern = mimeOrExtension.replace(/\\*/g, '.*');\n\n return type.match(pattern);\n }\n });\n}\n\nexport function isFileInput(elm: HTMLElement): elm is HTMLInputElement {\n const type = elm.getAttribute('type');\n\n return elm.tagName.toLowerCase() === 'input' && !!type && type.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\n\nexport function detectSwipe(event: Event | TouchEvent): boolean {\n const touches = 'changedTouches' in event ? event.changedTouches : null;\n if (!touches) {\n return false;\n }\n\n if (event.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (event.type === 'touchend') {\n const currentX = touches[0].clientX;\n const currentY = touches[0].clientY;\n if (Math.abs(currentX - initialTouchStartX) > 20 || Math.abs(currentY - initialTouchStartY) > 20) {\n event.stopPropagation();\n if (event.cancelable) {\n event.preventDefault();\n }\n\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport function createInvisibleFileInputWrap(document: Document): HTMLLabelElement {\n const fileElem = createFileInput(document);\n const label = document.createElement('label');\n label.innerHTML = 'upload';\n label.style.visibility = 'hidden';\n label.style.position = 'absolute';\n label.style.overflow = 'hidden';\n label.style.width = '0px';\n label.style.height = '0px';\n label.style.border = 'none';\n label.style.margin = '0px';\n label.style.padding = '0px';\n label.setAttribute('tabindex', '-1');\n\n label.appendChild(fileElem);\n\n return label;\n}\n\nfunction createFileInput(document: Document): HTMLInputElement {\n const fileElem = document.createElement('input');\n fileElem.type = 'file';\n\n return fileElem;\n}\n\nexport function isDirectory(file: File): Promise<boolean> {\n return blobText(file.slice(0, 1)).then(\n text => {\n // Firefox will return empty string for a folder, so we must check that special case.\n // That means that any empty file will incorrectly be interpreted as a folder on all\n // browsers, but that's tolerable because there is no real use-case to upload an empty file.\n return text !== '';\n },\n () => false,\n );\n}\n\n/**\n * This is a ponyfill for `Blob.text()`, because Safari 13 and 14 do not support it, https://caniuse.com/?search=blob.text,\n * and we try our best not to break iPhone users too much.\n */\nfunction blobText(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result as string);\n };\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n}\n\nexport function stopEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function fileListToArray(fileList: FileList): File[] {\n const result: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList.item(i);\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nfunction dataTransferItemListToArray(items: DataTransferItemList): File[] {\n const result: File[] = [];\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i++) {\n const file = items[i].getAsFile();\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nexport function eventToFiles(event: Event | DragEvent): File[] {\n const transfer = 'dataTransfer' in event ? event.dataTransfer : null;\n if (transfer?.files?.length) {\n return fileListToArray(transfer.files);\n }\n\n if (transfer) {\n return dataTransferItemListToArray(transfer.items);\n }\n\n return [];\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {FileSelection} from './abstract-file';\nimport {FileModel} from './types';\nimport {DOCUMENT} from '@angular/common';\n\n// @dynamic\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalFileService {\n /**\n * Allow to subscribe to selected files in the entire application. So a\n * child component is able to receive a file that was dropped on a parent\n * component.\n *\n * Typically useful to drop a file on the entire screen, instead of a precise\n * component.\n */\n public readonly filesChanged = new Subject<FileSelection>();\n\n public constructor(@Inject(DOCUMENT) private readonly document: Document) {}\n\n public getDownloadLink(model: FileModel | null): null | string {\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Cannot build download link because `window` is undefined');\n }\n\n const hostname = window.location.protocol + '//' + window.location.hostname;\n\n if (model?.__typename === 'File') {\n return hostname + '/api/file/' + model.id;\n } else if (model?.__typename === 'AccountingDocument') {\n return hostname + '/api/accounting-document/' + model.id;\n } else if (model?.__typename === 'Image') {\n return hostname + '/api/image/' + model.id;\n }\n\n return null;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n acceptType,\n createInvisibleFileInputWrap,\n detectSwipe,\n eventToFiles,\n fileListToArray,\n isDirectory,\n isFileInput,\n stopEvent,\n} from './utils';\nimport {NaturalFileService} from './file.service';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {DOCUMENT} from '@angular/common';\nimport {forkJoin, map, Observable, ObservableInput, of, tap} from 'rxjs';\n\nexport interface InvalidFile {\n file: File;\n error: string;\n}\n\nexport interface FileSelection {\n /**\n * The list of files that have been selected.\n */\n valid: File[];\n\n /**\n * The list of files that have been selected but are invalid according to validators.\n */\n invalid: InvalidFile[];\n}\n\n/**\n * A master base set of logic intended to support file select/drag/drop operations\n *\n * In most cases you probably want click-to-select and drag-to-select, so you should use:\n *\n * <div naturalFileDrop [selectable]=\"true\"></div>\n *\n * @dynamic\n */\n@Directive()\nexport abstract class NaturalAbstractFile extends NaturalAbstractController implements OnInit, OnDestroy, OnChanges {\n private fileElement?: HTMLInputElement;\n\n /**\n * Whether we should accept a single file or multiple files\n */\n @Input() public multiple = false;\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n @Input() public accept = '';\n\n /**\n * Maximum file size in bytes. 0 means no validation at all.\n */\n @Input() public maxSize = 0;\n\n /**\n * Disable the file selection entirely\n */\n @Input() public fileSelectionDisabled = false;\n\n /**\n * Whether the user can click on the element to select something\n *\n * This has only effect during initialization. Subsequent changes will have\n * no effect.\n */\n @Input() public selectable = false;\n\n /**\n * If true, the file selection will be broadcast through `NaturalFileService.filesChanged`.\n *\n * It is useful to set this to false if there is two upload on a page with different purpose\n * and the second upload should not be confused with the first one.\n */\n @Input() public broadcast = true;\n\n /**\n * The single valid file that has been selected.\n *\n * It is for convenience of use, and will only emit if there is at least one\n * valid file. See `filesChange` for a more complete output.\n */\n @Output() public readonly fileChange = new EventEmitter<File>();\n\n /**\n * The list of files that have been selected.\n */\n @Output() public readonly filesChange = new EventEmitter<FileSelection>();\n\n public constructor(\n private readonly element: ElementRef<HTMLElement>,\n protected readonly naturalFileService: NaturalFileService,\n @Inject(DOCUMENT) private readonly document: Document,\n ) {\n super();\n }\n\n public override ngOnDestroy(): void {\n super.ngOnDestroy();\n delete this.fileElement; // faster memory release of dom element\n }\n\n public ngOnInit(): void {\n if (this.selectable) {\n this.enableSelecting();\n }\n\n this.getFileElement().multiple = this.multiple;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.accept) {\n this.getFileElement().setAttribute('accept', changes.accept.currentValue || '*');\n }\n }\n\n private getFileElement(): HTMLInputElement {\n if (this.fileElement) {\n return this.fileElement;\n }\n\n // elm is a file input\n if (isFileInput(this.element.nativeElement)) {\n this.fileElement = this.element.nativeElement;\n\n return this.fileElement;\n }\n\n // create foo file input\n const label = createInvisibleFileInputWrap(this.document);\n this.fileElement = label.getElementsByTagName('input')[0];\n this.fileElement.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild(label);\n\n return this.fileElement;\n }\n\n private enableSelecting(): void {\n const elm = this.element.nativeElement;\n\n if (isFileInput(elm)) {\n const bindedHandler = (): void => this.beforeSelect();\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n return;\n } else {\n const bindedHandler = (event: Event): boolean => this.clickHandler(event);\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n elm.addEventListener('touchend', bindedHandler);\n }\n }\n\n protected handleFiles(files: File[]): void {\n const selection: FileSelection = {\n valid: [],\n invalid: [],\n };\n\n forkJoin(\n files.map(file =>\n this.validate(file).pipe(\n tap(error => {\n if (error) {\n selection.invalid.push({\n file: file,\n error: error,\n });\n } else {\n selection.valid.push(file);\n }\n }),\n ),\n ),\n ).subscribe(() => {\n if (selection.valid.length) {\n this.fileChange.emit(selection.valid[0]);\n }\n\n if (selection.valid.length || selection.invalid.length) {\n this.filesChange.emit(selection);\n\n if (this.broadcast) {\n this.naturalFileService.filesChanged.next(selection);\n }\n }\n\n this.getFileElement().value = '';\n });\n }\n\n /**\n * Called when input has files\n */\n private changeFn(event: Event): void {\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n const fileList = event.target.files;\n\n if (!fileList) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(fileListToArray(fileList));\n }\n\n private clickHandler(event: Event): boolean {\n const elm = this.element.nativeElement;\n if (elm.getAttribute('disabled') || this.fileSelectionDisabled) {\n return false;\n }\n\n // prevent the click if it is a swipe\n if (detectSwipe(event)) {\n return true;\n }\n\n const fileElm = this.getFileElement();\n fileElm.click();\n this.beforeSelect();\n\n return false;\n }\n\n private beforeSelect(): void {\n if (!this.fileElement) {\n return;\n }\n\n // if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElement.value = '';\n }\n\n @HostListener('change', ['$event'])\n public onChange(event: Event): void {\n const fileList = this.getFileElement().files;\n const files: File[] = fileList ? fileListToArray(fileList) : eventToFiles(event);\n\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n private validate(file: File): Observable<string | null> {\n return forkJoin<Record<string, ObservableInput<boolean>>>({\n accept: of(acceptType(this.accept, file.type, file.name)),\n fileSize: of(!(this.maxSize && file.size > this.maxSize)),\n directory: isDirectory(file),\n }).pipe(\n map(result => {\n for (const [key, value] of Object.entries(result)) {\n if (!value) {\n return key;\n }\n }\n\n return null;\n }),\n );\n }\n}\n","import {Directive, EventEmitter, HostBinding, HostListener, OnInit, Output} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\nimport {eventToFiles, stopEvent} from './utils';\nimport {asyncScheduler, Subject} from 'rxjs';\nimport {takeUntil, throttleTime} from 'rxjs/operators';\n\n/**\n * This directive has all options to select files, and adds support for drag'n'drop.\n *\n * It will add the CSS class `natural-file-over` on the component when a file is\n * dragged over. It is up to the component to have some specific styling by using\n * this class.\n *\n * In most cases you probably also want click-to-select, so you should use:\n *\n * <div naturalFileDrop [selectable]=\"true\"></div>\n *\n */\n@Directive({\n selector: ':not([naturalFileSelect])[naturalFileDrop]',\n standalone: true,\n})\nexport class NaturalFileDropDirective extends NaturalAbstractFile implements OnInit {\n @HostBinding('class.natural-file-over') public fileOverClass = false;\n\n /**\n * Emits whenever files are being dragged over\n */\n @Output() public readonly fileOver = new EventEmitter<boolean>();\n\n private readonly rawFileOver = new Subject<boolean>();\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n // Automatically change the class, but not too often to avoid visual\n // flickering in Chrome when hovering across child HTML element of our host.\n // It's not absolutely perfect and if dragging slowly and precisely we can\n // still see flicker, but it should be better for most normal usages.\n this.rawFileOver\n .pipe(\n takeUntil(this.ngUnsubscribe),\n throttleTime(200, asyncScheduler, {\n leading: true,\n trailing: true,\n }),\n )\n .subscribe(fileOver => {\n this.fileOver.emit(fileOver);\n this.fileOverClass = fileOver;\n });\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(event: DragEvent): void {\n if (this.fileSelectionDisabled) {\n return;\n }\n\n this.closeDrags();\n\n const files = eventToFiles(event);\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n @HostListener('dragover', ['$event'])\n public onDragOver(event: DragEvent): void {\n if (!this.hasObservers()) {\n return;\n }\n\n if (this.fileSelectionDisabled) {\n return;\n }\n\n stopEvent(event);\n\n // Change cursor\n const transfer = event.dataTransfer;\n if (transfer) {\n transfer.dropEffect = 'copy';\n }\n\n this.rawFileOver.next(true);\n }\n\n private closeDrags(): void {\n this.rawFileOver.next(false);\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(event: DragEvent): void {\n if (this.fileSelectionDisabled) {\n return;\n }\n\n stopEvent(event);\n this.closeDrags();\n }\n\n private hasObservers(): boolean {\n return (\n this.fileChange.observed ||\n this.filesChange.observed ||\n (this.broadcast && this.naturalFileService.filesChanged.observed)\n );\n }\n}\n","import {Directive, Input} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\n\n/**\n * This directive has all options to select files, except drag'n'drop.\n */\n@Directive({\n selector: ':not([naturalFileDrop])[naturalFileSelect]',\n standalone: true,\n})\nexport class NaturalFileSelectDirective extends NaturalAbstractFile {\n /**\n * Whether the user can click on the element to select something\n *\n * Override parent to enable it by default\n */\n @Input() public override selectable = true;\n}\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\nimport {DomSanitizer, SafeStyle} from '@angular/platform-browser';\nimport {Observable, of, Subject, tap} from 'rxjs';\nimport {NaturalFileService} from '../file.service';\nimport {DOCUMENT, NgIf, UpperCasePipe} from '@angular/common';\nimport {FileModel} from '../types';\nimport {NaturalAlertService} from '../../alert/alert.service';\nimport {NaturalCapitalizePipe} from '../../common/pipes/capitalize.pipe';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatRippleModule} from '@angular/material/core';\nimport {NaturalFileDropDirective} from '../file-drop.directive';\n\n// @dynamic\n@Component({\n selector: 'natural-file',\n templateUrl: './file.component.html',\n styleUrls: ['./file.component.scss'],\n standalone: true,\n imports: [\n NaturalFileDropDirective,\n MatRippleModule,\n NgIf,\n MatIconModule,\n NaturalIconDirective,\n UpperCasePipe,\n NaturalCapitalizePipe,\n ],\n})\nexport class NaturalFileComponent implements OnInit, OnChanges {\n @HostBinding('style.height.px') @Input() public height = 250;\n\n @Input() public action: 'upload' | 'download' | null = null;\n\n @Input() public backgroundSize = 'contain';\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n @Input() public accept = 'image/bmp,image/gif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';\n\n /**\n * If given it will be called when a new file is selected. The callback should typically upload the file\n * to the server and link the newly uploaded file to the existing related object.\n *\n * The callback **must** be able to run even if the calling component has been destroyed. That means in most\n * cases you **must** `bind()` the callback explicitly, like so:\n *\n * ```html\n * <natural-file [uploader]=\"myCallback.bind(this)\"></natural-file>\n * ```\n *\n * Also, you probably **should** set a `[formCtrl]` so that the form is updated automatically, instead of doing\n * it manually within the callback.\n */\n @Input() public uploader?: (file: File) => Observable<FileModel>;\n\n @Input() public model: FileModel | null = null;\n\n /**\n * If provided, its value will get updated when the model changes.\n * But its value is never read, so if you want to set a value use `[model]` instead.\n */\n @Input() public formCtrl: AbstractControl | null | undefined = null;\n\n /**\n * This **must not** be used to mutate the server, because it is very likely it will never be called if the\n * human navigates away from the page before the upload is finished. Instead, you should use `[uploader]`.\n */\n @Output() public readonly modelChange = new EventEmitter<FileModel>();\n\n public imagePreview: SafeStyle | null = null;\n public filePreview: string | null = null;\n\n public constructor(\n private readonly naturalFileService: NaturalFileService,\n private readonly alertService: NaturalAlertService,\n private readonly sanitizer: DomSanitizer,\n @Inject(DOCUMENT) private readonly document: Document,\n ) {}\n\n public ngOnInit(): void {\n this.updateImage();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.model && changes.model.previousValue !== changes.model.currentValue) {\n this.updateImage();\n }\n }\n\n public upload(file: File): void {\n this.model = {file: file};\n this.updateImage();\n\n if (this.formCtrl) {\n this.formCtrl.setValue(this.model);\n }\n\n const observable =\n this.uploader?.(file).pipe(tap(() => this.alertService.info($localize`Mis à jour`))) ?? of(this.model);\n\n observable.subscribe(result => {\n this.model = result;\n if (this.formCtrl) {\n this.formCtrl.setValue(this.model);\n }\n\n this.modelChange.emit(this.model);\n });\n }\n\n public getDownloadLink(): null | string {\n if (this.action !== 'download') {\n return null;\n }\n\n return this.naturalFileService.getDownloadLink(this.model);\n }\n\n private updateImage(): void {\n this.imagePreview = null;\n this.filePreview = null;\n if (!this.model) {\n return;\n }\n\n if (this.model.file?.type.includes('image/')) {\n // Model from upload (before saving)\n this.getBase64(this.model.file).subscribe(result => {\n const content = 'url(data:' + this.model?.file?.type + ';base64,' + result + ')';\n this.imagePreview = this.sanitizer.bypassSecurityTrustStyle(content);\n });\n } else if (this.model.file) {\n this.filePreview = this.model.file.type.split('/')[1];\n } else if (this.model.__typename === 'Image' && this.model.id) {\n // Model image with id, use specific API to render image by size\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not show image preview because `window` is undefined');\n }\n\n const loc = window.location;\n const height = this.height ? '/' + this.height : '';\n\n // create image url without port to stay compatible with dev mode\n const image = loc.protocol + '//' + loc.hostname + '/api/image/' + this.model.id + height;\n this.imagePreview = this.sanitizer.bypassSecurityTrustStyle('url(' + image + ')');\n } else if (this.model?.mime && ['File', 'AccountingDocument'].includes(this.model.__typename || '')) {\n this.filePreview = this.model.mime.split('/')[1];\n } else if (this.model.src) {\n // external url\n this.imagePreview = this.sanitizer.bypassSecurityTrustStyle('url(' + this.model.src + ')');\n }\n }\n\n private getBase64(file: File | null): Observable<string> {\n if (!file) {\n return of('');\n }\n\n const subject = new Subject<string>();\n\n const reader = new FileReader();\n reader.addEventListener('load', (ev: any) => {\n subject.next(btoa(ev.target.result));\n subject.complete();\n });\n reader.readAsBinaryString(file);\n\n return subject.asObservable();\n }\n}\n","<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [style.backgroundImage]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n <div *ngIf=\"filePreview\" class=\"file-preview\">\n <mat-icon [size]=\"height * 0.33\" naturalIcon=\"attachment\"></mat-icon>\n {{ filePreview | uppercase }}\n </div>\n\n <div class=\"action-overlay\">\n <mat-icon *ngIf=\"action === 'upload'\" [size]=\"height * 0.66\" naturalIcon=\"cloud_upload\"></mat-icon>\n <mat-icon *ngIf=\"action === 'download'\" [size]=\"height * 0.66\" naturalIcon=\"get_app\"></mat-icon>\n {{ action | capitalize }}\n </div>\n</a>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './file-drop.directive';\nexport * from './file-select.directive';\nexport * from './file.service';\nexport {InvalidFile, FileSelection} from './abstract-file';\nexport * from './component/file.component';\nexport * from './types';\n","import {Component, Input} from '@angular/core';\nimport {ThemePalette} from '@angular/material/core';\nimport {RouterLink} from '@angular/router';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n selector: 'natural-fixed-button',\n templateUrl: './fixed-button.component.html',\n styleUrls: ['./fixed-button.component.scss'],\n standalone: true,\n imports: [MatButtonModule, RouterLink, MatIconModule, NaturalIconDirective],\n})\nexport class NaturalFixedButtonComponent {\n @Input({required: true}) public icon!: string;\n @Input() public link: RouterLink['routerLink'] = [];\n @Input() public color: ThemePalette = 'accent';\n @Input() public disabled = false;\n}\n","<button [color]=\"color\" [disabled]=\"disabled\" [routerLink]=\"link\" mat-fab>\n <mat-icon [naturalIcon]=\"icon\"></mat-icon>\n</button>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button.component';\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {NaturalFixedButtonComponent} from '../fixed-button/fixed-button.component';\nimport {NgIf} from '@angular/common';\n\ntype Model = {\n id?: string;\n permissions?: {\n delete: boolean;\n };\n};\n\n@Component({\n selector: 'natural-fixed-button-detail',\n templateUrl: './fixed-button-detail.component.html',\n styleUrls: ['./fixed-button-detail.component.scss'],\n standalone: true,\n imports: [NgIf, NaturalFixedButtonComponent, MatTooltipModule],\n})\nexport class NaturalFixedButtonDetailComponent {\n private canChange = true;\n public isCreation = false;\n\n public get model(): Model {\n return this._model;\n }\n\n @Input({required: true})\n public set model(value: Model) {\n this._model = value;\n if (this.canChange) {\n this.isCreation = !this._model.id;\n this.canChange = false;\n }\n }\n\n private _model!: Model;\n\n @Input({required: true}) public form!: FormGroup;\n\n @Output() public readonly create = new EventEmitter<void>();\n @Output() public readonly delete = new EventEmitter<void>();\n\n public constructor(route: ActivatedRoute) {\n route.params.pipe(takeUntilDestroyed()).subscribe(() => (this.canChange = true));\n }\n\n public clickCreate(): void {\n if (this.form.enabled) {\n this.create.emit();\n }\n }\n\n public clickDelete(): void {\n if (this.form.enabled) {\n this.delete.emit();\n }\n }\n}\n","<natural-fixed-button\n (click)=\"clickCreate()\"\n *ngIf=\"isCreation\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'accent' : 'warn'\"\n class=\"detail-speed-dial\"\n icon=\"save\"\n></natural-fixed-button>\n\n<natural-fixed-button\n (click)=\"clickDelete()\"\n *ngIf=\"!isCreation && (!model.permissions || model.permissions.delete)\"\n [disabled]=\"form.disabled\"\n class=\"detail-speed-dial\"\n color=\"warn\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer définitivement\"\n matTooltipPosition=\"left\"\n></natural-fixed-button>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button-detail.component';\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef, MatDialogModule} from '@angular/material/dialog';\nimport {clone, defaults} from 'lodash-es';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {OrganizedModelSelection} from '../hierarchic-selector/hierarchic-selector.service';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalHierarchicSelectorComponent} from '../hierarchic-selector/hierarchic-selector.component';\n\nexport interface HierarchicDialogResult {\n hierarchicSelection?: OrganizedModelSelection;\n searchSelections?: NaturalSearchSelections | null;\n}\n\nexport interface HierarchicDialogConfig {\n /**\n * Configuration to setup rules of hierarchy\n */\n hierarchicConfig: NaturalHierarchicConfiguration[];\n\n /**\n * Selected items when HierarchicComponent initializes\n */\n hierarchicSelection?: OrganizedModelSelection;\n\n /**\n * Filters to apply on queries (when opening new level of hierarchy)\n */\n hierarchicFilters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Multiple selection if true or single selection if false\n */\n multiple?: boolean;\n\n /**\n * Allow to validate selection with no items checked\n */\n allowUnselect?: boolean;\n\n /**\n * Facets for natural-search in HierarchicComponent\n */\n searchFacets?: NaturalSearchFacets;\n\n /**\n * Selections of natural search to initialize on HierarchicComponent initialisation\n */\n searchSelections?: NaturalSearchSelections | null;\n}\n\n@Component({\n templateUrl: './hierarchic-selector-dialog.component.html',\n styleUrls: ['./hierarchic-selector-dialog.component.scss'],\n standalone: true,\n imports: [MatDialogModule, NaturalHierarchicSelectorComponent, MatButtonModule],\n})\nexport class NaturalHierarchicSelectorDialogComponent {\n /**\n * Set of hierarchic configurations to pass as attribute to HierarchicComponent\n */\n public config: HierarchicDialogConfig;\n\n /**\n * Natural search selections after initialisation\n */\n public searchSelectionsOutput: NaturalSearchSelections | undefined | null;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: HierarchicDialogConfig,\n private dialogRef: MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult>,\n ) {\n this.config = defaults(data, {multiple: true, allowUnselect: true});\n this.searchSelectionsOutput = this.config.searchSelections;\n }\n\n public close(selected: OrganizedModelSelection | undefined): void {\n const result: HierarchicDialogResult = {\n hierarchicSelection: clone(selected),\n searchSelections: clone(this.searchSelectionsOutput),\n };\n\n this.dialogRef.close(result);\n }\n}\n","<h2 i18n mat-dialog-title>Sélection</h2>\n\n<mat-dialog-content>\n <natural-hierarchic-selector\n (selectionChange)=\"config.hierarchicSelection = $event\"\n [selected]=\"config.hierarchicSelection ?? {}\"\n [config]=\"config.hierarchicConfig\"\n [filters]=\"config.hierarchicFilters\"\n [multiple]=\"config.multiple ?? false\"\n [allowUnselect]=\"config.allowUnselect ?? true\"\n [searchFacets]=\"config.searchFacets ?? []\"\n [searchSelections]=\"config.searchSelections ?? []\"\n (searchSelectionChange)=\"searchSelectionsOutput = $event\"\n ></natural-hierarchic-selector>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-dialog-close mat-button i18n>Annuler</button>\n <button (click)=\"close(config.hierarchicSelection)\" color=\"primary\" mat-raised-button\n ><span i18n>Valider</span>\n </button>\n</mat-dialog-actions>\n","import {Injectable} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {defaults} from 'lodash-es';\nimport {\n HierarchicDialogConfig,\n HierarchicDialogResult,\n NaturalHierarchicSelectorDialogComponent,\n} from './hierarchic-selector-dialog.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorDialogService {\n public constructor(private readonly dialog: MatDialog) {}\n\n public open(\n hierarchicConfig: HierarchicDialogConfig,\n dialogConfig?: MatDialogConfig,\n ): MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult> {\n const defaultDialogConfig = {\n width: '700px',\n data: hierarchicConfig,\n };\n\n return this.dialog.open<\n NaturalHierarchicSelectorDialogComponent,\n HierarchicDialogConfig,\n HierarchicDialogResult\n >(NaturalHierarchicSelectorDialogComponent, defaults(dialogConfig, defaultDialogConfig));\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './classes/hierarchic-configuration';\nexport * from './classes/hierarchic-filters-configuration';\nexport * from './hierarchic-selector/hierarchic-selector.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nexport * from './hierarchic-selector/hierarchic-selector.service';\n","import {APP_INITIALIZER, inject, Provider} from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {NATURAL_ICONS_CONFIG, NaturalIconsConfig} from './icon.directive';\n\n/**\n * Configure Material Symbols, instead of Material Icons, and configure custom Natural icons\n */\nexport function provideIcons(config: NaturalIconsConfig): Provider[] {\n return [\n {\n provide: NATURAL_ICONS_CONFIG,\n useValue: config,\n },\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: (): (() => void) => {\n const iconRegistry = inject(MatIconRegistry);\n return () => {\n // Replace the old Material Icons by the new Material Symbols\n // This means that `https://fonts.googleapis.com/icon?family=Material+Icons` must be\n // replaced by `https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@1`\n const defaultFontSetClasses = iconRegistry.getDefaultFontSetClass();\n const outlinedFontSetClasses = defaultFontSetClasses\n .filter(fontSetClass => fontSetClass !== 'material-icons')\n .concat(['material-symbols-outlined']);\n iconRegistry.setDefaultFontSetClass(...outlinedFontSetClasses);\n };\n },\n },\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './icon.directive';\nexport {provideIcons} from './icon.module';\n","import {ComponentType} from '@angular/cdk/portal';\nimport {InjectionToken, Injector} from '@angular/core';\nimport {UrlSegment} from '@angular/router';\nimport {Literal} from '../../types/types';\nimport {Observable} from 'rxjs';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {LinkableObject} from '../../services/link-mutation.service';\n\n/**\n * Kind of snapshot of the instance of a panel activated route\n */\nexport interface NaturalPanelsRouteConfig {\n segments: UrlSegment[];\n path: string;\n}\n\n/**\n * Config required to manage url and instantiate component correctly\n */\nexport interface NaturalPanelConfig {\n component: ComponentType<NaturalAbstractPanel>;\n injector: Injector | null;\n resolve: NaturalPanelResolves;\n params: Literal;\n rule: NaturalPanelsRouterRule;\n route: NaturalPanelsRouteConfig;\n}\n\n/**\n * Data provided to instantiated components in context of a panel/dialog\n */\nexport interface NaturalPanelData {\n config: NaturalPanelConfig;\n data: Literal;\n\n /**\n * Related objects that should be linked to the object shown in the panel after its creation\n */\n linkableObjects: LinkableObject[];\n}\n\n/**\n * Similar to Angular functional resolver interface, but simpler for our panels' needs\n */\ntype NaturalPanelResolve<T> = (route: NaturalPanelConfig) => Observable<T>;\nexport type NaturalPanelResolves = {[key: string]: NaturalPanelResolve<unknown>};\n/**\n * Configuration for a route\n */\nexport interface NaturalPanelsRouterRule {\n path: string;\n component: ComponentType<NaturalAbstractPanel>;\n resolve?: NaturalPanelResolves;\n}\n\nexport interface NaturalPanelsBeforeOpenPanel {\n itemData: NaturalPanelData;\n panelConfig: NaturalPanelConfig;\n fullPanelsConfig: NaturalPanelConfig[];\n resolvedResult: any; // todo : Generic or NaturalAbstractModelService\n}\n\nexport interface NaturalPanelsHooksConfig {\n beforeOpenPanel?: (\n injector: Injector,\n naturalPanelsBeforeOpenPanel: NaturalPanelsBeforeOpenPanel,\n ) => NaturalPanelData;\n}\n\n// Array of NaturalPanelsRouterRule\nexport type NaturalPanelsRoutesConfig = Array<NaturalPanelsRouterRule>;\n\nexport const PanelsHooksConfig = new InjectionToken<NaturalPanelsHooksConfig>('NaturalPanelsHooksConfig');\n","import {Provider} from '@angular/core';\nimport {NaturalPanelsHooksConfig, PanelsHooksConfig} from './types';\n\nexport function providePanels(hooks: NaturalPanelsHooksConfig): Provider[] {\n return [\n {\n provide: PanelsHooksConfig,\n useValue: hooks,\n },\n ];\n}\n","import {Injector} from '@angular/core';\nimport {Route, UrlMatcher, UrlMatchResult, UrlSegment, UrlSegmentGroup} from '@angular/router';\nimport {flatten, merge} from 'lodash-es';\nimport {NaturalPanelConfig, NaturalPanelsRouterRule} from './types';\nimport {Literal} from '../../types/types';\n\nfunction getConsumedSegments(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): UrlSegment[] {\n return flatten(getStackConfig(segments, routes).map(conf => conf.route.segments));\n}\n\n/**\n * Return a list of items specifying the component, the service and the optional id of url segments\n */\nexport function getStackConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig[] {\n if (!routes) {\n return [];\n }\n\n const comp = getComponentConfig(segments, routes, injector);\n\n if (comp) {\n return [comp].concat(getStackConfig(segments.slice(comp.route.segments.length), routes, injector));\n }\n\n return [];\n}\n\n/**\n * Returns an object with a component class, a service and an optional id from current and next url segments\n */\nfunction getComponentConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig | null {\n if (!segments.length) {\n return null;\n }\n\n // For each config\n for (const routeConfig of routes) {\n const params: Literal = {};\n const configSegments = routeConfig.path.split('/');\n let match = true;\n\n // For each current url segment\n for (let i = 0; i < segments.length; i++) {\n if (!configSegments[i]) {\n match = false;\n break;\n }\n\n // If find variable, store it\n if (configSegments[i].indexOf(':') > -1 && +segments[i].path > 0) {\n params[configSegments[i].replace(':', '')] = segments[i].path;\n } else if (configSegments[i] !== segments[i].path) {\n // If segments are different, url does not match\n match = false;\n break;\n }\n }\n\n if (match) {\n const matrixParams = segments.reduce((groupedParams, segment) => {\n return merge(groupedParams, segment.parameters);\n }, {});\n\n return {\n component: routeConfig.component,\n injector: injector,\n resolve: routeConfig.resolve ?? {},\n params: merge(params, matrixParams),\n rule: routeConfig,\n route: {\n segments: segments,\n path: segments.map(s => s.path).join('/'),\n },\n };\n }\n }\n\n if (segments.length > 1) {\n return getComponentConfig(segments.slice(0, -1), routes, injector);\n }\n\n return null;\n}\n\nexport const naturalPanelsUrlMatcher: UrlMatcher = (\n segments: UrlSegment[],\n group: UrlSegmentGroup,\n route: Route,\n): UrlMatchResult | null => {\n const matchedSegments = getConsumedSegments(segments, route.data ? route.data.panelsRoutes : []);\n\n if (matchedSegments.length) {\n return {consumed: matchedSegments};\n }\n\n return null;\n};\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Inject, Injectable, Injector, runInInjectionContext} from '@angular/core';\nimport {MediaObserver} from '@ngbracket/ngx-layout';\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\nimport {ActivatedRoute, DefaultUrlSerializer, NavigationError, Router, UrlSegment} from '@angular/router';\nimport {differenceWith, flatten, isEqual} from 'lodash-es';\nimport {forkJoin, Observable, of, Subject, Subscription} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {getStackConfig} from './panels.urlmatcher';\nimport {\n NaturalPanelConfig,\n NaturalPanelData,\n NaturalPanelsBeforeOpenPanel,\n NaturalPanelsHooksConfig,\n NaturalPanelsRouterRule,\n PanelsHooksConfig,\n} from './types';\n\nfunction segmentsToString(segments: UrlSegment[]): string {\n return segments.map(s => s.toString()).join('/');\n}\n\nfunction compareConfigs(a: NaturalPanelConfig, b: NaturalPanelConfig): boolean {\n return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);\n}\n\n/**\n * TODO: implement route update when closing dialog with escape\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPanelsService {\n /**\n * Because of this static property Panels are **not** compatible with SSR.\n * And we cannot make it non-static, because `UrlMatcher` cannot be injected.\n */\n private static _opened = false;\n public static get opened(): boolean {\n return this._opened;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing\n */\n public afterAllClosed = new Subject<void>();\n /**\n * Cache for panels counter. Works more like an ID.\n * Is used to give an unique identifier to multiple similar panels configurations\n */\n private counter = 1;\n /**\n * Class applied to dialog overlay related with panels\n * If change, change CSS too\n */\n private panelClass = 'panel';\n\n /**\n * Cache for panels setup before navigation change.\n * Used to detect panels openings/closings and adapt for new configuration\n */\n private oldFullConfig: NaturalPanelConfig[] = [];\n\n /**\n * Cache for subscription stop\n */\n private routeSub?: Subscription;\n\n /**\n * Cache for subscription stop\n */\n private navSub?: Subscription;\n\n /**\n * Horizontal gaps between panels\n */\n private panelsOffsetH = 35;\n\n /**\n * Vertical gaps between panels\n */\n private panelsOffsetV = 40;\n\n /**\n * Cache of previous screen size\n * Used to change panels stack orientation on small screens\n */\n private media: string | null = null;\n\n public constructor(\n private readonly router: Router,\n private readonly dialog: MatDialog,\n private readonly injector: Injector,\n @Inject(PanelsHooksConfig) private hooksConfig: NaturalPanelsHooksConfig,\n private mediaService: MediaObserver,\n ) {\n // Watch media to know if display panels horizontally or vertically\n this.mediaService.asObservable().subscribe(medias => {\n for (const media of medias) {\n if (!this.media) {\n this.media = media.mqAlias;\n } else if (this.media !== media.mqAlias) {\n this.media = media.mqAlias;\n this.updateComponentsPosition();\n }\n }\n });\n }\n\n public start(route: ActivatedRoute): void {\n NaturalPanelsService._opened = true;\n this.routeSub = route.url.subscribe(segments => {\n this.updatePanels(segments, route.snapshot.data.panelsRoutes);\n });\n\n this.navSub = this.router.events.subscribe(ev => {\n if (!(ev instanceof NavigationError)) {\n return;\n }\n\n // Abort and propagate navigation error\n if (ev.url.endsWith('/')) {\n this.stop();\n\n // This is a bit hackish: we hardcode an impossible url to trigger normal navigation error mechanism\n this.router.navigateByUrl('panels-reached-invalid-url');\n\n return;\n }\n\n this.counter++;\n\n // pc stands for \"panel counter\", required to give an identification to panels with exact same config\n // E.g /new\n const wantedUrl = ev.url + ';pc=' + this.counter;\n\n // Segments matching from wanted url. E.g ~ ['new']\n const wantedUrSegments = new DefaultUrlSerializer().parse(wantedUrl).root.children.primary.segments;\n\n // Don't match any config\n const wantedConfig = getStackConfig(wantedUrSegments, route.snapshot.data.panelsRoutes, this.injector);\n\n if (wantedConfig.length) {\n return this.appendConfigToCurrentUrl(wantedConfig);\n }\n\n // Currently activated routes. E.g ['objective', 'objective', 123, 'risk']\n const currentSegments = flatten(\n this.dialog.openDialogs.map(d => d.componentInstance.panelData.config.route.segments),\n );\n\n // Last segment. E.g ['risk']\n const lastOfCurrentSegments = currentSegments.slice(-1);\n\n // Config for ['risk', 'new']\n const currentAndWantedConfig = getStackConfig(\n lastOfCurrentSegments.concat(wantedUrSegments),\n route.snapshot.data.panelsRoutes,\n this.injector,\n );\n\n return this.appendConfigToCurrentUrl(currentAndWantedConfig);\n });\n }\n\n /**\n * Uses given configuration to add in the end of current url\n * Neutralizes router error handling\n */\n private appendConfigToCurrentUrl(config: NaturalPanelConfig[]): void {\n const originalErrorHandler = this.router.errorHandler;\n\n // Nullify error handler (will be de-neutralized after route redirection)\n if (config) {\n this.router.errorHandler = () => undefined;\n }\n\n // Navigate to same url + /risk/new Result : /risk/risk/new\n const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');\n\n this.router.navigateByUrl(this.router.url + '/' + newUrl).then(() => {\n // After navigation has ended, restore original error handler because he's not a bad guy\n this.router.errorHandler = originalErrorHandler;\n });\n }\n\n public stop(): void {\n NaturalPanelsService._opened = false;\n this.routeSub?.unsubscribe();\n this.navSub?.unsubscribe();\n this.dialog.closeAll();\n this.oldFullConfig = [];\n this.afterAllClosed.next();\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n */\n public goToPanelByComponent(component: NaturalAbstractPanel): void {\n this.goToPanelByIndex(this.getPanelIndex(component));\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n */\n public goToPenultimatePanel(): void {\n this.goToPanelByIndex(this.dialog.openDialogs.length - 2);\n }\n\n /**\n * Calls the new url that only includes the segments from the panels we want to stay open\n */\n private goToPanelByIndex(index: number): void {\n // Extracts url segments from next panel until last one\n const url = this.dialog.openDialogs\n .slice(index + 1)\n .map(dialog => {\n return segmentsToString(dialog.componentInstance.panelData.config.route.segments);\n })\n .join('/');\n\n // Remove extra segments and redirects to root\n this.router.navigateByUrl(this.router.url.replace('/' + url, ''));\n }\n\n /**\n * Selecting a panel is equivalent to close all those that are in front of him\n * @param index of panel in stack. The most behind (the first one) is 0.\n */\n private selectPanelByIndex(index: number): Observable<void> {\n const lastDialog = this.dialog.openDialogs[this.dialog.openDialogs.length - 1];\n\n // Update new panels set positions\n this.updateComponentsPosition();\n\n for (let i = this.dialog.openDialogs.length - 1; i >= index + 1; i--) {\n this.dialog.openDialogs[i].close();\n }\n\n return lastDialog.afterClosed();\n }\n\n /**\n * Open new panels if url has changed with new segments\n */\n private updatePanels(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): void {\n // Transform url segments into a config with component name and ID if provided in next segment\n // Returns an array of configs, each config represents the content relative to a panel\n const newFullConfig = getStackConfig(segments, routes, this.injector);\n const configsToRemove = differenceWith(this.oldFullConfig, newFullConfig, compareConfigs);\n const configsToAdd = differenceWith(newFullConfig, this.oldFullConfig, compareConfigs);\n\n const indexOfNextPanel = this.oldFullConfig.length - configsToRemove.length - 1;\n\n if (configsToRemove.length && configsToAdd.length) {\n // Add and remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => {\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n });\n } else if (configsToRemove.length && !configsToAdd.length) {\n // only remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => this.updateComponentsPosition());\n } else if (!configsToRemove.length && configsToAdd.length) {\n // only add panels\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n }\n\n this.oldFullConfig = newFullConfig;\n }\n\n /**\n * Resolve all services, then open panels\n */\n private openPanels(\n newItemsConfig: NaturalPanelConfig[],\n fullConfig: NaturalPanelConfig[],\n ): Observable<Observable<any> | null> {\n const subject = new Subject<Observable<any> | null>();\n\n // Resolve everything before opening a single panel\n const resolves = newItemsConfig.map((conf: NaturalPanelConfig) => this.getResolvedData(conf));\n\n // ForkJoin emits when all promises are executed;\n forkJoin(resolves).subscribe(resolvedResult => {\n // For each new config entry, open a new panel\n for (let i = 0; i < newItemsConfig.length; i++) {\n const config = newItemsConfig[i];\n let itemData: NaturalPanelData = {\n // Config of actual panel route\n config: config,\n\n // Data resolved by service\n // Use in component by calling this.panelData.data.xyz\n data: resolvedResult[i],\n linkableObjects: [],\n };\n\n if (this.hooksConfig && this.hooksConfig.beforeOpenPanel) {\n const event: NaturalPanelsBeforeOpenPanel = {\n itemData: itemData,\n panelConfig: config,\n resolvedResult: resolvedResult,\n fullPanelsConfig: fullConfig,\n };\n\n itemData = this.hooksConfig.beforeOpenPanel(this.injector, event);\n }\n\n this.openPanel(config.component, itemData);\n }\n\n this.dialog.openDialogs[this.dialog.openDialogs.length - 1].afterOpened().subscribe(() => {\n subject.next(null);\n });\n });\n\n return subject;\n }\n\n private getResolvedData(config: NaturalPanelConfig): Observable<{[key: string]: unknown}> {\n if (!config.resolve || (config.resolve && Object.keys(config.resolve).length === 0)) {\n return of({});\n }\n\n const resolveKeys = Object.keys(config.resolve);\n const resolvedData: {[key: string]: Observable<unknown>} = {};\n const injector = config.injector;\n\n if (injector) {\n resolveKeys.forEach(key => {\n resolvedData[key] = runInInjectionContext(injector, () => config.resolve[key](config));\n });\n }\n\n return forkJoin(resolvedData).pipe(\n map(result => {\n return (result as any).model || result;\n }),\n );\n }\n\n private openPanel(componentOrTemplateRef: ComponentType<NaturalAbstractPanel>, data: NaturalPanelData): void {\n const conf: MatDialogConfig = {\n panelClass: this.panelClass,\n closeOnNavigation: false,\n hasBackdrop: this.dialog.openDialogs.length === 0,\n height: '100%',\n width: '960px',\n position: {\n top: '0',\n right: '0',\n },\n };\n\n const dialogRef = this.dialog.open<NaturalAbstractPanel>(componentOrTemplateRef, conf);\n\n // Panelisable interface attributes/functions\n dialogRef.componentInstance.initPanel(data);\n\n dialogRef.beforeClosed().subscribe(() => {\n const index = this.getPanelIndex(dialogRef.componentInstance);\n this.goToPanelByIndex(index - 1);\n });\n }\n\n /**\n * Return panel position (index) by searching matching component\n */\n private getPanelIndex(component: NaturalAbstractPanel): number {\n if (!component) {\n return -1;\n }\n\n return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);\n }\n\n /**\n * Repositions panels from start until given index\n */\n private updateComponentsPosition(): void {\n if (!this.dialog.openDialogs.length) {\n return;\n }\n\n // Select the panels that are still opened, ignore the others because they'll be closed\n const affectedElements = this.dialog.openDialogs;\n\n for (let i = 0; i < affectedElements.length; i++) {\n const dialog = affectedElements[i];\n\n // Set all panels as \"hidden\" except last one. IsFrontPanel attribute causes a CSS that hides body via hostbinding\n dialog.componentInstance.isFrontPanel = i === affectedElements.length - 1;\n dialog.componentInstance.panelService = this;\n\n // Assign offset\n const deep = affectedElements.length - 1 - i;\n\n let position: any = {right: deep * this.panelsOffsetH + 'px'};\n if (this.media === 'xs' && affectedElements.length > 1) {\n position = {\n top: i * this.panelsOffsetV + 'px',\n right: '0px',\n };\n }\n\n dialog.updatePosition(position);\n }\n }\n}\n","import {Component, OnDestroy} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n@Component({\n selector: 'natural-panels',\n template: '',\n standalone: true,\n})\nexport class NaturalPanelsComponent implements OnDestroy {\n // PanelsComponent is kind of a \"ghost\" component to respond to an url matcher in route config,\n // An UrlMatcher (matcher attribute) is required to catch urls with an undefined number of params in url after a given param /panels/\n public constructor(private readonly panelsService: NaturalPanelsService, route: ActivatedRoute) {\n this.panelsService.start(route);\n }\n\n public ngOnDestroy(): void {\n this.panelsService.stop();\n }\n}\n","import {UrlMatcher, UrlMatchResult, UrlSegment} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n/**\n * Url fallback matcher to be used instead of `path: '**'` when Panel system\n * is used in the project.\n */\nexport const fallbackIfNoOpenedPanels: UrlMatcher = (segments: UrlSegment[]): UrlMatchResult | null => {\n if (!NaturalPanelsService.opened) {\n return {consumed: segments};\n }\n\n return null;\n};\n","/*\n * Public API Surface of natural\n */\n\nexport {providePanels} from './panels.module';\nexport * from './panels.component';\nexport * from './panels.service';\nexport {naturalPanelsUrlMatcher} from './panels.urlmatcher';\nexport {fallbackIfNoOpenedPanels} from './fallback-if-no-opened-panels.urlmatcher';\nexport * from './abstract-panel';\nexport * from './types';\n","import {\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {PageEvent, MatPaginatorModule} from '@angular/material/paginator';\nimport {forkJoin, tap} from 'rxjs';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {NaturalDataSource, PaginatedData} from '../../classes/data-source';\nimport {NaturalQueryVariablesManager, PaginationInput, QueryVariables} from '../../classes/query-variable-manager';\nimport {HierarchicFiltersConfiguration} from '../../modules/hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {LinkableObject, NaturalLinkMutationService} from '../../services/link-mutation.service';\nimport {NaturalHierarchicConfiguration} from '../hierarchic-selector/classes/hierarchic-configuration';\nimport {HierarchicDialogConfig} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nimport {NaturalHierarchicSelectorDialogService} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nimport {NaturalSelectComponent} from '../select/select/select.component';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractModelService} from '../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall} from '../../types/types';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatTableModule} from '@angular/material/table';\nimport {NgIf, NgTemplateOutlet} from '@angular/common';\n\n/**\n * Custom template usage :\n * <natural-relations [main]=\"owner\" [service]=\"svc\" [filter]=\"{}\" placeholder=\"Select an item\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-relations>\n */\n\n@Component({\n selector: 'natural-relations',\n templateUrl: './relations.component.html',\n styleUrls: ['./relations.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatTableModule,\n NgTemplateOutlet,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n NaturalIconDirective,\n MatPaginatorModule,\n MatProgressSpinnerModule,\n NaturalSelectComponent,\n ],\n})\nexport class NaturalRelationsComponent<\n TService extends NaturalAbstractModelService<\n unknown,\n any,\n PaginatedData<LinkableObject>,\n QueryVariables,\n unknown,\n any,\n unknown,\n any,\n unknown,\n any\n >,\n >\n extends NaturalAbstractController\n implements OnInit, OnChanges, OnDestroy\n{\n @ViewChild(NaturalSelectComponent) private select?: NaturalSelectComponent<TService>;\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<unknown>;\n\n @Input() public service?: TService;\n\n /**\n * The placeholder used in the button to add a new relation\n */\n @Input() public placeholder = '';\n\n /**\n * Filter for autocomplete selector\n */\n @Input() public autocompleteSelectorFilter?: ExtractVall<TService>['filter'] | null | undefined;\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n @Input() public displayWith?: (item: ExtractTallOne<TService> | null) => string;\n\n /**\n * Whether the relations can be changed\n */\n @Input() public disabled = false;\n\n /**\n * The main object to which all relations belong to\n */\n @Input({required: true}) public main!: LinkableObject & {permissions?: {update: boolean}};\n\n /**\n * Emits after relations were successfully added on the server\n */\n @Output() public readonly selectionChange = new EventEmitter<void>();\n\n /**\n * Filters for hierarchic selector\n */\n @Input() public hierarchicSelectorFilters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Configuration in case we prefer hierarchic selection over autocomplete selection\n */\n @Input() public hierarchicSelectorConfig?: NaturalHierarchicConfiguration[];\n\n /**\n * Link mutation semantic\n */\n @Input() public otherName?: string | null;\n\n /**\n * Listing service instance\n */\n public dataSource?: NaturalDataSource<PaginatedData<LinkableObject>>;\n public loading = false;\n\n /**\n * Table columns\n */\n public displayedColumns = ['name'];\n\n public readonly pageSizeOptions = [5, 25, 50, 100];\n protected readonly defaultPagination = {\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Observable variables/options for listing service usage and apollo watchQuery\n */\n private variablesManager: NaturalQueryVariablesManager<QueryVariables> = new NaturalQueryVariablesManager();\n\n public readonly removing = new Set<LinkableObject>();\n\n public constructor(\n private readonly linkMutationService: NaturalLinkMutationService,\n private readonly hierarchicSelectorDialog: NaturalHierarchicSelectorDialogService,\n ) {\n super();\n }\n\n /**\n * The filter used to filter relations\n *\n * So if the relations are from one action -> to many objectives, then the filter must filter\n * the objectives that have indeed a relation to the particular action.\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter']) {\n this.variablesManager.set('relations-filter', {filter: filter});\n }\n\n public ngOnInit(): void {\n this.pagination();\n\n // Force disabled if cannot update object\n if (this.main && this.main.permissions) {\n this.disabled = this.disabled || !this.main.permissions.update;\n }\n }\n\n public ngOnChanges(): void {\n if (this.service) {\n this.queryItems();\n }\n\n if (this.disabled && this.displayedColumns.indexOf('unlink') > -1) {\n this.displayedColumns.pop();\n } else if (!this.disabled && this.displayedColumns.indexOf('unlink') === -1) {\n this.displayedColumns.push('unlink');\n }\n }\n\n /**\n * Unlink action\n * Refetch result to display it in table\n */\n public removeRelation(relation: LinkableObject): void {\n this.removing.add(relation);\n\n this.linkMutationService\n .unlink(this.main, relation, this.otherName)\n .pipe(finalize(() => this.removing.delete(relation)))\n .subscribe(() => this.dataSource?.remove(relation));\n }\n\n /**\n * Link action\n * Refetch result to display it in table\n * TODO : could maybe use \"update\" attribute of apollo.mutate function to update table faster (but hard to do it here)\n */\n public addRelations(relations: (LinkableObject | ExtractTallOne<TService> | string | null)[]): void {\n const observables = relations\n .filter((relation): relation is LinkableObject => !!relation && typeof relation === 'object')\n .map(relation => this.linkMutationService.link(this.main, relation, this.otherName));\n\n forkJoin(observables).subscribe(() => {\n this.selectionChange.emit();\n this.select?.clear();\n });\n }\n\n public pagination(event?: PageEvent): void {\n let pagination: PaginationInput | null = null;\n if (\n event &&\n (event.pageIndex !== this.defaultPagination.pageIndex || event.pageSize !== this.defaultPagination.pageSize)\n ) {\n pagination = {\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n };\n }\n\n this.variablesManager.set('pagination', {pagination: pagination ? pagination : this.defaultPagination});\n }\n\n public getDisplayFn(): (item: ExtractTallOne<TService> | null) => string {\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return (item: any) => (item ? item.fullName || item.name : '');\n }\n\n public openNaturalHierarchicSelector(): void {\n const selectAtKey = this.getSelectKey();\n\n if (!selectAtKey || !this.hierarchicSelectorConfig) {\n return;\n }\n\n const selected = {};\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: this.hierarchicSelectorConfig,\n hierarchicSelection: selected,\n hierarchicFilters: this.hierarchicSelectorFilters,\n multiple: true,\n };\n\n this.hierarchicSelectorDialog\n .open(hierarchicConfig)\n .afterClosed()\n .subscribe(result => {\n if (result && result.hierarchicSelection !== undefined) {\n const selection = result.hierarchicSelection[selectAtKey];\n if (selection.length) {\n this.addRelations(selection);\n }\n }\n });\n }\n\n /**\n * Get list from database\n */\n private queryItems(): void {\n if (!this.service) {\n return;\n }\n\n this.loading = true;\n const queryRef = this.service.watchAll(this.variablesManager).pipe(\n takeUntil(this.ngUnsubscribe),\n tap({\n next: () => (this.loading = false),\n complete: () => (this.loading = false),\n error: () => (this.loading = false),\n }),\n );\n this.dataSource = new NaturalDataSource(queryRef);\n }\n\n private getSelectKey(): string | undefined {\n if (!this.hierarchicSelectorConfig) {\n return;\n }\n\n return this.hierarchicSelectorConfig.filter(c => !!c.selectableAtKey)[0].selectableAtKey;\n }\n}\n","<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" class=\"natural-row-click\" mat-table>\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultNameCell\"\n ></ng-template>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n <button\n *ngIf=\"!disabled\"\n (click)=\"removeRelation(element)\"\n [disabled]=\"removing.has(element)\"\n color=\"warn\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n >\n <mat-icon naturalIcon=\"link_off\"></mat-icon>\n </button>\n </td>\n </ng-container>\n </table>\n\n <mat-paginator\n (page)=\"pagination($event)\"\n *ngIf=\"dataSource?.data && (dataSource?.data?.length || 0) > (dataSource?.data?.pageSize || 0)\"\n [length]=\"dataSource?.data?.length || 0\"\n [pageIndex]=\"dataSource?.data?.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource?.data?.pageSize || 0\"\n ></mat-paginator>\n\n <div *ngIf=\"!loading && dataSource?.data?.length === 0\" class=\"margin-v mat-body\">\n <span i18n>Aucun résultat</span>\n </div>\n\n <mat-progress-spinner *ngIf=\"loading\" [diameter]=\"40\" class=\"loading\" mode=\"indeterminate\"></mat-progress-spinner>\n</div>\n\n<natural-select\n (selectionChange)=\"addRelations([$event])\"\n *ngIf=\"!hierarchicSelectorConfig && service && !disabled\"\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter\"\n [placeholder]=\"placeholder\"\n [service]=\"service\"\n [showIcon]=\"false\"\n></natural-select>\n\n<div *ngIf=\"hierarchicSelectorConfig && !disabled\">\n <button (click)=\"openNaturalHierarchicSelector()\" color=\"primary\" mat-flat-button>{{ placeholder }}</button>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './relations.component';\n","import {Component, Input, OnInit, Optional, Self} from '@angular/core';\nimport {ControlValueAccessor, NgControl, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {IEnum, NaturalEnumService} from '../../../services/enum.service';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {NaturalCapitalizePipe} from '../../common/pipes/capitalize.pipe';\nimport {MatOptionModule} from '@angular/material/core';\nimport {NgIf, NgFor, AsyncPipe} from '@angular/common';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\ntype V = IEnum['value'] | IEnum['value'][];\n\n@Component({\n selector: 'natural-select-enum',\n templateUrl: './select-enum.component.html',\n styleUrls: ['./select-enum.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n ReactiveFormsModule,\n NgIf,\n MatOptionModule,\n NgFor,\n AsyncPipe,\n NaturalCapitalizePipe,\n ],\n})\nexport class NaturalSelectEnumComponent extends AbstractSelect<V, V> implements OnInit, ControlValueAccessor {\n /**\n * The name of the enum type, eg: `\"ActionStatus\"`\n */\n @Input({required: true}) public enumName!: string;\n\n /**\n * If given an extra option is added to select `null` with given label\n */\n @Input() public nullLabel?: string;\n\n /**\n * Functions that receives an enum value and returns whether that value is disabled\n */\n @Input() public optionDisabled?: (item: IEnum) => boolean;\n\n /**\n * Whether the user should be allowed to select multiple options\n */\n @Input() public multiple = false;\n\n public items?: Observable<IEnum[]>;\n\n public constructor(\n private readonly enumService: NaturalEnumService,\n @Optional() @Self() ngControl: NgControl | null,\n ) {\n super(ngControl);\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.items = this.enumService.get(this.enumName);\n }\n\n public getDisplayFn(): (item: V | null) => string {\n throw new Error('This should never be called');\n }\n}\n","<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n <mat-select\n (selectionChange)=\"propagateValue($event.value)\"\n [formControl]=\"internalCtrl\"\n (blur)=\"onBlur()\"\n [errorStateMatcher]=\"matcher\"\n [multiple]=\"multiple\"\n >\n <mat-option *ngIf=\"nullLabel\" [value]=\"null\">{{ nullLabel }}</mat-option>\n <mat-option\n *ngFor=\"let item of items | async\"\n [value]=\"item.value\"\n [disabled]=\"optionDisabled ? optionDisabled(item) : false\"\n >\n {{ item.name | capitalize }}\n </mat-option>\n </mat-select>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error></mat-form-field\n>\n","import {Component, Input, OnDestroy, OnInit, Optional, Self} from '@angular/core';\nimport {ControlValueAccessor, NgControl, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatDialogConfig} from '@angular/material/dialog';\nimport {Literal} from '../../../types/types';\nimport {HierarchicFiltersConfiguration} from '../../hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {\n HierarchicDialogConfig,\n NaturalHierarchicConfiguration,\n NaturalHierarchicSelectorDialogService,\n OrganizedModelSelection,\n} from '../../hierarchic-selector/public-api';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {NgIf} from '@angular/common';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\nfunction defaultDisplayFn(item: Literal | null): string {\n if (!item) {\n return '';\n }\n\n return item.fullName || item.name || item.iban || item.id || item;\n}\n\n/**\n * Default usage:\n * <natural-select [config]=\"myConfig\" [(ngModel)]=\"amazingModel\"\n * (ngModelChange)=amazingChangeFn($event)></natural-select>\n *\n * [(ngModel)] and (ngModelChange) are optional\n *\n * Placeholder :\n * <natural-select placeholder=\"amazing placeholder\">\n */\n@Component({\n selector: 'natural-select-hierarchic',\n templateUrl: './select-hierarchic.component.html',\n styleUrls: ['./select-hierarchic.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n ReactiveFormsModule,\n NgIf,\n MatIconModule,\n NaturalIconDirective,\n MatButtonModule,\n MatTooltipModule,\n RouterLink,\n ],\n})\nexport class NaturalSelectHierarchicComponent\n extends AbstractSelect<Literal, string>\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n /**\n * If provided cause a new select button to appear\n */\n @Input() public selectLabel?: string;\n\n /**\n * Configuration for hierarchic relations\n *\n * It should be an array with at least one element with `selectableAtKey` configured, otherwise the selector will never open.\n */\n @Input() public config: NaturalHierarchicConfiguration[] | null = null;\n\n /**\n * Filters formatted for hierarchic selector\n */\n @Input() public filters?: HierarchicFiltersConfiguration;\n\n /**\n * The selected value as an object. The internal value is `internalCtrl.value`, and that is a string.\n */\n private value: Literal | null = null;\n\n /**\n * On Firefox, the combination of <input (focus)> event and dialog opening cause some strange bug where focus event is called multiple\n * times This prevents it.\n */\n private lockOpenDialog = false;\n\n public constructor(\n private readonly hierarchicSelectorDialogService: NaturalHierarchicSelectorDialogService,\n @Optional() @Self() ngControl: NgControl | null,\n ) {\n super(ngControl);\n }\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: Literal | null) => string {\n if (this.displayWith) {\n return this.displayWith;\n }\n\n return defaultDisplayFn;\n }\n\n /**\n * Override parent because our internalCtrl store the textual representation as string instead of raw Literal\n */\n public override writeValue(value: Literal | string | null): void {\n this.value = value as Literal;\n this.internalCtrl.setValue(this.getDisplayFn()(this.value));\n }\n\n public openDialog(): void {\n if (this.internalCtrl.disabled) {\n return;\n }\n\n if (this.lockOpenDialog) {\n return;\n }\n\n const selectAtKey = this.getSelectKey();\n if (!selectAtKey || !this.config) {\n return;\n }\n\n this.lockOpenDialog = true;\n\n if (this.onTouched) {\n this.onTouched();\n }\n\n const selected: OrganizedModelSelection = {};\n\n if (this.internalCtrl.value) {\n selected[selectAtKey] = [this.value];\n }\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: this.config,\n hierarchicSelection: selected,\n hierarchicFilters: this.filters,\n multiple: false,\n };\n\n const dialogFocus: MatDialogConfig = {restoreFocus: false};\n\n this.hierarchicSelectorDialogService\n .open(hierarchicConfig, dialogFocus)\n .afterClosed()\n .subscribe(result => {\n this.lockOpenDialog = false;\n if (result && result.hierarchicSelection) {\n const selection = result.hierarchicSelection;\n // Find the only selection amongst all possible keys\n const keyWithSelection = Object.keys(selection).find(key => selection[key][0]);\n const singleSelection = keyWithSelection ? selection[keyWithSelection][0] : null;\n\n this.writeValue(singleSelection);\n this.propagateValue(singleSelection);\n }\n });\n }\n\n public showSelectButton(): boolean {\n return !!(this.internalCtrl?.enabled && this.selectLabel && this.getSelectKey());\n }\n\n private getSelectKey(): string | undefined {\n return this.config?.filter(c => !!c.selectableAtKey)[0]?.selectableAtKey;\n }\n}\n","<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <!-- Input for hierarchical selector -->\n <input\n (blur)=\"blur.emit()\"\n (focus)=\"openDialog()\"\n [formControl]=\"internalCtrl\"\n [errorStateMatcher]=\"matcher\"\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n />\n\n <!-- Meta data -->\n <mat-icon *ngIf=\"showIcon\" [naturalIcon]=\"icon\" matIconPrefix></mat-icon>\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matIconSuffix>\n <button\n (click)=\"clear(); $event.stopPropagation()\"\n *ngIf=\"internalCtrl.value && internalCtrl.enabled && !clearLabel\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Désélectionner\"\n >\n <mat-icon naturalIcon=\"close\"></mat-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.value && navigateTo\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\"></mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error>\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n<div *ngIf=\"showSelectButton() || showClearButton()\" class=\"external-buttons\">\n <button (click)=\"openDialog()\" *ngIf=\"showSelectButton()\" color=\"primary\" mat-flat-button>{{ selectLabel }}</button>\n <button (click)=\"clear()\" *ngIf=\"showClearButton()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './select-enum/select-enum.component';\nexport * from './select-hierarchic/select-hierarchic.component';\nexport * from './select/select.component';\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavStackService {\n /**\n * The stack of all currently living sidenavs\n */\n private readonly sidenavs: NaturalSidenavContainerComponent[] = [];\n\n /**\n * Emits the most recent living SidenavContainer whenever it changes. So it's\n * either the SidenavContainer that was just added, or the one \"before\" the\n * SidenavContainer that was just removed\n */\n public readonly currentSidenav = new Subject<NaturalSidenavContainerComponent | undefined>();\n\n /**\n * For internal use only\n * @internal\n */\n public register(sidenav: NaturalSidenavContainerComponent): void {\n const exists = this.sidenavs.some(s => s.name === sidenav.name);\n\n // Prevent duplicated name, and so on local storage or further access conflicts\n if (exists) {\n throw new Error('Duplicated side nav name: ' + sidenav.name);\n }\n\n this.sidenavs.push(sidenav);\n this.next();\n }\n\n /**\n * For internal use only\n * @internal\n */\n public unregister(sidenav: NaturalSidenavContainerComponent): void {\n const index = this.sidenavs.indexOf(sidenav);\n if (index === -1) {\n throw Error('Trying to remove a SidenavContainer that was never registered');\n }\n\n this.sidenavs.splice(index, 1);\n this.next();\n }\n\n private next(): void {\n this.currentSidenav.next(this.sidenavs[this.sidenavs.length - 1]);\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {MediaObserver} from '@ngbracket/ngx-layout';\nimport {MatDrawer, MatDrawerContainer, MatDrawerMode} from '@angular/material/sidenav';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {NaturalAbstractController} from '../../classes/abstract-controller';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\nimport {NaturalStorage, SESSION_STORAGE} from '../common/services/memory-storage';\nimport {NaturalSidenavStackService} from './sidenav-stack.service';\n\n/**\n * Assert that given value is not null\n */\nfunction assert<T>(value: T): asserts value {\n if (!value) {\n throw new Error('Must call NaturalSidenavService.init() before using the service');\n }\n}\n\n/**\n * @TODO : Fix nav minimize and maximize resize\n * Since Material 2 beta 10, when nav is resized the body is not resized\n * https://github.com/angular/material2/issues/6743\n * Maybe the better is to wait next release\n */\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavService extends NaturalAbstractController {\n /**\n * Navigation modes\n * First is for desktop view\n * Second is for mobile view\n */\n private modes: MatDrawerMode[] = ['side', 'push'];\n\n /**\n * Activated mode\n * Default to desktop view\n */\n private mode: MatDrawerMode = this.modes[0];\n\n /**\n * Wherever is nav is opened or not\n */\n private opened = true;\n\n /**\n * Stores the opened status during mobile view, to restore if we come back to desktop view\n */\n private tmpOpened: boolean = this.opened;\n\n /**\n * Wherever is nav is minimized or not\n */\n private minimized = false;\n\n /**\n * LocalStorage key that stores the minimized status\n */\n private readonly minimizedStorageKey = 'menu-minimized';\n\n /**\n * LocalStorage key that stores the opened status\n */\n private readonly openedStorageKey = 'menu-opened';\n\n private minimizedStorageKeyWithName: string | null = null;\n private openedStorageKeyWithName: string | null = null;\n\n public constructor(\n public readonly mediaObserver: MediaObserver,\n private readonly router: Router,\n @Inject(SESSION_STORAGE) private readonly sessionStorage: NaturalStorage,\n private readonly naturalSidenavStackService: NaturalSidenavStackService,\n ) {\n super();\n }\n\n public get activeMode(): MatDrawerMode {\n return this.mode;\n }\n\n public get isOpened(): boolean {\n return this.opened;\n }\n\n public get isMinimized(): boolean {\n return this.minimized;\n }\n\n public destroy(component: NaturalSidenavContainerComponent): void {\n this.naturalSidenavStackService.unregister(component);\n }\n\n public init(\n name: string,\n container: MatDrawerContainer,\n drawer: MatDrawer,\n component: NaturalSidenavContainerComponent,\n autoClose = false,\n ): void {\n if (!name || name === '') {\n throw new Error('No sidenav name provided, use <natural-sidenav-container name=\"menu\">');\n }\n\n this.naturalSidenavStackService.register(component);\n\n this.minimizedStorageKeyWithName = name + '-' + this.minimizedStorageKey;\n this.openedStorageKeyWithName = name + '-' + this.openedStorageKey;\n\n // Init from LocalStorage\n this.minimized = this.getMinimizedStatus();\n this.opened = this.getMenuOpenedStatus();\n this.tmpOpened = this.opened;\n\n let oldIsBig: boolean | null = null;\n this.mediaObserver\n .asObservable()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n const isBig = !this.isMobileView();\n this.mode = isBig ? this.modes[0] : this.modes[1];\n\n if (oldIsBig === null || isBig !== oldIsBig) {\n oldIsBig = isBig;\n\n // If decrease window size, save status of menu before closing it\n if (!isBig) {\n this.tmpOpened = this.opened;\n this.opened = false;\n }\n\n // If increase window size, and sidebar was open before, re-open it.\n if (isBig && this.tmpOpened) {\n this.opened = true;\n this.minimized = this.getMinimizedStatus();\n }\n }\n });\n\n if (autoClose) {\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(e => e instanceof NavigationEnd),\n )\n .subscribe(() => {\n this.navItemClicked();\n });\n }\n }\n\n public isMobileView(): boolean {\n return !this.mediaObserver.isActive('gt-sm');\n }\n\n /**\n * Close nav on mobile view after a click\n */\n public navItemClicked(): void {\n if (this.isMobileView()) {\n this.close();\n }\n }\n\n /**\n * Change minimized status and stores the new value\n */\n public setMinimized(value: boolean): void {\n this.minimized = value;\n assert(this.minimizedStorageKeyWithName);\n this.sessionStorage.setItem(this.minimizedStorageKeyWithName, value ? 'true' : 'false');\n }\n\n public minimize(): void {\n this.setMinimized(true);\n }\n\n public expand(): void {\n this.setMinimized(false);\n }\n\n public toggleMinimized(): void {\n this.setMinimized(!this.minimized);\n }\n\n /**\n * Get the stored minimized status\n */\n public getMinimizedStatus(): boolean {\n assert(this.minimizedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.minimizedStorageKeyWithName);\n\n return value === null ? false : value === 'true';\n }\n\n /**\n * Get the stored opened status\n * Default on an opened status if nothing is stored\n */\n public getMenuOpenedStatus(): boolean {\n assert(this.openedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.openedStorageKeyWithName);\n\n return value === null || value === 'true';\n }\n\n /**\n * Toggle menu but expand it if mobile mode is activated\n * Stores the status in local storage\n */\n public toggle(): void {\n this.setOpened(!this.opened);\n }\n\n public close(): void {\n this.setOpened(false);\n }\n\n public open(): void {\n this.setOpened(true);\n }\n\n public setOpened(value: boolean): void {\n this.opened = value;\n\n if (this.opened && this.isMobileView()) {\n this.minimized = false;\n } else if (!this.isMobileView()) {\n assert(this.openedStorageKeyWithName);\n this.sessionStorage.setItem(this.openedStorageKeyWithName, this.opened ? 'true' : 'false');\n }\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav',\n template: '<ng-content></ng-content>',\n standalone: true,\n})\nexport class NaturalSidenavComponent {}\n","import {Component, HostBinding, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {MatDrawer, MatSidenav, MatSidenavContainer, MatSidenavModule} from '@angular/material/sidenav';\nimport {NaturalSidenavService} from '../sidenav.service';\nimport {NgClass} from '@angular/common';\n\n@Component({\n selector: 'natural-sidenav-container',\n templateUrl: './sidenav-container.component.html',\n styleUrls: ['./sidenav-container.component.scss'],\n providers: [NaturalSidenavService],\n standalone: true,\n imports: [MatSidenavModule, NgClass],\n})\nexport class NaturalSidenavContainerComponent implements OnInit, OnDestroy {\n /**\n * Unique identifier used for the local storage\n */\n @Input({required: true}) public name!: string;\n\n /**\n * The side that the drawer is attached to\n */\n @Input() public position: MatDrawer['position'] = 'start';\n\n /**\n * If true listens to route changes to close side nav after a route change if mobile view is active\n * Actually a navigation to current route does not emit a route change, and the sidenav don't close.\n */\n @Input() public mobileAutoClose = true;\n\n /**\n * Width of the minimized menu\n */\n @Input() public minimizedWidth = 150;\n\n /**\n * If true, prevents \"native\" material sidenav to scroll at container level and delegates the scroll responsability to the transcluded\n * content\n */\n @HostBinding('attr.no-scroll') @Input() public noScroll = false;\n\n /**\n * Inner \"native\" material sidenav container\n */\n @ViewChild(MatSidenavContainer, {static: true}) private menuContainer!: MatSidenavContainer;\n\n /**\n * Inner \"native\" material sidenav\n */\n @ViewChild(MatSidenav, {static: true}) private menuSidenav!: MatSidenav;\n\n public constructor(public readonly sidenavService: NaturalSidenavService) {}\n\n public get isMinimized(): boolean {\n return this.sidenavService.isMinimized;\n }\n\n public get isMobileView(): boolean {\n return this.sidenavService.isMobileView();\n }\n\n public ngOnInit(): void {\n this.sidenavService.init(this.name, this.menuContainer, this.menuSidenav, this, this.mobileAutoClose);\n }\n\n public ngOnDestroy(): void {\n this.sidenavService.destroy(this);\n }\n\n public toggle(): void {\n this.sidenavService.toggle();\n }\n\n public close(): void {\n this.sidenavService.close();\n }\n\n public open(): void {\n this.sidenavService.open();\n }\n\n public minimize(): void {\n this.sidenavService.minimize();\n }\n\n public expand(): void {\n this.sidenavService.expand();\n }\n\n public toggleMinimized(): void {\n this.sidenavService.toggleMinimized();\n }\n}\n","<mat-sidenav-container (backdropClick)=\"sidenavService.setOpened(false)\">\n <mat-sidenav\n [mode]=\"sidenavService.activeMode\"\n [ngClass]=\"sidenavService.isMinimized ? 'menuMinimized' : ''\"\n [opened]=\"sidenavService.isOpened\"\n [style.min-width.px]=\"sidenavService.isMinimized && minimizedWidth ? minimizedWidth : null\"\n [style.width.px]=\"sidenavService.isMinimized && minimizedWidth ? minimizedWidth : null\"\n [position]=\"position\"\n >\n <ng-content select=\"natural-sidenav\"></ng-content>\n </mat-sidenav>\n\n <mat-sidenav-content>\n <div>\n <ng-content select=\"natural-sidenav-content\"></ng-content>\n </div>\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav-content',\n template: '<ng-content></ng-content>',\n styleUrls: ['./sidenav-content.component.scss'],\n standalone: true,\n})\nexport class NaturalSidenavContentComponent {}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './sidenav.service';\nexport * from './sidenav-stack.service';\nexport * from './sidenav/sidenav.component';\nexport * from './sidenav-container/sidenav-container.component';\nexport * from './sidenav-content/sidenav-content.component';\n","import {Component, Input} from '@angular/core';\nimport {NameOrFullName} from '../../types/types';\nimport {NaturalTimeAgoPipe} from '../common/pipes/time-ago.pipe';\nimport {NaturalSwissDatePipe} from '../common/pipes/swiss-date.pipe';\nimport {NgIf} from '@angular/common';\n\ntype Stamped = {\n creator: NameOrFullName | null;\n updater: NameOrFullName | null;\n creationDate: string | null;\n updateDate: string | null;\n};\n\n@Component({\n selector: 'natural-stamp',\n templateUrl: './stamp.component.html',\n standalone: true,\n imports: [NgIf, NaturalSwissDatePipe, NaturalTimeAgoPipe],\n})\nexport class NaturalStampComponent {\n @Input({required: true}) public item!: Stamped;\n\n public showUpdate(): boolean {\n const same =\n this.item.updater?.id === this.item.creator?.id &&\n this.item.updateDate &&\n this.item.updateDate === this.item.creationDate;\n\n return !same && (!!this.item.updateDate || !!this.item.updater);\n }\n}\n","<ng-container *ngIf=\"item\">\n <div *ngIf=\"item.creationDate || item.creator\">\n <span class=\"mat-subtitle-2\" i18n>Création</span>\n :\n <span *ngIf=\"item.creator\">{{ item.creator.fullName || item.creator.name }}</span>\n <span *ngIf=\"item.creator && item.creationDate\">,&nbsp;</span>\n <span *ngIf=\"item.creationDate\">{{ item.creationDate | swissDate }} ({{ item.creationDate | timeAgo }})</span>\n </div>\n\n <div *ngIf=\"showUpdate()\">\n <span class=\"mat-subtitle-2\" i18n>Modification</span>\n :\n <span *ngIf=\"item.updater\">{{ item.updater.fullName || item.updater.name }}</span>\n <span *ngIf=\"item.updater && item.updateDate\">,&nbsp;</span>\n <span *ngIf=\"item.updateDate\">{{ item.updateDate | swissDate }} ({{ item.updateDate | timeAgo }})</span>\n </div>\n</ng-container>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './stamp.component';\n","import {Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation} from '@angular/core';\nimport {Params, QueryParamsHandling, RouterLink} from '@angular/router';\nimport {ThemePalette} from '@angular/material/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIconModule} from '@angular/material/icon';\nimport {NgIf} from '@angular/common';\n\n/**\n * Button that fits well in a `<mat-table>` and support either\n * route navigation via `navigate`, or external URL via `href`,\n * or callback via `buttonClick`.\n *\n * If neither `navigate` nor `href` nor `buttonClick` have a meaningful value, then\n * it will show the icon and/or label in a `<span>` instead of a button.\n *\n * External URL will always be opened in new tab.\n */\n@Component({\n selector: 'natural-table-button',\n templateUrl: './table-button.component.html',\n styleUrls: ['./table-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, MatIconModule, NaturalIconDirective, MatButtonModule, RouterLink],\n})\nexport class NaturalTableButtonComponent implements OnChanges {\n @Input() public queryParams: Params = {};\n @Input() public queryParamsHandling: QueryParamsHandling = '';\n @Input() public label?: string | null;\n @Input() public icon?: string | null;\n @Input() public href?: string | null;\n @Input() public navigate: RouterLink['routerLink'] = [];\n @Input() public fragment?: string | undefined;\n @Input() public preserveFragment = false;\n @Input() public disabled = false;\n @Input() public raised = false;\n @Input() public color: ThemePalette;\n @Output() public readonly buttonClick = new EventEmitter<MouseEvent>();\n public type: 'routerLink' | 'href' | 'click' | 'none' = 'none';\n\n public ngOnChanges(): void {\n if (this.navigate?.length || Object.keys(this.queryParams).length) {\n this.type = 'routerLink';\n } else if (this.href) {\n this.type = 'href';\n } else if (this.buttonClick.observed) {\n this.type = 'click';\n } else {\n this.type = 'none';\n }\n }\n}\n","<!-- Because directives can't be applied conditionally (routerLink, mat-button and mat-icon-button), we have to use different elements -->\n\n<!-- Edge case of a button without any kind of link at all -->\n<span *ngIf=\"type === 'none'\">\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span *ngIf=\"label\">{{ label }}</span>\n</span>\n\n<ng-container *ngIf=\"!raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled\"\n mat-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a *ngIf=\"type === 'click' && !label\" (click)=\"buttonClick.emit($event)\" [disabled]=\"disabled\" mat-icon-button>\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n\n<ng-container *ngIf=\"raised\">\n <!-- App routed link with label... -->\n <a\n *ngIf=\"type === 'routerLink' && label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'routerLink' && !label\"\n [color]=\"color\"\n [queryParams]=\"queryParams\"\n [queryParamsHandling]=\"queryParamsHandling\"\n [routerLink]=\"navigate\"\n [fragment]=\"fragment\"\n [preserveFragment]=\"preserveFragment\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n <!-- Click with label... -->\n <a\n *ngIf=\"type === 'click' && label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-raised-button\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'click' && !label\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick.emit($event)\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n\n <!-- External link with label... -->\n <a\n *ngIf=\"type === 'href' && label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n <span>{{ label }}</span>\n </a>\n\n <!-- ... and without label -->\n <a\n *ngIf=\"type === 'href' && !label\"\n [attr.href]=\"href\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-icon-button\n class=\"mat-elevation-z4\"\n target=\"_blank\"\n >\n <mat-icon *ngIf=\"icon\" [naturalIcon]=\"icon\"></mat-icon>\n </a>\n</ng-container>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './table-button.component';\n","/*\n * Public API Surface of natural\n */\n\nexport * from './dialog-trigger.component';\n","/**\n * A creator interface used to instantiate source implementation\n */\nexport type SourceCreator = new (sourceValue: string) => Source;\n\n/**\n * Contract of all Sources.\n * Every source must implements the fetch method\n * in order to provide the avatar source.\n */\nexport abstract class Source {\n public constructor(private readonly value: string) {\n this.value = value;\n }\n\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Gets the avatar that usually is a URL, but,\n * for example it can also be a string of initials from the name.\n */\n public abstract getAvatar(size: number): string;\n\n /**\n * Whether the avatar is purely textual or an URL for an image\n */\n public abstract isTextual(): boolean;\n}\n","export function md5(string: string): string {\n const x = convertToWordArray(utf8Encode(string));\n const S11 = 7;\n const S12 = 12;\n const S13 = 17;\n const S14 = 22;\n const S21 = 5;\n const S22 = 9;\n const S23 = 14;\n const S24 = 20;\n const S31 = 4;\n const S32 = 11;\n const S33 = 16;\n const S34 = 23;\n const S41 = 6;\n const S42 = 10;\n const S43 = 15;\n const S44 = 21;\n\n let a = 0x67452301;\n let b = 0xefcdab89;\n let c = 0x98badcfe;\n let d = 0x10325476;\n\n for (let k = 0; k < x.length; k += 16) {\n const AA = a;\n const BB = b;\n const CC = c;\n const DD = d;\n\n a = FF(a, b, c, d, x[k], S11, 0xd76aa478);\n d = FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756);\n c = FF(c, d, a, b, x[k + 2], S13, 0x242070db);\n b = FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee);\n a = FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf);\n d = FF(d, a, b, c, x[k + 5], S12, 0x4787c62a);\n c = FF(c, d, a, b, x[k + 6], S13, 0xa8304613);\n b = FF(b, c, d, a, x[k + 7], S14, 0xfd469501);\n a = FF(a, b, c, d, x[k + 8], S11, 0x698098d8);\n d = FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af);\n c = FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1);\n b = FF(b, c, d, a, x[k + 11], S14, 0x895cd7be);\n a = FF(a, b, c, d, x[k + 12], S11, 0x6b901122);\n d = FF(d, a, b, c, x[k + 13], S12, 0xfd987193);\n c = FF(c, d, a, b, x[k + 14], S13, 0xa679438e);\n b = FF(b, c, d, a, x[k + 15], S14, 0x49b40821);\n a = GG(a, b, c, d, x[k + 1], S21, 0xf61e2562);\n d = GG(d, a, b, c, x[k + 6], S22, 0xc040b340);\n c = GG(c, d, a, b, x[k + 11], S23, 0x265e5a51);\n b = GG(b, c, d, a, x[k], S24, 0xe9b6c7aa);\n a = GG(a, b, c, d, x[k + 5], S21, 0xd62f105d);\n d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);\n c = GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681);\n b = GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8);\n a = GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6);\n d = GG(d, a, b, c, x[k + 14], S22, 0xc33707d6);\n c = GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87);\n b = GG(b, c, d, a, x[k + 8], S24, 0x455a14ed);\n a = GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905);\n d = GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8);\n c = GG(c, d, a, b, x[k + 7], S23, 0x676f02d9);\n b = GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a);\n a = HH(a, b, c, d, x[k + 5], S31, 0xfffa3942);\n d = HH(d, a, b, c, x[k + 8], S32, 0x8771f681);\n c = HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122);\n b = HH(b, c, d, a, x[k + 14], S34, 0xfde5380c);\n a = HH(a, b, c, d, x[k + 1], S31, 0xa4beea44);\n d = HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9);\n c = HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60);\n b = HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70);\n a = HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6);\n d = HH(d, a, b, c, x[k], S32, 0xeaa127fa);\n c = HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085);\n b = HH(b, c, d, a, x[k + 6], S34, 0x4881d05);\n a = HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039);\n d = HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5);\n c = HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8);\n b = HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665);\n a = II(a, b, c, d, x[k], S41, 0xf4292244);\n d = II(d, a, b, c, x[k + 7], S42, 0x432aff97);\n c = II(c, d, a, b, x[k + 14], S43, 0xab9423a7);\n b = II(b, c, d, a, x[k + 5], S44, 0xfc93a039);\n a = II(a, b, c, d, x[k + 12], S41, 0x655b59c3);\n d = II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92);\n c = II(c, d, a, b, x[k + 10], S43, 0xffeff47d);\n b = II(b, c, d, a, x[k + 1], S44, 0x85845dd1);\n a = II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f);\n d = II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0);\n c = II(c, d, a, b, x[k + 6], S43, 0xa3014314);\n b = II(b, c, d, a, x[k + 13], S44, 0x4e0811a1);\n a = II(a, b, c, d, x[k + 4], S41, 0xf7537e82);\n d = II(d, a, b, c, x[k + 11], S42, 0xbd3af235);\n c = II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb);\n b = II(b, c, d, a, x[k + 9], S44, 0xeb86d391);\n\n a = addUnsigned(a, AA);\n b = addUnsigned(b, BB);\n c = addUnsigned(c, CC);\n d = addUnsigned(d, DD);\n }\n\n const result = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);\n\n return result.toLowerCase();\n}\n\nfunction addUnsigned(lX: number, lY: number): number {\n const lX8 = lX & 0x80000000;\n const lY8 = lY & 0x80000000;\n const lX4 = lX & 0x40000000;\n const lY4 = lY & 0x40000000;\n const lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);\n\n if (lX4 & lY4) {\n return lResult ^ 0x80000000 ^ lX8 ^ lY8;\n }\n\n if (lX4 | lY4) {\n if (lResult & 0x40000000) {\n return lResult ^ 0xc0000000 ^ lX8 ^ lY8;\n } else {\n return lResult ^ 0x40000000 ^ lX8 ^ lY8;\n }\n } else {\n return lResult ^ lX8 ^ lY8;\n }\n}\n\nfunction rotateLeft(lValue: number, iShiftBits: number): number {\n return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\n}\n\nfunction F(x: number, y: number, z: number): number {\n return (x & y) | (~x & z);\n}\n\nfunction G(x: number, y: number, z: number): number {\n return (x & z) | (y & ~z);\n}\n\nfunction H(x: number, y: number, z: number): number {\n return x ^ y ^ z;\n}\n\nfunction I(x: number, y: number, z: number): number {\n return y ^ (x | ~z);\n}\n\nfunction FF(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction GG(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction HH(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction II(a: number, b: number, c: number, d: number, x: number, s: number, ac: number): number {\n a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));\n return addUnsigned(rotateLeft(a, s), b);\n}\n\nfunction convertToWordArray(string: string): number[] {\n let lWordCount: number;\n const lMessageLength: number = string.length;\n const lNumberOfWords_temp1: number = lMessageLength + 8;\n const lNumberOfWords_temp2: number = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;\n const lNumberOfWords: number = (lNumberOfWords_temp2 + 1) * 16;\n const lWordArray: number[] = Array(lNumberOfWords - 1);\n let lBytePosition = 0;\n let lByteCount = 0;\n\n while (lByteCount < lMessageLength) {\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n lBytePosition = (lByteCount % 4) * 8;\n lWordArray[lWordCount] = lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition);\n lByteCount++;\n }\n\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\n lBytePosition = (lByteCount % 4) * 8;\n lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\n lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\n lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\n\n return lWordArray;\n}\n\nfunction wordToHex(lValue: number): string {\n let WordToHexValue = '';\n let WordToHexValue_temp = '';\n let lByte: number;\n let lCount: number;\n\n for (lCount = 0; lCount <= 3; lCount++) {\n lByte = (lValue >>> (lCount * 8)) & 255;\n WordToHexValue_temp = '0' + lByte.toString(16);\n WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);\n }\n\n return WordToHexValue;\n}\n\nfunction utf8Encode(string: string): string {\n let utftext = '';\n let c: number;\n\n string = string.replace(/\\r\\n/g, '\\n');\n\n for (let n = 0; n < string.length; n++) {\n c = string.charCodeAt(n);\n\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n } else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n\n return utftext;\n}\n","import {Source} from './source';\nimport {md5} from '../service/md5';\n\nfunction isRetina(): boolean {\n // We cannot reasonably inject `DOCUMENT` here, but we are extra\n // careful about usage of `window` and its possible non-existence in SSR,\n // so we should be fine.\n // eslint-disable-next-line no-restricted-globals\n const myWindow: Window | undefined = window;\n\n if (myWindow?.devicePixelRatio > 1.25) {\n return true;\n }\n\n const mediaQuery =\n '(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n\n return !!myWindow?.matchMedia(mediaQuery).matches;\n}\n\n/**\n * Return URL to Gravatar image from either an email or a MD5\n */\nexport class Gravatar extends Source {\n public getAvatar(size: number): string {\n const value = this.getValue();\n const hash = value.match('^[a-f0-9]{32}$') ? value : md5(value.trim().toLowerCase()).toString();\n\n const avatarSize = isRetina() ? size * 2 : size;\n return `https://secure.gravatar.com/avatar/${hash}?s=${avatarSize}&d=404`;\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Source} from './source';\n\n/**\n * Iterates a person's name string to get the initials of each word in uppercase.\n */\nfunction getInitials(name: string, size: number): string {\n name = name.trim();\n\n if (!name) {\n return '';\n }\n\n let words: string[] = name.split(' ');\n\n if (size && size < words.length) {\n words = words.slice(0, size);\n }\n\n return words\n .filter(element => element.length > 0)\n .map(element => element[0])\n .join('')\n .toUpperCase();\n}\n\n/**\n * Return the initials of the given value as avatar\n */\nexport class Initials extends Source {\n public getAvatar(size: number): string {\n return getInitials(this.getValue(), size);\n }\n\n public isTextual(): boolean {\n return true;\n }\n}\n","import {Source} from './source';\n\n/**\n * Return custom image URL as avatar\n */\nexport class Image extends Source {\n public getAvatar(): string {\n return this.getValue();\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Source, SourceCreator} from '../sources/source';\nimport {Gravatar} from '../sources/gravatar';\nimport {Initials} from '../sources/initials';\nimport {Image} from '../sources/image';\nimport {NaturalAvatarComponent} from '../component/avatar.component';\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AvatarService {\n /**\n * Ordered pairs of possible sources. First in list is the highest priority.\n * And key must match one the input of AvatarComponent.\n */\n private readonly sourceCreators = new Map<keyof NaturalAvatarComponent, SourceCreator>([\n ['gravatar', Gravatar],\n ['image', Image],\n ['initials', Initials],\n ]);\n\n private readonly avatarColors = [\n '#1abc9c',\n '#3498db',\n '#f1c40f',\n '#8e44ad',\n '#e74c3c',\n '#d35400',\n '#2c3e50',\n '#7f8c8d',\n ];\n\n private readonly failedSources = new Map<string, Source>();\n\n public getRandomColor(avatarText: string): string {\n if (!avatarText) {\n return 'transparent';\n }\n const asciiCodeSum = this.calculateAsciiCode(avatarText);\n\n return this.avatarColors[asciiCodeSum % this.avatarColors.length];\n }\n\n public getCreators(): IterableIterator<[keyof NaturalAvatarComponent, SourceCreator]> {\n return this.sourceCreators.entries();\n }\n\n private getSourceKey(source: Source): string {\n return source.constructor.name + '-' + source.getValue();\n }\n\n public sourceHasFailedBefore(source: Source): boolean {\n return this.failedSources.has(this.getSourceKey(source));\n }\n\n public markSourceAsFailed(source: Source): void {\n this.failedSources.set(this.getSourceKey(source), source);\n }\n\n private calculateAsciiCode(value: string): number {\n return value\n .split('')\n .map(letter => letter.charCodeAt(0))\n .reduce((previous, current) => previous + current);\n }\n}\n","import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';\n\nimport {Source} from '../sources/source';\nimport {AvatarService} from '../service/avatar.service';\nimport {NgStyle, NgIf} from '@angular/common';\n\ntype Style = Partial<CSSStyleDeclaration>;\n\n/**\n * Show an avatar from different sources\n */\n@Component({\n selector: 'natural-avatar',\n styles: [\n `\n :host {\n border-radius: 50%;\n }\n `,\n ],\n template: `\n <div class=\"avatar-container\" [ngStyle]=\"hostStyle\">\n <img\n *ngIf=\"avatarSrc\"\n [src]=\"avatarSrc\"\n [width]=\"size\"\n [height]=\"size\"\n [ngStyle]=\"avatarStyle\"\n (error)=\"tryNextSource()\"\n class=\"avatar-content\"\n loading=\"lazy\"\n />\n <div *ngIf=\"avatarText\" class=\"avatar-content\" [ngStyle]=\"avatarStyle\">\n {{ avatarText }}\n </div>\n </div>\n `,\n standalone: true,\n imports: [NgStyle, NgIf],\n})\nexport class NaturalAvatarComponent implements OnChanges {\n @Input() public image?: string | null;\n @Input() public initials?: string | null;\n @Input() public gravatar?: string | null;\n\n @Input() public size = 50;\n @Input() public textSizeRatio = 3;\n @Input() public bgColor: string | undefined;\n @Input() public fgColor = '#FFF';\n @Input() public borderRadius = '';\n @Input() public textMaximumLength = 0;\n\n public avatarSrc: string | null = null;\n public avatarText: string | null = null;\n public avatarStyle: Style = {};\n public hostStyle: Style = {};\n\n private currentIndex = -1;\n private sources: Source[] = [];\n\n public constructor(private readonly avatarService: AvatarService) {}\n\n /**\n * Detect inputs change\n */\n public ngOnChanges(changes: SimpleChanges): void {\n this.sources.length = 0;\n for (const [propName, creator] of this.avatarService.getCreators()) {\n if (!changes[propName]) {\n continue;\n }\n\n const currentValue = changes[propName].currentValue;\n if (currentValue && typeof currentValue === 'string') {\n this.sources.push(new creator(currentValue));\n }\n }\n\n // reinitialize the avatar component when a source property value has changed\n // the fallback system must be re-invoked with the new values.\n this.initializeAvatar();\n }\n\n /**\n * Fetch avatar source\n */\n public tryNextSource(): void {\n const previousSource = this.sources[this.currentIndex];\n if (previousSource) {\n this.avatarService.markSourceAsFailed(previousSource);\n }\n\n const source = this.findNextSource();\n if (!source) {\n this.clearAvatar();\n return;\n }\n\n if (source.isTextual()) {\n this.buildTextAvatar(source);\n } else {\n this.buildImageAvatar(source);\n }\n }\n\n private findNextSource(): Source | null {\n while (++this.currentIndex < this.sources.length) {\n const source = this.sources[this.currentIndex];\n if (source && !this.avatarService.sourceHasFailedBefore(source)) {\n return source;\n }\n }\n\n return null;\n }\n\n /**\n * Initialize the avatar component and its fallback system\n */\n private initializeAvatar(): void {\n this.currentIndex = -1;\n if (this.sources.length > 0) {\n this.tryNextSource();\n this.hostStyle = {\n width: this.size + 'px',\n height: this.size + 'px',\n };\n }\n }\n\n private clearAvatar(): void {\n this.avatarSrc = null;\n this.avatarText = null;\n this.avatarStyle = {};\n }\n\n private buildTextAvatar(avatarSource: Source): void {\n this.clearAvatar();\n this.avatarText = avatarSource.getAvatar(+this.textMaximumLength);\n this.avatarStyle = this.getTextualStyle(avatarSource.getValue());\n }\n\n private buildImageAvatar(avatarSource: Source): void {\n this.clearAvatar();\n this.avatarSrc = avatarSource.getAvatar(+this.size);\n this.avatarStyle = this.getImageStyle();\n }\n\n /**\n * Returns initials style\n */\n private getTextualStyle(avatarValue: string): Style {\n return {\n textAlign: 'center',\n borderRadius: this.borderRadius || '100%',\n textTransform: 'uppercase',\n color: this.fgColor,\n backgroundColor: this.bgColor ? this.bgColor : this.avatarService.getRandomColor(avatarValue),\n font: Math.floor(+this.size / this.textSizeRatio) + 'px Helvetica, Arial, sans-serif',\n lineHeight: this.size + 'px',\n };\n }\n\n /**\n * Returns image style\n */\n private getImageStyle(): Style {\n return {\n maxWidth: '100%',\n borderRadius: this.borderRadius || '100%',\n width: this.size + 'px',\n height: this.size + 'px',\n };\n }\n}\n","/*\n * Public API Surface of ngx-avatar\n */\nexport * from './component/avatar.component';\nexport * from './service/avatar.service';\n","import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\nimport {Subscription} from 'rxjs';\nimport {Title} from '@angular/platform-browser';\n\n/**\n * Incomplete list of Matomo functions. But it should be enough\n * for our basic needs.\n *\n * To complete this list, maybe see https://developer.matomo.org/guides/tracking-javascript-guide\n */\ntype MatomoFunction =\n | 'setCustomUrl'\n | 'setCustomDimension'\n | 'setDocumentTitle'\n | 'setReferrerUrl'\n | 'setSiteId'\n | 'setTrackerUrl'\n | 'trackPageView';\n\nexport type PaqItem = [MatomoFunction, ...(number | string | null)[]];\n\ninterface Paq {\n push: (item: PaqItem) => void;\n}\n\n/**\n * Service to track visitors via Matomo.\n *\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMatomoService {\n private subscription: Subscription | null = null;\n private readonly isBrowser: boolean;\n private readonly window: WindowProxy & typeof globalThis & {_paq?: Paq};\n private referrerUrl = '';\n\n public constructor(\n private readonly router: Router,\n @Inject(DOCUMENT) private readonly document: Document,\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) public readonly platformId: Object,\n private readonly titleService: Title,\n ) {\n this.isBrowser = isPlatformBrowser(platformId);\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not init MatomoService `window` is undefined');\n }\n\n this.window = window;\n }\n\n /**\n * Inject Matomo script and start tracking all page navigation\n */\n public startTracking(url: string | null, site: number | null): void {\n // Abort because no tracking info or doing SSR\n if (!url || !site || !this.isBrowser) {\n return;\n }\n\n this.push('setTrackerUrl', url + '/matomo.php');\n this.push('setSiteId', site);\n\n this.injectTrackingCode(url);\n this.listenForRouteChanges();\n }\n\n public stopTracking(): void {\n this.subscription?.unsubscribe();\n this.subscription = null;\n delete this.window._paq;\n }\n\n /**\n * Push a Matomo command on the stack\n *\n * It can be called at any time, including before Matomo is even loaded.\n *\n * Also see https://developer.matomo.org/guides/tracking-javascript-guide\n */\n public push(functionName: PaqItem[0], ...args: PaqItem[1][]): void {\n if (!this.window._paq) {\n this.window._paq = [] as any[];\n }\n\n // Here we must always get `_paq` freshly from window, because Matomo\n // might have changed the object after we created it\n this.window._paq.push([functionName, ...args]);\n }\n\n private injectTrackingCode(url: string): void {\n try {\n const script = this.document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = url + '/matomo.js';\n this.document.head.appendChild(script);\n } catch (ex) {\n console.error('Error appending Matomo analytics');\n console.error(ex);\n }\n }\n\n private listenForRouteChanges(): void {\n this.subscription = this.router.events.subscribe(event => {\n if (!(event instanceof NavigationEnd)) {\n return;\n }\n\n const currentUrl = this.window.location.href;\n\n this.push('setCustomUrl', currentUrl);\n this.push('setDocumentTitle', this.titleService.getTitle());\n if (this.referrerUrl) {\n this.push('setReferrerUrl', this.referrerUrl);\n }\n\n this.push('trackPageView');\n\n this.referrerUrl = currentUrl;\n });\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalMatomoService} from './matomo.service';\n","import {DOCUMENT} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {ErrorHandler, Inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {catchError, EMPTY, first, Observable, of} from 'rxjs';\n\nexport interface NaturalLoggerType {\n message: string;\n stacktrace?: string;\n href?: string;\n host?: string;\n path?: string;\n agent?: string;\n status?: number;\n referrer?: string;\n url?: string;\n userId?: string;\n user?: string;\n\n [key: string]: any;\n}\n\nexport interface NaturalLoggerExtra {\n /**\n * Return an observable of extra data that will be logged. Those data will be merged into\n * the original data, and so it can override things.\n *\n * Only the first emitted value will be used.\n */\n getExtras(error: unknown): Observable<Partial<NaturalLoggerType>>;\n}\n\nexport const NaturalLoggerConfigUrl = new InjectionToken<string>('Absolute URL of the log server');\nexport const NaturalLoggerConfigExtra = new InjectionToken<NaturalLoggerExtra>(\n 'Class that may provide extra data to log',\n);\n\n/**\n * Replace Angular's error handler to also send the log to a remote server via HTTP POST.\n *\n * Usage is automatic as soon as we provide it via:\n *\n * ```ts\n * provideErrorHandler('http://example.com', ExtraService),\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalErrorHandler extends ErrorHandler {\n public constructor(\n private readonly http: HttpClient,\n @Inject(DOCUMENT) private readonly document: Document,\n @Optional() @Inject(NaturalLoggerConfigUrl) private readonly url: string,\n @Optional() @Inject(NaturalLoggerConfigExtra) private readonly loggerExtra?: NaturalLoggerExtra,\n ) {\n super();\n }\n\n public override handleError(error: any): void {\n console.error(error);\n\n const params: NaturalLoggerType = {\n message: this.toMessage(error),\n href: this.document.defaultView?.window.location.href,\n host: this.document.defaultView?.window.location.hostname,\n path: this.document.defaultView?.window.location.pathname,\n agent: this.document.defaultView?.window.navigator.userAgent,\n level: 'error',\n };\n\n if (error?.stack) {\n params.stacktrace = error.stack;\n }\n\n if (typeof error?.status !== 'undefined') {\n params.status = error.status;\n }\n\n if (error?.referrer) {\n params.referrer = error.referrer;\n }\n\n if (error?.url) {\n params.url = error.url;\n }\n\n if (this.loggerExtra) {\n this.loggerExtra\n .getExtras(error)\n .pipe(\n catchError(e => of({getExtrasErrorMessage: this.toMessage(e)})),\n first(),\n )\n .subscribe(result => {\n this.postLog(Object.assign(params, result));\n });\n } else {\n this.postLog(params);\n }\n }\n\n private toMessage(error: any): string {\n if (error && typeof error === 'object' && 'message' in error) {\n return '' + error.message;\n } else {\n return '' + error;\n }\n }\n\n /**\n * Send parameters to remote log\n */\n private postLog(params: NaturalLoggerType): void {\n if (this.url) {\n this.http\n .post(this.url, params, {headers: new HttpHeaders().set('content-type', 'application/json')})\n .pipe(catchError(() => EMPTY))\n .subscribe();\n }\n }\n}\n","import {ErrorHandler, Provider, Type} from '@angular/core';\nimport {\n NaturalErrorHandler,\n NaturalLoggerConfigExtra,\n NaturalLoggerConfigUrl,\n NaturalLoggerExtra,\n} from './error-handler';\n\nexport function provideErrorHandler(url: string | null, extraService?: Type<NaturalLoggerExtra>): Provider[] {\n const providers: Provider[] = [\n {\n provide: ErrorHandler,\n useClass: NaturalErrorHandler,\n },\n {\n provide: NaturalLoggerConfigUrl,\n useValue: url,\n },\n ];\n\n if (extraService) {\n providers.push({\n provide: NaturalLoggerConfigExtra,\n useClass: extraService,\n });\n }\n\n return providers;\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {provideErrorHandler} from './error.module';\n\nexport {\n NaturalErrorHandler,\n NaturalLoggerConfigExtra,\n NaturalLoggerConfigUrl,\n NaturalLoggerExtra,\n NaturalLoggerType,\n} from './error-handler';\n","import {Directive, HostListener, Input} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\n\n/**\n * Need to add http:// prefix if we don't have prefix already AND we don't have part of it\n */\nexport function ensureHttpPrefix(value: string | null): string | null {\n if (!value) {\n return value;\n }\n\n const completePrefix = /^(https?):\\/\\//i.test(value);\n const startingPrefix = 'https://'.indexOf(value) === 0 || 'http://'.indexOf(value) === 0;\n\n if (!completePrefix && !startingPrefix) {\n return 'http://' + value;\n } else {\n return value;\n }\n}\n\n/**\n * This directive only supports ReactiveForms due to ngModel/ngControl encapsulation and changes emissions.\n */\n@Directive({\n selector: '[naturalHttpPrefix]',\n standalone: true,\n})\nexport class NaturalHttpPrefixDirective {\n @Input() public naturalHttpPrefix: AbstractControl | null = null;\n\n @HostListener('ngModelChange', ['$event'])\n public httpize($event: string): void {\n if (this.naturalHttpPrefix) {\n const newValue = ensureHttpPrefix($event) || $event;\n if ($event !== newValue) {\n this.naturalHttpPrefix.setValue(newValue);\n }\n }\n }\n}\n","import {ApplicationConfig, importProvidersFrom} from '@angular/core';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {localStorageProvider, sessionStorageProvider} from '../modules/common/services/memory-storage';\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\n\n/**\n * Minimal, global providers for Natural to work\n */\nexport const naturalProviders: ApplicationConfig['providers'] = [\n importProvidersFrom([MatDialogModule, MatSnackBarModule]),\n sessionStorageProvider,\n localStorageProvider,\n];\n","// Load `$localize` onto the global scope - to be able to use that function to translate strings in components/services.\nimport '@angular/localize/init';\n\n/*\n * Public API Surface of natural\n */\n\nexport * from './lib/classes/abstract-controller';\nexport * from './lib/classes/abstract-detail';\nexport * from './lib/classes/abstract-editable-list';\nexport * from './lib/classes/abstract-list';\nexport * from './lib/classes/abstract-navigable-list';\nexport {hasFilesAndProcessDate, isMutation} from './lib/classes/apollo-utils';\nexport * from './lib/classes/data-source';\nexport * from './lib/classes/query-variable-manager';\nexport * from './lib/classes/rxjs';\nexport * from './lib/classes/utility';\nexport * from './lib/classes/validators';\nexport {validTlds} from './lib/classes/tld';\n\nexport * from './lib/services/abstract-model.service';\nexport {NaturalDebounceService} from './lib/services/debounce.service';\nexport * from './lib/services/enum.service';\nexport * from './lib/services/link-mutation.service';\nexport {NaturalPersistenceService, NATURAL_PERSISTENCE_VALIDATOR} from './lib/services/persistence.service';\nexport * from './lib/services/swiss-parsing-date-adapter.service';\n\nexport * from './lib/types/types';\n\nexport * from './lib/modules/alert/public-api';\nexport * from './lib/modules/columns-picker/public-api';\nexport * from './lib/modules/common/public-api';\nexport * from './lib/modules/detail-header/public-api';\nexport * from './lib/modules/dropdown-components/public-api';\nexport * from './lib/modules/file/public-api';\nexport * from './lib/modules/fixed-button/public-api';\nexport * from './lib/modules/fixed-button-detail/public-api';\nexport * from './lib/modules/hierarchic-selector/public-api';\nexport * from './lib/modules/icon/public-api';\nexport * from './lib/modules/panels/public-api';\nexport * from './lib/modules/relations/public-api';\nexport * from './lib/modules/search/public-api';\nexport * from './lib/modules/select/public-api';\nexport * from './lib/modules/sidenav/public-api';\nexport * from './lib/modules/stamp/public-api';\nexport * from './lib/modules/table-button/public-api';\nexport * from './lib/modules/dialog-trigger/public-api';\nexport * from './lib/modules/avatar/public-api';\nexport * from './lib/modules/matomo/public-api';\nexport * from './lib/modules/logger/public-api';\n\nexport * from './lib/directives/http-prefix.directive';\nexport {naturalProviders} from './lib/classes/providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","switchMap","i3","i1","merge","first","debounceTime","take","shareReplay","map","i4","i6","i7","i1.NaturalEnumService","i5","i8","i9","InvalidWithValueStateMatcher","i1.NaturalDropdownRef","i1.NaturalDropdownService","i1.NaturalHierarchicSelectorService","tap","i1.NaturalPanelsService","i1.NaturalLinkMutationService","i2.NaturalHierarchicSelectorDialogService","i1.NaturalHierarchicSelectorDialogService","i3.NaturalSidenavStackService","i1.NaturalSidenavService","i1.AvatarService"],"mappings":"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AAC;QACb,MAAM,EAAE,GAAG,CAAC,CAAC;QAEb,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,EAAE,CAAC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"}