{"version":3,"file":"deja-js-component-v2-item-list.mjs","sources":["../../../../projects/deja-js/component/v2/item-list/item.component.ts","../../../../projects/deja-js/component/v2/item-list/item.ts","../../../../projects/deja-js/component/v2/item-list/item.service.ts","../../../../projects/deja-js/component/v2/item-list/item-event.ts","../../../../projects/deja-js/component/v2/item-list/sorting.service.ts","../../../../projects/deja-js/component/v2/item-list/index.ts","../../../../projects/deja-js/component/v2/item-list/deja-js-component-v2-item-list.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'item',\n    template: ''\n})\nexport class ItemComponent {\n    @Input() public value: string;\n    @Input() public text: string;\n\n    @Input()\n    public set selected(value: BooleanInput) {\n        this._selected = coerceBooleanProperty(value);\n    }\n\n    public get selected(): BooleanInput {\n        return this._selected;\n    }\n\n    private _selected: boolean;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { ViewPortItem } from '@deja-js/component/v2/viewport';\n\nexport class Item<T> implements ViewPortItem<T> {\n    public size?: number;\n    public model?: T;\n    public id?: string;\n    public label?: string;\n    public selectable?: boolean;\n    public selected?: boolean;\n    public visible?: boolean;\n    public odd?: boolean;\n    public searchText?: string;\n    public className?: string;\n    public trackBy?: unknown;\n    /** Indique si l'élément peut être réduit. */\n    public collapsible?: boolean;\n    /** Indique si l'élément est réduit. */\n    public collapsed?: boolean;\n    /** Retourne la profondeur de l'élément dans la hierarchie. */\n    public depth?: number;\n    /** Enfants */\n    public items?: ReadonlyArray<Item<T>>;\n\n    public dragged?: boolean;\n    /** Usage interne. */\n    public selecting?: boolean | undefined;\n    /** Usage interne. */\n    public expanding?: boolean;\n    /** Usage interne. */\n    public collapsing?: boolean;\n\n    /** Définit si l'élément peut être réduit.\n     * @return True si l'élément peut être réduit.\n     */\n    public get isCollapsible(): boolean {\n        return this.items && (this.collapsible ?? true);\n    }\n\n    /** Définit si l'élément est visible.\n     * @return True si l'élément est visible.\n     */\n    public get isVisible(): boolean {\n        return this.visible ?? true;\n    }\n\n    /** Définit si l'élément peut-être sélectionné.\n     * @return True si l'élément peut-être sélectionné.\n     */\n    public get isSelectable(): boolean {\n        return this.selectable ?? true;\n    }\n\n    public constructor(id?: string, label?: string, model?: T) {\n        this.model = model;\n        this.id = id;\n        this.label = label;\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport { DiacriticService } from '@deja-js/component/core';\nimport { BehaviorSubject, combineLatestWith, filter, map, mergeWith, Observable, of, ReplaySubject, shareReplay, startWith, switchMap, take, tap, withLatestFrom } from 'rxjs';\n\nimport { Item } from './item';\nimport { ItemComponent } from './item.component';\n\n\n/** Service de gestion des listes (treelist et select).\n * Ce service permet la gestion du viewport et la gestion des caches des listes.\n * Il peut-être surchargé pour faire du lazy loading ou du paging.\n */\n@Injectable()\nexport class ItemService<T> {\n    public items$ = new ReplaySubject<ReadonlyArray<Item<T>>>(1);\n    public models$ = new ReplaySubject<ReadonlyArray<T>>(1);\n    public options$ = new ReplaySubject<ReadonlyArray<ItemComponent>>(1);\n\n    public childrenField$ = new BehaviorSubject<string>('items');\n    public textField$ = new BehaviorSubject<string>('label');\n    public valueField$ = new BehaviorSubject<string>('value');\n    public searchField$ = new BehaviorSubject<string>('searchText');\n    public query$ = new BehaviorSubject<RegExp | string>('');\n    public minSearchLength$ = new BehaviorSubject<number>(0);\n\n    public itemList$: Observable<ReadonlyArray<Item<T>>>;\n    public flatItemList$: Observable<ReadonlyArray<Item<T>>>;\n    public refreshFlatItemList$ = new BehaviorSubject<void>(undefined);\n    public filteredItemList$: Observable<ReadonlyArray<Item<T>>>;\n    public refreshFilterItemList$ = new BehaviorSubject<void>(undefined);\n    public visibleItemList$: Observable<ReadonlyArray<Item<T>>>;\n    public refreshVisibleItemList$ = new BehaviorSubject<void>(undefined);\n    public selectedItems$: Observable<ReadonlyArray<Item<T>>>;\n\n    public selectingItems: (items: ReadonlyArray<Item<T>>) => Observable<ReadonlyArray<Item<T>>>;\n    public unSelectingItems: (items: ReadonlyArray<Item<T>>) => Observable<ReadonlyArray<Item<T>>>;\n\n    private refreshSelection$ = new BehaviorSubject<RefreshSelectionParams<T>>({});\n\n    private previousQuery: string;\n\n    public constructor(private diacriticService: DiacriticService) {\n\n        const itemsFromOptions$ = this.options$.pipe(\n            map(options => {\n                const items = options.map(option => {\n                    const item = new Item<T>(option.value, option.text);\n                    item.selected = option.selected === true || option.selected === '';\n                    return item;\n                });\n                if (items.length > 100) {\n                    // eslint-disable-next-line no-debugger\n                    debugger;\n                    console.error('Select options with more than 100 items can have performance options. Please bind directly the items in code behind with items or models input.');\n                }\n                return items;\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        const itemsFromModels$ = this.models$.pipe(\n            combineLatestWith(this.valueField$, this.textField$, this.childrenField$),\n            map(([models, valueField, textField, childrenField]) => (models && models instanceof Array && this.mapToItem(models, valueField, textField, childrenField)) || new Array<Item<T>>()),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        this.itemList$ = this.items$.pipe(\n            mergeWith(itemsFromModels$, itemsFromOptions$),\n            switchMap(items => {\n                if (this.selectedItems$ && items?.length > 0) {\n                    return this.selectedItems$.pipe(\n                        take(1),\n                        map(selectedItems => {\n                            if (selectedItems?.length) {\n                                const selectedIdSet = selectedItems.reduce((set, item) => {\n                                    if (item.id) {\n                                        set.add(item.id);\n                                    }\n                                    return set;\n                                }, new Set<string>());\n                                items.forEach(item => {\n                                    if (item.id) {\n                                        item.selected = selectedIdSet.has(item.id);\n                                    }\n                                });\n                            }\n                            return items;\n                        })\n                    );\n                }\n                return of(items);\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        this.flatItemList$ = this.itemList$.pipe(\n            combineLatestWith(this.refreshFlatItemList$),\n            map(([items]) => {\n                const addItems = (itms: ReadonlyArray<Item<T>>, depth: number): Array<Item<T>> => itms.reduce((a, item) => {\n                    item.depth = depth;\n                    a.push(item);\n                    if (item.items?.length) {\n                        return [...a, ...addItems(item.items, depth + 1)];\n                    }\n                    return a;\n                }, new Array<Item<T>>());\n                return (items && addItems(items, 0)) || new Array<Item<T>>();\n            }),\n            tap(() => {\n                this.previousQuery = undefined;\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        const refreshFilterItemList$ = this.refreshFilterItemList$.pipe(\n            tap(() => {\n                this.previousQuery = undefined;\n            })\n        );\n\n        this.filteredItemList$ = this.flatItemList$.pipe(\n            combineLatestWith(this.query$, this.minSearchLength$, this.searchField$, refreshFilterItemList$),\n            switchMap(([flatItemList, query, minSearchLength, searchField]) => {\n                if (minSearchLength > 0 && (!query || typeof query === 'string' && query.length < minSearchLength)) {\n                    this.previousQuery = null;\n                    return of(new Array<Item<T>>());\n                }\n\n                if (!query) {\n                    return of(flatItemList);\n                }\n\n                const listToFilter$ = typeof query === 'string' && this.previousQuery && query.includes(this.previousQuery) && this.filteredItemList$ ? this.filteredItemList$ : of(flatItemList);\n\n                this.previousQuery = typeof query === 'string' ? query : null;\n\n                const escapeChars = (text: string): string => {\n                    const specialChars = ['\\\\', '/', '|', '&', ';', '$', '%', '@', '\"', '<', '>', '(', ')', '+'];\n                    specialChars.forEach(c => text = text.replace(c, `\\\\${c}`));\n                    return text;\n                };\n\n                // Check regexp validity\n                // regExp.test(this.getTextValue(item));\n                let regExp: RegExp;\n                if (query) {\n                    if (typeof query === 'string') {\n                        try {\n                            query = this.diacriticService.remove(query);\n                            const escapedQuery = escapeChars(query);\n                            regExp = new RegExp(escapedQuery, 'i');\n                        } catch (exc) {\n                            console.log('Invalid search parameters');\n                        }\n                    } else {\n                        regExp = query;\n                        if (regExp.test === undefined) {\n                            regExp = undefined;\n                        }\n                    }\n                }\n\n                return listToFilter$.pipe(\n                    take(1),\n                    map(itemList => {\n                        // Filter the list\n                        let previousItem: Item<T>;\n                        return [...itemList].reverse().filter(item => {\n                            let isVisible: boolean;\n                            if (item.items === undefined) {\n                                // child\n                                isVisible = this.itemMatch(item, searchField, regExp);\n                            } else {\n                                // parent\n                                isVisible = this.parentItemMatch(item, previousItem, searchField, regExp);\n                            }\n                            if (isVisible) {\n                                previousItem = item;\n                            }\n                            return isVisible;\n                        }).reverse();\n                    })\n                );\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        this.visibleItemList$ = this.filteredItemList$.pipe(\n            combineLatestWith(this.refreshVisibleItemList$),\n            map(([items]) => {\n                let isOdd = false;\n                let hideDepth = undefined as number;\n                return items.filter(item => {\n                    if (hideDepth !== undefined && hideDepth <= item.depth) {\n                        // hidden by parent\n                        return false;\n                    }\n                    if (item.isVisible ?? true) {\n                        if (item.collapsed) {\n                            // hide all children\n                            hideDepth = item.depth + 1;\n                        } else {\n                            // Clear children invisibility\n                            hideDepth = undefined;\n                        }\n\n                        if (item.items === undefined) {\n                            // child\n                            isOdd = !isOdd;\n                        } else {\n                            // parent\n                            isOdd = false;\n                        }\n                        item.odd = isOdd;\n\n                        return true;\n                    } else {\n                        // hide all children\n                        hideDepth = item.depth + 1;\n                        return false;\n                    }\n                });\n            }),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n\n        this.selectedItems$ = this.visibleItemList$.pipe(\n            combineLatestWith(this.valueField$, this.refreshSelection$),\n            withLatestFrom(this.flatItemList$),\n            filter(([_, flatItemList]) => flatItemList?.length > 0),\n            switchMap(([[visibleItemList, valueField, refreshSelection], flatItemList]) => {\n                const select = refreshSelection.selectItems;\n                const unselect = refreshSelection.unselectItems;\n                const toggle = refreshSelection.toggle;\n                const checkSelectable = refreshSelection.checkSelectable;\n                const selectParents = refreshSelection.selectParents;\n                const selectModels = refreshSelection.selectModels;\n                const selectValues = refreshSelection.selectValues;\n                delete refreshSelection.selectItems;\n                delete refreshSelection.unselectItems;\n                delete refreshSelection.toggle;\n                delete refreshSelection.checkSelectable;\n                delete refreshSelection.selectParents;\n                delete refreshSelection.selectModels;\n                delete refreshSelection.selectValues;\n\n                let itemsToChange: Array<Item<T>>;\n\n                if (unselect) {\n                    const list = unselect === 'all' ? flatItemList : unselect;\n                    itemsToChange = list.filter(item => {\n                        item.selecting = item.selected ? false : undefined;\n                        return !(item.selecting ?? true);\n                    });\n                } else {\n                    itemsToChange = new Array<Item<T>>();\n                }\n\n                if (select && visibleItemList?.length > 0) {\n                    if (select === 'all') {\n                        itemsToChange = visibleItemList.filter(item => {\n                            item.selecting = ((selectParents || !item.items) && (!checkSelectable || item.isSelectable)) || item.selecting;\n                            return item.selecting !== undefined;\n                        });\n                    } else if (select?.length) {\n                        itemsToChange = [...itemsToChange, ...select.filter(item => {\n                            item.selecting = (!checkSelectable || item.isSelectable) || item.selecting;\n                            return item.selecting !== undefined;\n                        })];\n                    }\n                }\n\n                if (selectModels && visibleItemList?.length > 0) {\n                    itemsToChange = [...itemsToChange, ...visibleItemList.filter(item => {\n                        item.selecting = ((!checkSelectable || item.isSelectable) && selectModels.some(model => this.compareModels(model, item.model, valueField))) || item.selecting;\n                        return item.selecting !== undefined;\n                    })];\n                }\n\n                if (selectValues && visibleItemList?.length > 0) {\n                    itemsToChange = [...itemsToChange, ...visibleItemList.filter(item => {\n                        item.selecting = ((!checkSelectable || item.isSelectable) && selectValues.some(value => value === item.id)) || item.selecting;\n                        return item.selecting !== undefined;\n                    })];\n                }\n\n                if (toggle) {\n                    toggle.forEach(item => {\n                        item.selecting = !item.selected;\n                        itemsToChange.push(item);\n                    });\n                }\n\n                const itemsToSelect = itemsToChange.filter(item => item.selecting);\n                const itemsToUnselect = itemsToChange.filter(item => !item.selecting);\n\n                const selecting$ = itemsToSelect.length && this.selectingItems ? this.selectingItems(itemsToSelect) : of(itemsToSelect);\n                return selecting$.pipe(\n                    map(selectable => selectable?.forEach(item => item.selected = true)),\n                    switchMap(() => itemsToUnselect.length && this.unSelectingItems ? this.unSelectingItems(itemsToUnselect) : of(itemsToUnselect)),\n                    map(unselectable => {\n                        unselectable?.forEach(item => item.selected = false);\n                        itemsToChange.forEach(item => delete item.selecting);\n                        return visibleItemList.filter(item => item.selected);\n                    })\n                );\n            }),\n            startWith(new Array<Item<T>>()),\n            shareReplay({ bufferSize: 1, refCount: false })\n        );\n    }\n\n    /** Map une structure de modèles en items\n     * @param mods  Modèles à évaluer.\n     * @param valueField (optional) Champs à traiter comme valeur.\n     * @param textField (optional) Champs à traiter comme text.\n     * @param childrenField (optional) Champs à traiter comme enfants.\n     * @return Structure mapée\n     */\n    public mapToItem(mods: ReadonlyArray<T>, valueField: string, textField: string, childrenField?: string): ReadonlyArray<Item<T>> {\n        return mods.map(model => {\n            const item = new Item<T>();\n            item.model = model;\n\n            if (typeof model === 'string') {\n                item.id = model;\n                item.label = model;\n            } else {\n                const label = this.extractValueField(model, textField) as string;\n                if (label !== undefined) {\n                    item.label = label;\n                }\n\n                const id = this.extractValueField(model, valueField) as string;\n                if (id !== undefined) {\n                    item.id = id;\n                }\n\n                if (childrenField) {\n                    const children = this.extractValueField(model, childrenField) as ReadonlyArray<T>;\n                    if (children && children instanceof Array) {\n                        item.items = this.mapToItem(children, valueField, textField, childrenField);\n                    }\n                }\n            }\n\n            return item;\n        });\n    }\n\n    /** Désélectionne tous les éléments sélectionnés */\n    public unselectAll(): void {\n        this.refreshSelection$.next({ unselectItems: 'all' });\n    }\n\n    /** Sélectionne tous les éléments */\n    public selectAll(checkSelectable?: boolean): void {\n        this.refreshSelection$.next({ selectItems: 'all', checkSelectable });\n    }\n\n    /** Déselectionne l'élément spécifié\n     * @param item Elément à déselectionner.\n     */\n    public unSelectItem(item: Item<T>): void {\n        this.refreshSelection$.next({ unselectItems: [item] });\n    }\n\n    /** Sélectionne l'élément spécifié\n     * @param item Elément à sélectionner.\n     */\n    public selectItem(item: Item<T>): void {\n        this.refreshSelection$.next({ selectItems: [item] });\n    }\n\n    /** Déselectionne les éléments spécifiés\n     * @param items Liste des éléments à désélectionner.\n     */\n    public unSelectItems(items: ReadonlyArray<Item<T>>): void {\n        this.refreshSelection$.next({ unselectItems: items });\n    }\n\n    /** Sélectionne les éléments spécifiés\n     * @param items Liste des éléments à sélectionner.\n     */\n    public selectItems(items: ReadonlyArray<Item<T>>): void {\n        this.refreshSelection$.next({ selectItems: items });\n    }\n\n    /** Set la selection sur les éléments spécifiés\n     * @param items Liste des éléments à sélectionner.\n     */\n    public setSelectedItems(items: ReadonlyArray<Item<T>>): void {\n        this.refreshSelection$.next({ unselectItems: 'all', selectItems: items });\n    }\n\n    /** Set la selection sur les éléments spécifiés\n     * @param items Liste des modèles des éléments à sélectionner.\n     */\n    public setSelectedModels(models: ReadonlyArray<T>): void {\n        this.refreshSelection$.next({ unselectItems: 'all', selectModels: models });\n    }\n\n    /** Set la selection sur les ids des éléments spécifiés\n     * @param values Liste des ids des éléments à sélectionner.\n     */\n    public setSelectedValues(values: ReadonlyArray<string>): void {\n        this.refreshSelection$.next({ unselectItems: 'all', selectValues: values });\n    }\n\n    /** Change l'état de sélection de l'élément spécifié.\n     * @param items Liste des éléments à modifier.\n     */\n    public toggleSelect(items: ReadonlyArray<Item<T>>): void {\n        this.refreshSelection$.next({ toggle: items });\n    }\n\n    /** Renvoie l'index de l'élément sur la liste plate corespondant à l'élément HTML spécifié\n     * @return Index sur la liste plate corespondant à l'élément HTML\n     */\n    public getItemIndexFromHtmlElement(element: HTMLElement): number {\n        // eslint-disable-next-line no-loops/no-loops\n        while (element?.parentElement && element.hasAttribute && !element.hasAttribute('flat') && element.parentElement.tagName !== 'BODY') {\n            element = element.parentElement;\n        }\n\n        if (!element || !element.hasAttribute('flat')) {\n            return undefined;\n        }\n\n        return +element.getAttribute('flat');\n    }\n\n    /** Retourne une valeur indiquant si l'élément spécifié correspond aux critères de recherche spécifiés\n     * @param item Elément à analyser.\n     * @param searchField Nom du champ à utiliser pour la recherche. Le champ représenté peut-être une valeur ou une function.\n     * @param regExp Expression de test sur le champs spécifié.\n     * @return True si l'élément correspond aux critères de recherche.\n     */\n    protected itemMatch(item: Item<T>, searchField: string, regExp: RegExp): boolean {\n        const indexedItem = item as IndexedItem<T>;\n        const value = (searchField && indexedItem[searchField] as string) ?? item.label;\n        return value && regExp.test(this.diacriticService.remove(value));\n    }\n\n    protected parentItemMatch(item: Item<T>, previousItem: Item<T>, _searchField: string, _regExp: RegExp): boolean {\n        // parent, visible only if a child is visible\n        return previousItem && previousItem.depth === item.depth + 1;\n    }\n\n    protected compareItems = (item1: Item<T>, item2: Item<T>): boolean => {\n        const isDefined = (value: Item<T>): boolean => value !== undefined && value !== null;\n\n        if (!isDefined(item1) || !isDefined(item2)) {\n            return false;\n        } else {\n            const model1 = item1.model as unknown as Comparable<T>;\n            const model2 = item1.model as unknown as Comparable<T>;\n            if (model1?.equals) {\n                return model1.equals(item2.model);\n            } else if (model2?.equals) {\n                return model2.equals(item1.model);\n            } else if (item1.id && item2.id) {\n                return item1.id === item2.id;\n            } else {\n                return item1.model === item2.model;\n            }\n        }\n    };\n\n    protected compareModels = (model1: T, model2: T, valueField: string): boolean => {\n        const isDefined = (value: T): boolean => value !== undefined && value !== null;\n\n        if (!isDefined(model1) || !isDefined(model2)) {\n            return false;\n        } else if (model1 === model2) {\n            return true;\n        } else if (Object(model1) === model1 && Object(model2) === model2) {\n            const cmp1 = model1 as unknown as Comparable<T>;\n            const cmp2 = model2 as unknown as Comparable<T>;\n            if (cmp1?.equals) {\n                return cmp1.equals(model2);\n            } else if (cmp2?.equals) {\n                return cmp2.equals(model1);\n            } else if (valueField) {\n                return this.extractValueField(model1, valueField) === this.extractValueField(model2, valueField);\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    };\n\n    protected extractValueField(model: T, field: string): unknown {\n        const indexedModel = model as unknown as Record<string, unknown>;\n        const fields = field.split('.');\n        return fields.reduce((mdl, fld) => mdl[fld], indexedModel);\n    }\n}\n\ninterface Comparable<T> {\n    equals: (model: T) => boolean;\n}\n\ninterface RefreshSelectionParams<T> {\n    toggle?: ReadonlyArray<Item<T>>;\n    selectItems?: ReadonlyArray<Item<T>> | 'all';\n    checkSelectable?: boolean;\n    selectParents?: boolean;\n    unselectItems?: ReadonlyArray<Item<T>> | 'all';\n    selectModels?: ReadonlyArray<T>;\n    selectValues?: ReadonlyArray<string>;\n}\n\nexport interface IndexedItem<T> extends Item<T>, Record<string, unknown> { }\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Item } from './item';\n\nexport class ItemEvent<T> {\n    public item: Item<T>;\n    public model: T;\n    public items: ReadonlyArray<Item<T>>;\n    public models: ReadonlyArray<T>;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/** Model de tri pour le SortingService */\nexport interface SortInfos {\n    /* Nom du champ par lequel effectuer le tri ou fonction renvoyant le nom du champ */\n    name: string;\n    /* Ordre de tri */\n    order?: SortOrder;\n}\n\n/** Classe de tri d'une liste plate ou hierarchique */\n@Injectable({\n    providedIn: 'root'\n})\nexport class SortingService {\n    /** Trie les éléments de la liste plate spécifiée en fonction du modèle de tri spécifié\n     * @param list Liste à trier.\n     * @param sortInfos Modèle de tri à appliquer.\n     * @return Liste triée.\n     */\n    public sort<T>(list: Array<T>, sortInfo: SortInfos | ReadonlyArray<SortInfos>): Array<T> {\n        if (list?.length) {\n            const sortInfos = sortInfo instanceof Array ? sortInfo : [sortInfo];\n            let i = sortInfos.length;\n            // eslint-disable-next-line no-loops/no-loops\n            while (--i >= 0) {\n                const si = sortInfos[i];\n                list = sortBy(list, si.name);\n                if (si.order === 'descending') {\n                    list = list.reverse();\n                }\n            }\n        }\n        return list;\n    }\n\n    /** Trie les éléments de la liste hierarchique spécifiée en fonction du modèle de tri spécifié.  Peut être surchargé pour implémenter un tri asynchrone\n     * @param tree Liste à trier.\n     * @param sortInfos Modèle de tri à appliquer.\n     * @param childrenField Champ à utiliser pour la recherche dans les enfants d'un parent.\n     * @return Observable résolue par la fonction.\n     */\n    public sortTree<T>(tree: Array<T>, sortInfo: SortInfos | ReadonlyArray<SortInfos>, childrenField = 'items'): Array<T> {\n        return this.sort<T>(tree, sortInfo).map(child => {\n            const indexed = child as Record<string, unknown>;\n            if (indexed?.[childrenField] && indexed?.[childrenField] instanceof Array) {\n                this.sortTree(indexed[childrenField] as Array<T>, sortInfo, childrenField);\n            }\n            return child;\n        });\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ItemComponent } from './item.component';\n\n@NgModule({\n    declarations: [\n        ItemComponent\n    ],\n    exports: [\n        ItemComponent\n    ],\n    imports: [\n        CommonModule\n    ]\n})\nexport class ItemModule { }\n\nexport * from './item';\nexport * from './item.service';\nexport * from './item-event';\nexport * from './item.component';\nexport * from './sorting.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}