@lucca-front/ng 22.0.3 → 22.1.0-rc.1
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.
- package/README.md +0 -1
- package/fesm2022/lucca-front-ng-activity-feed.mjs +2 -2
- package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-approbation-inbox.mjs +1 -1
- package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-bubble-icon.mjs +2 -2
- package/fesm2022/lucca-front-ng-bubble-icon.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-callout.mjs +2 -2
- package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-api.mjs +0 -9
- package/fesm2022/lucca-front-ng-core-select-api.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs +9 -32
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +0 -11
- package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-user.mjs +5 -10
- package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select.mjs +29 -65
- package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core.mjs +5 -1
- package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-data-table.mjs +5 -8
- package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-date2.mjs +41 -9
- package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-dialog.mjs +4 -9
- package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-dropdown.mjs +0 -3
- package/fesm2022/lucca-front-ng-dropdown.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-filter-pills.mjs +0 -27
- package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-form-label.mjs +1 -1
- package/fesm2022/lucca-front-ng-form-label.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs +2 -5
- package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +24 -56
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-index-table.mjs +2 -2
- package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-modal.mjs +2 -7
- package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-multi-select.mjs +3 -3
- package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-popover2.mjs +2 -2
- package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-resource-card.mjs +2 -2
- package/fesm2022/lucca-front-ng-resource-card.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-safe-content.mjs +3 -40
- package/fesm2022/lucca-front-ng-safe-content.mjs.map +1 -1
- package/package.json +4 -4
- package/schematics/collection.json +0 -5
- package/schematics/deprecated-resolver/index.js +4 -1
- package/schematics/lib/angular-component-ast.js +1 -3
- package/schematics/lib/deprecated-mapper.js +10 -2
- package/schematics/lib/html-ast.js +0 -26
- package/src/components/_listbox.scss +6 -12
- package/types/lucca-front-ng-core-select-api.d.ts +0 -11
- package/types/lucca-front-ng-core-select-establishment.d.ts +0 -7
- package/types/lucca-front-ng-core-select-job-qualification.d.ts +0 -8
- package/types/lucca-front-ng-core-select-user.d.ts +0 -6
- package/types/lucca-front-ng-core-select.d.ts +0 -13
- package/types/lucca-front-ng-core.d.ts +3 -1
- package/types/lucca-front-ng-data-table.d.ts +1 -3
- package/types/lucca-front-ng-date2.d.ts +6 -2
- package/types/lucca-front-ng-forms-rich-text-input.d.ts +2 -3
- package/types/lucca-front-ng-safe-content.d.ts +2 -8
- package/schematics/file-upload/index.js +0 -22
- package/schematics/file-upload/migration.js +0 -230
- package/schematics/file-upload/migration.spec.js +0 -56
- package/schematics/file-upload/schema.json +0 -23
|
@@ -59,39 +59,22 @@ class LuCoreSelectEstablishmentsDirective extends ALuCoreSelectApiDirective {
|
|
|
59
59
|
this.searchDelimiter = input(' ', /* @ts-ignore */
|
|
60
60
|
...(ngDevMode ? [{ debugName: "searchDelimiter" }] : /* istanbul ignore next */ []));
|
|
61
61
|
this.clue = toSignal(this.clue$);
|
|
62
|
-
|
|
63
|
-
* Params shared by every call: the restrictions that define which establishments are selectable,
|
|
64
|
-
* without the clue-dependent search and sort.
|
|
65
|
-
*/
|
|
66
|
-
this.#restrictionParams = computed(() => {
|
|
62
|
+
this.paramsSignal = computed(() => {
|
|
67
63
|
const operationIds = this.operationIds();
|
|
68
64
|
const uniqueOperationIds = this.uniqueOperationIds();
|
|
69
65
|
const appInstanceId = this.appInstanceId();
|
|
70
|
-
return {
|
|
71
|
-
...this.filters(),
|
|
72
|
-
...(operationIds ? { operations: operationIds.join(',') } : {}),
|
|
73
|
-
...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),
|
|
74
|
-
...(appInstanceId ? { appInstanceId } : {}),
|
|
75
|
-
};
|
|
76
|
-
}, /* @ts-ignore */
|
|
77
|
-
...(ngDevMode ? [{ debugName: "#restrictionParams" }] : /* istanbul ignore next */ []));
|
|
78
|
-
/**
|
|
79
|
-
* Establishments are grouped by legal unit, but the panel only knows the options of the pages it
|
|
80
|
-
* already loaded: a legal unit spanning several pages would be partially selected. Fetch the whole
|
|
81
|
-
* legal unit instead, page by page, so "select all" covers the options that are not rendered yet.
|
|
82
|
-
* Groups are only displayed when the clue is empty, hence the clue-less params.
|
|
83
|
-
*/
|
|
84
|
-
this.getGroupOptions = (legalUnitId) => this.#getLegalUnitOptions(legalUnitId, 0);
|
|
85
|
-
this.paramsSignal = computed(() => {
|
|
86
66
|
const clue = this.clue();
|
|
87
67
|
const searchDelimiter = this.searchDelimiter();
|
|
88
68
|
return {
|
|
89
|
-
...this
|
|
69
|
+
...this.filters(),
|
|
90
70
|
...(clue
|
|
91
71
|
? // When the clue is not empty, sort establishments by name
|
|
92
72
|
{ search: applySearchDelimiter(clue, searchDelimiter), sort: 'name' }
|
|
93
73
|
: // When the clue is empty, establishments are grouped by legal unit, so sort them by legal unit name and then by name
|
|
94
74
|
{ sort: 'legalunit.name,name' }),
|
|
75
|
+
...(operationIds ? { operations: operationIds.join(',') } : {}),
|
|
76
|
+
...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),
|
|
77
|
+
...(appInstanceId ? { appInstanceId } : {}),
|
|
95
78
|
};
|
|
96
79
|
}, /* @ts-ignore */
|
|
97
80
|
...(ngDevMode ? [{ debugName: "paramsSignal" }] : /* istanbul ignore next */ []));
|
|
@@ -118,23 +101,17 @@ class LuCoreSelectEstablishmentsDirective extends ALuCoreSelectApiDirective {
|
|
|
118
101
|
});
|
|
119
102
|
});
|
|
120
103
|
}
|
|
121
|
-
/**
|
|
122
|
-
* Params shared by every call: the restrictions that define which establishments are selectable,
|
|
123
|
-
* without the clue-dependent search and sort.
|
|
124
|
-
*/
|
|
125
|
-
#restrictionParams;
|
|
126
104
|
buildParamsFromClue(clue) {
|
|
127
105
|
// Use the clue parameter directly instead of reading from the async signal
|
|
128
106
|
// to avoid stale params when selection triggers an immediate clue reset
|
|
129
107
|
return of({
|
|
130
|
-
...this
|
|
108
|
+
...this.filters(),
|
|
131
109
|
...(clue ? { search: applySearchDelimiter(clue, this.searchDelimiter()), sort: 'name' } : { sort: 'legalunit.name,name' }),
|
|
110
|
+
...(this.operationIds() ? { operations: this.operationIds().join(',') } : {}),
|
|
111
|
+
...(this.uniqueOperationIds() ? { uniqueOperations: this.uniqueOperationIds().join(',') } : {}),
|
|
112
|
+
...(this.appInstanceId() ? { appInstanceId: this.appInstanceId() } : {}),
|
|
132
113
|
});
|
|
133
114
|
}
|
|
134
|
-
#getLegalUnitOptions(legalUnitId, page) {
|
|
135
|
-
const params = { ...this.#restrictionParams(), legalUnitId, sort: 'name' };
|
|
136
|
-
return this.getOptions(params, page).pipe(switchMap((options) => (options.length < this.pageSize ? of(options) : this.#getLegalUnitOptions(legalUnitId, page + 1).pipe(map((nextOptions) => [...options, ...nextOptions])))));
|
|
137
|
-
}
|
|
138
115
|
getOptions(params, page) {
|
|
139
116
|
const options$ = this.httpClient
|
|
140
117
|
.get(this.url(), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucca-front-ng-core-select-establishment.mjs","sources":["../../../packages/ng/core-select/establishment/establishment-grouping.service.ts","../../../packages/ng/core-select/establishment/establishment-grouping.component.ts","../../../packages/ng/core-select/establishment/establishments.directive.ts","../../../packages/ng/core-select/establishment/lucca-front-ng-core-select-establishment.ts"],"sourcesContent":["import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { combineLatest, map, shareReplay } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class EstablishmentGroupingService {\n\tprotected http = inject(HttpClient);\n\tprotected establishmentsUrl = '/organization/structure/api/establishments';\n\tprotected legalUnitsUrl = '/organization/structure/api/legal-units';\n\n\tprotected countParams: HttpParams = new HttpParams().set('fields.root', 'count').set('limit', 0);\n\tprotected readonly establishmentsCount$ = this.http.get<{ count: number }>(this.establishmentsUrl, { params: this.countParams }).pipe(map((res) => res.count));\n\tprotected readonly legalUnitsCount$ = this.http.get<{ count: number }>(this.legalUnitsUrl, { params: this.countParams }).pipe(map((res) => res.count));\n\n\tpublic readonly useGrouping$ = combineLatest([this.legalUnitsCount$, this.establishmentsCount$]).pipe(\n\t\tmap(([luCount, establishmentCount]) => luCount > 1 && establishmentCount > 1),\n\t\tshareReplay(),\n\t);\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { PORTAL_CONTEXT } from '@lucca-front/ng/core';\nimport { LuOptionGroupByContext } from '@lucca-front/ng/core-select';\nimport { LuCoreSelectEstablishment } from './models';\n\n@Component({\n\tselector: 'lu-establishment-grouping',\n\ttemplate: `{{ group.options[0].legalUnit.name }}`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuEstablishmentGroupingComponent {\n\tgroup = inject<LuOptionGroupByContext<LuCoreSelectEstablishment, number>>(PORTAL_CONTEXT).$implicit;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, Directive, OnInit, computed, forwardRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { luNullableNumberAttribute } from '@lucca-front/ng/core';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider, applySearchDelimiter } from '@lucca-front/ng/core-select';\nimport { ALuCoreSelectApiDirective } from '@lucca-front/ng/core-select/api';\nimport { Observable, debounceTime, filter, map, of, switchMap } from 'rxjs';\nimport { LuEstablishmentGroupingComponent } from './establishment-grouping.component';\nimport { EstablishmentGroupingService } from './establishment-grouping.service';\nimport { LuCoreSelectEstablishment } from './models';\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\" / \"lu-multi-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[establishments],lu-multi-select[establishments]',\n\texportAs: 'luEstablishments',\n\tproviders: [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(() => LuCoreSelectEstablishmentsDirective),\n\t\t},\n\t],\n})\nexport class LuCoreSelectEstablishmentsDirective<T extends LuCoreSelectEstablishment = LuCoreSelectEstablishment>\n\textends ALuCoreSelectApiDirective<T>\n\timplements OnInit, CoreSelectApiTotalCountProvider\n{\n\t#groupingService = inject(EstablishmentGroupingService);\n\t#destroyRef = inject(DestroyRef);\n\n\tprotected httpClient = inject(HttpClient);\n\n\treadonly url = input<string>('/organization/structure/api/establishments');\n\treadonly filters = input<Record<string, string | number | boolean> | null>(null);\n\treadonly operationIds = input<readonly number[] | null>(null);\n\treadonly uniqueOperationIds = input<readonly number[] | null>(null);\n\treadonly appInstanceId = input(null, { transform: luNullableNumberAttribute });\n\treadonly searchDelimiter = input<string>(' ');\n\n\tprotected readonly clue = toSignal(this.clue$);\n\n\tpublic override ngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tthis.initGrouping();\n\t}\n\n\tprotected initGrouping() {\n\t\tthis.#groupingService.useGrouping$.pipe(filter(Boolean), takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n\t\t\tthis.select.groupingSignal.set({\n\t\t\t\tselector: (option) => option.legalUnitId,\n\t\t\t\tcontent: LuEstablishmentGroupingComponent,\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Params shared by every call: the restrictions that define which establishments are selectable,\n\t * without the clue-dependent search and sort.\n\t */\n\treadonly #restrictionParams = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst operationIds = this.operationIds();\n\t\tconst uniqueOperationIds = this.uniqueOperationIds();\n\t\tconst appInstanceId = this.appInstanceId();\n\t\treturn {\n\t\t\t...this.filters(),\n\t\t\t...(operationIds ? { operations: operationIds.join(',') } : {}),\n\t\t\t...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),\n\t\t\t...(appInstanceId ? { appInstanceId } : {}),\n\t\t};\n\t});\n\n\tprotected override buildParamsFromClue(clue: string): Observable<Record<string, string | number | boolean>> {\n\t\t// Use the clue parameter directly instead of reading from the async signal\n\t\t// to avoid stale params when selection triggers an immediate clue reset\n\t\treturn of({\n\t\t\t...this.#restrictionParams(),\n\t\t\t...(clue ? { search: applySearchDelimiter(clue, this.searchDelimiter()), sort: 'name' } : { sort: 'legalunit.name,name' }),\n\t\t});\n\t}\n\n\t/**\n\t * Establishments are grouped by legal unit, but the panel only knows the options of the pages it\n\t * already loaded: a legal unit spanning several pages would be partially selected. Fetch the whole\n\t * legal unit instead, page by page, so \"select all\" covers the options that are not rendered yet.\n\t * Groups are only displayed when the clue is empty, hence the clue-less params.\n\t */\n\tprotected override getGroupOptions = (legalUnitId: unknown): Observable<T[]> => this.#getLegalUnitOptions(legalUnitId as number, 0);\n\n\t#getLegalUnitOptions(legalUnitId: number, page: number): Observable<T[]> {\n\t\tconst params = { ...this.#restrictionParams(), legalUnitId, sort: 'name' };\n\t\treturn this.getOptions(params, page).pipe(\n\t\t\tswitchMap((options) => (options.length < this.pageSize ? of(options) : this.#getLegalUnitOptions(legalUnitId, page + 1).pipe(map((nextOptions) => [...options, ...nextOptions])))),\n\t\t);\n\t}\n\n\tprotected override getOptions(params: Record<string, string | number | boolean> | null, page: number): Observable<T[]> {\n\t\tconst options$ = this.httpClient\n\t\t\t.get<T[] | { items: T[] }>(this.url(), {\n\t\t\t\tparams: {\n\t\t\t\t\t...params,\n\t\t\t\t\tpage: page + 1,\n\t\t\t\t\tlimit: this.pageSize,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(map((res) => (Array.isArray(res) ? res : res?.items) ?? []));\n\n\t\treturn this.#groupingService.useGrouping$.pipe(switchMap(() => options$));\n\t}\n\n\tprotected override readonly paramsSignal = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst clue = this.clue();\n\t\tconst searchDelimiter = this.searchDelimiter();\n\t\treturn {\n\t\t\t...this.#restrictionParams(),\n\t\t\t...(clue\n\t\t\t\t? // When the clue is not empty, sort establishments by name\n\t\t\t\t\t{ search: applySearchDelimiter(clue, searchDelimiter), sort: 'name' }\n\t\t\t\t: // When the clue is empty, establishments are grouped by legal unit, so sort them by legal unit name and then by name\n\t\t\t\t\t{ sort: 'legalunit.name,name' }),\n\t\t};\n\t});\n\tprotected override readonly params$: Observable<Record<string, string | number | boolean>> = toObservable(this.paramsSignal);\n\n\tpublic readonly totalCount$ = toObservable(computed(() => ({ url: this.url(), filters: this.filters() }))).pipe(\n\t\tdebounceTime(250),\n\t\tswitchMap(({ url, filters }) =>\n\t\t\tthis.httpClient.get<{ count: number }>(url, {\n\t\t\t\tparams: {\n\t\t\t\t\t...filters,\n\t\t\t\t\t['fields.root']: 'count',\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t\tmap((res) => res?.count ?? 0),\n\t);\n\n\tprotected override optionKey = (option: T) => option.id;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucca-front-ng-core-select-establishment.mjs","sources":["../../../packages/ng/core-select/establishment/establishment-grouping.service.ts","../../../packages/ng/core-select/establishment/establishment-grouping.component.ts","../../../packages/ng/core-select/establishment/establishments.directive.ts","../../../packages/ng/core-select/establishment/lucca-front-ng-core-select-establishment.ts"],"sourcesContent":["import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { combineLatest, map, shareReplay } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class EstablishmentGroupingService {\n\tprotected http = inject(HttpClient);\n\tprotected establishmentsUrl = '/organization/structure/api/establishments';\n\tprotected legalUnitsUrl = '/organization/structure/api/legal-units';\n\n\tprotected countParams: HttpParams = new HttpParams().set('fields.root', 'count').set('limit', 0);\n\tprotected readonly establishmentsCount$ = this.http.get<{ count: number }>(this.establishmentsUrl, { params: this.countParams }).pipe(map((res) => res.count));\n\tprotected readonly legalUnitsCount$ = this.http.get<{ count: number }>(this.legalUnitsUrl, { params: this.countParams }).pipe(map((res) => res.count));\n\n\tpublic readonly useGrouping$ = combineLatest([this.legalUnitsCount$, this.establishmentsCount$]).pipe(\n\t\tmap(([luCount, establishmentCount]) => luCount > 1 && establishmentCount > 1),\n\t\tshareReplay(),\n\t);\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { PORTAL_CONTEXT } from '@lucca-front/ng/core';\nimport { LuOptionGroupByContext } from '@lucca-front/ng/core-select';\nimport { LuCoreSelectEstablishment } from './models';\n\n@Component({\n\tselector: 'lu-establishment-grouping',\n\ttemplate: `{{ group.options[0].legalUnit.name }}`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuEstablishmentGroupingComponent {\n\tgroup = inject<LuOptionGroupByContext<LuCoreSelectEstablishment, number>>(PORTAL_CONTEXT).$implicit;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, Directive, OnInit, computed, forwardRef, inject, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { luNullableNumberAttribute } from '@lucca-front/ng/core';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider, applySearchDelimiter } from '@lucca-front/ng/core-select';\nimport { ALuCoreSelectApiDirective } from '@lucca-front/ng/core-select/api';\nimport { Observable, debounceTime, filter, map, of, switchMap } from 'rxjs';\nimport { LuEstablishmentGroupingComponent } from './establishment-grouping.component';\nimport { EstablishmentGroupingService } from './establishment-grouping.service';\nimport { LuCoreSelectEstablishment } from './models';\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\" / \"lu-multi-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[establishments],lu-multi-select[establishments]',\n\texportAs: 'luEstablishments',\n\tproviders: [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(() => LuCoreSelectEstablishmentsDirective),\n\t\t},\n\t],\n})\nexport class LuCoreSelectEstablishmentsDirective<T extends LuCoreSelectEstablishment = LuCoreSelectEstablishment>\n\textends ALuCoreSelectApiDirective<T>\n\timplements OnInit, CoreSelectApiTotalCountProvider\n{\n\t#groupingService = inject(EstablishmentGroupingService);\n\t#destroyRef = inject(DestroyRef);\n\n\tprotected httpClient = inject(HttpClient);\n\n\treadonly url = input<string>('/organization/structure/api/establishments');\n\treadonly filters = input<Record<string, string | number | boolean> | null>(null);\n\treadonly operationIds = input<readonly number[] | null>(null);\n\treadonly uniqueOperationIds = input<readonly number[] | null>(null);\n\treadonly appInstanceId = input(null, { transform: luNullableNumberAttribute });\n\treadonly searchDelimiter = input<string>(' ');\n\n\tprotected readonly clue = toSignal(this.clue$);\n\n\tpublic override ngOnInit(): void {\n\t\tsuper.ngOnInit();\n\t\tthis.initGrouping();\n\t}\n\n\tprotected initGrouping() {\n\t\tthis.#groupingService.useGrouping$.pipe(filter(Boolean), takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n\t\t\tthis.select.groupingSignal.set({\n\t\t\t\tselector: (option) => option.legalUnitId,\n\t\t\t\tcontent: LuEstablishmentGroupingComponent,\n\t\t\t});\n\t\t});\n\t}\n\n\tprotected override buildParamsFromClue(clue: string): Observable<Record<string, string | number | boolean>> {\n\t\t// Use the clue parameter directly instead of reading from the async signal\n\t\t// to avoid stale params when selection triggers an immediate clue reset\n\t\treturn of({\n\t\t\t...this.filters(),\n\t\t\t...(clue ? { search: applySearchDelimiter(clue, this.searchDelimiter()), sort: 'name' } : { sort: 'legalunit.name,name' }),\n\t\t\t...(this.operationIds() ? { operations: this.operationIds()!.join(',') } : {}),\n\t\t\t...(this.uniqueOperationIds() ? { uniqueOperations: this.uniqueOperationIds()!.join(',') } : {}),\n\t\t\t...(this.appInstanceId() ? { appInstanceId: this.appInstanceId() } : {}),\n\t\t});\n\t}\n\n\tprotected override getOptions(params: Record<string, string | number | boolean> | null, page: number): Observable<T[]> {\n\t\tconst options$ = this.httpClient\n\t\t\t.get<T[] | { items: T[] }>(this.url(), {\n\t\t\t\tparams: {\n\t\t\t\t\t...params,\n\t\t\t\t\tpage: page + 1,\n\t\t\t\t\tlimit: this.pageSize,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(map((res) => (Array.isArray(res) ? res : res?.items) ?? []));\n\n\t\treturn this.#groupingService.useGrouping$.pipe(switchMap(() => options$));\n\t}\n\n\tprotected override readonly paramsSignal = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst operationIds = this.operationIds();\n\t\tconst uniqueOperationIds = this.uniqueOperationIds();\n\t\tconst appInstanceId = this.appInstanceId();\n\t\tconst clue = this.clue();\n\t\tconst searchDelimiter = this.searchDelimiter();\n\t\treturn {\n\t\t\t...this.filters(),\n\t\t\t...(clue\n\t\t\t\t? // When the clue is not empty, sort establishments by name\n\t\t\t\t\t{ search: applySearchDelimiter(clue, searchDelimiter), sort: 'name' }\n\t\t\t\t: // When the clue is empty, establishments are grouped by legal unit, so sort them by legal unit name and then by name\n\t\t\t\t\t{ sort: 'legalunit.name,name' }),\n\t\t\t...(operationIds ? { operations: operationIds.join(',') } : {}),\n\t\t\t...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),\n\t\t\t...(appInstanceId ? { appInstanceId } : {}),\n\t\t};\n\t});\n\tprotected override readonly params$: Observable<Record<string, string | number | boolean>> = toObservable(this.paramsSignal);\n\n\tpublic readonly totalCount$ = toObservable(computed(() => ({ url: this.url(), filters: this.filters() }))).pipe(\n\t\tdebounceTime(250),\n\t\tswitchMap(({ url, filters }) =>\n\t\t\tthis.httpClient.get<{ count: number }>(url, {\n\t\t\t\tparams: {\n\t\t\t\t\t...filters,\n\t\t\t\t\t['fields.root']: 'count',\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t\tmap((res) => res?.count ?? 0),\n\t);\n\n\tprotected override optionKey = (option: T) => option.id;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -34,13 +34,6 @@ class LuCoreSelectJobQualificationsDirective extends ALuCoreSelectApiDirective {
|
|
|
34
34
|
this.searchDelimiter = input(' ', /* @ts-ignore */
|
|
35
35
|
...(ngDevMode ? [{ debugName: "searchDelimiter" }] : /* istanbul ignore next */ []));
|
|
36
36
|
this.clue = toSignal(this.clue$);
|
|
37
|
-
/**
|
|
38
|
-
* Job qualifications are grouped by job, but the panel only knows the options of the pages it
|
|
39
|
-
* already loaded: a job spanning several pages would be partially selected. Fetch the whole job
|
|
40
|
-
* instead, page by page, so "select all" covers the options that are not rendered yet. Groups are
|
|
41
|
-
* only displayed when the clue is empty, hence the clue-less params.
|
|
42
|
-
*/
|
|
43
|
-
this.getGroupOptions = (jobId) => this.#getJobOptions(jobId, 0);
|
|
44
37
|
this.paramsSignal = computed(() => {
|
|
45
38
|
const filters = this.filters();
|
|
46
39
|
const clue = this.clue();
|
|
@@ -76,10 +69,6 @@ class LuCoreSelectJobQualificationsDirective extends ALuCoreSelectApiDirective {
|
|
|
76
69
|
...(clue ? { search: applySearchDelimiter(clue, this.searchDelimiter()), sort: 'name' } : { sort: 'job.name,level.position' }),
|
|
77
70
|
});
|
|
78
71
|
}
|
|
79
|
-
#getJobOptions(jobId, page) {
|
|
80
|
-
const params = { ...this.filters(), 'job.id': jobId, sort: 'level.position' };
|
|
81
|
-
return this.getOptions(params, page).pipe(switchMap((options) => (options.length < this.pageSize ? of(options) : this.#getJobOptions(jobId, page + 1).pipe(map((nextOptions) => [...options, ...nextOptions])))));
|
|
82
|
-
}
|
|
83
72
|
getOptions(params, page) {
|
|
84
73
|
return this.httpClient
|
|
85
74
|
.get(this.url(), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucca-front-ng-core-select-job-qualification.mjs","sources":["../../../packages/ng/core-select/job-qualification/job-qualification-grouping.component.ts","../../../packages/ng/core-select/job-qualification/job-qualifications.directive.ts","../../../packages/ng/core-select/job-qualification/lucca-front-ng-core-select-job-qualification.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { PORTAL_CONTEXT } from '@lucca-front/ng/core';\nimport { LuOptionGroupByContext } from '@lucca-front/ng/core-select';\nimport { LuCoreSelectJobQualification } from './models';\n\n@Component({\n\tselector: 'lu-job-qualification-grouping',\n\ttemplate: `{{ group.options[0].job.name }}`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuJobQualificationGroupingComponent {\n\tgroup = inject<LuOptionGroupByContext<LuCoreSelectJobQualification, number>>(PORTAL_CONTEXT).$implicit;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Directive, OnInit, computed, forwardRef, inject, input } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider, applySearchDelimiter } from '@lucca-front/ng/core-select';\nimport { ALuCoreSelectApiDirective } from '@lucca-front/ng/core-select/api';\nimport { Observable, debounceTime, map, of, switchMap } from 'rxjs';\nimport { LuJobQualificationGroupingComponent } from './job-qualification-grouping.component';\nimport { LuCoreSelectJobQualification } from './models';\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\" / \"lu-multi-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[jobQualifications],lu-multi-select[jobQualifications]',\n\texportAs: 'jobQualifications',\n\tproviders: [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(() => LuCoreSelectJobQualificationsDirective),\n\t\t},\n\t],\n})\nexport class LuCoreSelectJobQualificationsDirective<T extends LuCoreSelectJobQualification = LuCoreSelectJobQualification>\n\textends ALuCoreSelectApiDirective<T>\n\timplements OnInit, CoreSelectApiTotalCountProvider\n{\n\tprotected httpClient = inject(HttpClient);\n\n\treadonly url = input<string>('/organization/structure/api/job-qualifications');\n\treadonly filters = input<Record<string, string | number | boolean> | null>(null);\n\treadonly searchDelimiter = input<string>(' ');\n\n\tprotected readonly clue = toSignal(this.clue$);\n\n\tpublic constructor() {\n\t\tsuper();\n\n\t\tthis.select.groupingSignal.set({\n\t\t\tselector: (option) => option.job.id,\n\t\t\tcontent: LuJobQualificationGroupingComponent,\n\t\t});\n\t}\n\n\tprotected override buildParamsFromClue(clue: string): Observable<Record<string, string | number | boolean>> {\n\t\t// Use the clue parameter directly instead of reading from the async signal\n\t\t// to avoid stale params when selection triggers an immediate clue reset\n\t\treturn of({\n\t\t\t...this.filters(),\n\t\t\t...(clue ? { search: applySearchDelimiter(clue, this.searchDelimiter()), sort: 'name' } : { sort: 'job.name,level.position' }),\n\t\t});\n\t}\n\n\t/**\n\t * Job qualifications are grouped by job, but the panel only knows the options of the pages it\n\t * already loaded: a job spanning several pages would be partially selected. Fetch the whole job\n\t * instead, page by page, so \"select all\" covers the options that are not rendered yet. Groups are\n\t * only displayed when the clue is empty, hence the clue-less params.\n\t */\n\tprotected override getGroupOptions = (jobId: unknown): Observable<T[]> => this.#getJobOptions(jobId as number, 0);\n\n\t#getJobOptions(jobId: number, page: number): Observable<T[]> {\n\t\tconst params = { ...this.filters(), 'job.id': jobId, sort: 'level.position' };\n\t\treturn this.getOptions(params, page).pipe(\n\t\t\tswitchMap((options) => (options.length < this.pageSize ? of(options) : this.#getJobOptions(jobId, page + 1).pipe(map((nextOptions) => [...options, ...nextOptions])))),\n\t\t);\n\t}\n\n\tprotected override getOptions(params: Record<string, string | number | boolean> | null, page: number): Observable<T[]> {\n\t\treturn this.httpClient\n\t\t\t.get<T[] | { items: T[] }>(this.url(), {\n\t\t\t\tparams: {\n\t\t\t\t\t...params,\n\t\t\t\t\tpage: page + 1,\n\t\t\t\t\tlimit: this.pageSize,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(map((res) => (Array.isArray(res) ? res : res?.items) ?? []));\n\t}\n\n\tprotected override readonly paramsSignal = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst filters = this.filters();\n\t\tconst clue = this.clue();\n\t\treturn {\n\t\t\t...filters,\n\t\t\t...(clue\n\t\t\t\t? {\n\t\t\t\t\t\tsearch: applySearchDelimiter(clue, this.searchDelimiter()),\n\t\t\t\t\t\tsort: 'name',\n\t\t\t\t\t}\n\t\t\t\t: { sort: 'job.name,level.position' }),\n\t\t};\n\t});\n\tprotected override readonly params$: Observable<Record<string, string | number | boolean>> = toObservable(this.paramsSignal);\n\n\tpublic readonly totalCount$ = toObservable(computed(() => ({ url: this.url(), filters: this.filters() }))).pipe(\n\t\tdebounceTime(250),\n\t\tswitchMap(({ url, filters }) =>\n\t\t\tthis.httpClient.get<{ count: number }>(url, {\n\t\t\t\tparams: {\n\t\t\t\t\t...filters,\n\t\t\t\t\t['fields.root']: 'count',\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t\tmap((res) => res?.count ?? 0),\n\t);\n\n\tprotected override optionKey = (option: T) => option.id;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucca-front-ng-core-select-job-qualification.mjs","sources":["../../../packages/ng/core-select/job-qualification/job-qualification-grouping.component.ts","../../../packages/ng/core-select/job-qualification/job-qualifications.directive.ts","../../../packages/ng/core-select/job-qualification/lucca-front-ng-core-select-job-qualification.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { PORTAL_CONTEXT } from '@lucca-front/ng/core';\nimport { LuOptionGroupByContext } from '@lucca-front/ng/core-select';\nimport { LuCoreSelectJobQualification } from './models';\n\n@Component({\n\tselector: 'lu-job-qualification-grouping',\n\ttemplate: `{{ group.options[0].job.name }}`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuJobQualificationGroupingComponent {\n\tgroup = inject<LuOptionGroupByContext<LuCoreSelectJobQualification, number>>(PORTAL_CONTEXT).$implicit;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Directive, OnInit, computed, forwardRef, inject, input } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider, applySearchDelimiter } from '@lucca-front/ng/core-select';\nimport { ALuCoreSelectApiDirective } from '@lucca-front/ng/core-select/api';\nimport { Observable, debounceTime, map, of, switchMap } from 'rxjs';\nimport { LuJobQualificationGroupingComponent } from './job-qualification-grouping.component';\nimport { LuCoreSelectJobQualification } from './models';\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\" / \"lu-multi-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[jobQualifications],lu-multi-select[jobQualifications]',\n\texportAs: 'jobQualifications',\n\tproviders: [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(() => LuCoreSelectJobQualificationsDirective),\n\t\t},\n\t],\n})\nexport class LuCoreSelectJobQualificationsDirective<T extends LuCoreSelectJobQualification = LuCoreSelectJobQualification>\n\textends ALuCoreSelectApiDirective<T>\n\timplements OnInit, CoreSelectApiTotalCountProvider\n{\n\tprotected httpClient = inject(HttpClient);\n\n\treadonly url = input<string>('/organization/structure/api/job-qualifications');\n\treadonly filters = input<Record<string, string | number | boolean> | null>(null);\n\treadonly searchDelimiter = input<string>(' ');\n\n\tprotected readonly clue = toSignal(this.clue$);\n\n\tpublic constructor() {\n\t\tsuper();\n\n\t\tthis.select.groupingSignal.set({\n\t\t\tselector: (option) => option.job.id,\n\t\t\tcontent: LuJobQualificationGroupingComponent,\n\t\t});\n\t}\n\n\tprotected override buildParamsFromClue(clue: string): Observable<Record<string, string | number | boolean>> {\n\t\t// Use the clue parameter directly instead of reading from the async signal\n\t\t// to avoid stale params when selection triggers an immediate clue reset\n\t\treturn of({\n\t\t\t...this.filters(),\n\t\t\t...(clue ? { search: applySearchDelimiter(clue, this.searchDelimiter()), sort: 'name' } : { sort: 'job.name,level.position' }),\n\t\t});\n\t}\n\n\tprotected override getOptions(params: Record<string, string | number | boolean> | null, page: number): Observable<T[]> {\n\t\treturn this.httpClient\n\t\t\t.get<T[] | { items: T[] }>(this.url(), {\n\t\t\t\tparams: {\n\t\t\t\t\t...params,\n\t\t\t\t\tpage: page + 1,\n\t\t\t\t\tlimit: this.pageSize,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(map((res) => (Array.isArray(res) ? res : res?.items) ?? []));\n\t}\n\n\tprotected override readonly paramsSignal = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst filters = this.filters();\n\t\tconst clue = this.clue();\n\t\treturn {\n\t\t\t...filters,\n\t\t\t...(clue\n\t\t\t\t? {\n\t\t\t\t\t\tsearch: applySearchDelimiter(clue, this.searchDelimiter()),\n\t\t\t\t\t\tsort: 'name',\n\t\t\t\t\t}\n\t\t\t\t: { sort: 'job.name,level.position' }),\n\t\t};\n\t});\n\tprotected override readonly params$: Observable<Record<string, string | number | boolean>> = toObservable(this.paramsSignal);\n\n\tpublic readonly totalCount$ = toObservable(computed(() => ({ url: this.url(), filters: this.filters() }))).pipe(\n\t\tdebounceTime(250),\n\t\tswitchMap(({ url, filters }) =>\n\t\t\tthis.httpClient.get<{ count: number }>(url, {\n\t\t\t\tparams: {\n\t\t\t\t\t...filters,\n\t\t\t\t\t['fields.root']: 'count',\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t\tmap((res) => res?.count ?? 0),\n\t);\n\n\tprotected override optionKey = (option: T) => option.id;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -193,7 +193,7 @@ class LuUserOptionComponent {
|
|
|
193
193
|
this.userDirective = inject(LuCoreSelectUsersDirective);
|
|
194
194
|
this.intl = input(...intlInputOptions(LU_CORE_SELECT_USER_TRANSLATIONS), /* @ts-ignore */
|
|
195
195
|
...(ngDevMode ? [{ debugName: "intl" }] : /* istanbul ignore next */ []));
|
|
196
|
-
this.hasEmptyClue$ = this.userDirective.select.
|
|
196
|
+
this.hasEmptyClue$ = this.userDirective.select.clueChange$.pipe(startWith(this.userDirective.select.clue), map((clue) => !clue));
|
|
197
197
|
this.customUserOptionTpl = this.userDirective.customUserOptionTpl;
|
|
198
198
|
}
|
|
199
199
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LuUserOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -395,15 +395,10 @@ class LuCoreSelectUsersDirective extends ALuCoreSelectApiDirective {
|
|
|
395
395
|
const filteredItems = displayMe ? items.filter((u) => u.id !== this.currentUserId) : items;
|
|
396
396
|
return { items: me && prependMe ? [me, ...filteredItems] : filteredItems, isLastPage };
|
|
397
397
|
}));
|
|
398
|
-
return page$.pipe(
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
* land on different pages (last option of a page, first of the next one), in which case a
|
|
403
|
-
* page by page detection would find none. So we run it on the accumulated list instead.
|
|
404
|
-
*/
|
|
405
|
-
transformOptions(options) {
|
|
406
|
-
return this.#userHomonymsService.handleHomonyms([...options], this.displayFormat());
|
|
398
|
+
return page$.pipe(switchMap((page) => this.#userHomonymsService.handleHomonyms(page.items, this.displayFormat()).pipe(map((items) => ({
|
|
399
|
+
items,
|
|
400
|
+
isLastPage: page.isLastPage,
|
|
401
|
+
})))), tap(() => this.select.loading.set(false)));
|
|
407
402
|
}
|
|
408
403
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LuCoreSelectUsersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
409
404
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.4", type: LuCoreSelectUsersDirective, isStandalone: true, selector: "lu-simple-select[users],lu-multi-select[users]", inputs: { displayFormat: { classPropertyName: "displayFormat", publicName: "displayFormat", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, orderBy: { classPropertyName: "orderBy", publicName: "orderBy", isSignal: true, isRequired: false, transformFunction: null }, operationIds: { classPropertyName: "operationIds", publicName: "operationIds", isSignal: true, isRequired: false, transformFunction: null }, uniqueOperationIds: { classPropertyName: "uniqueOperationIds", publicName: "uniqueOperationIds", isSignal: true, isRequired: false, transformFunction: null }, appInstanceId: { classPropertyName: "appInstanceId", publicName: "appInstanceId", isSignal: true, isRequired: false, transformFunction: null }, enableFormerEmployees: { classPropertyName: "enableFormerEmployees", publicName: "enableFormerEmployees", isSignal: true, isRequired: false, transformFunction: null }, displayMeOption: { classPropertyName: "displayMeOption", publicName: "displayMeOption", isSignal: true, isRequired: false, transformFunction: null }, customUserOptionTpl: { classPropertyName: "customUserOptionTpl", publicName: "customUserOptionTpl", isSignal: true, isRequired: false, transformFunction: null }, searchDelimiter: { classPropertyName: "searchDelimiter", publicName: "searchDelimiter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { customUserOptionTpl: "customUserOptionTplChange" }, providers: [provideBaseCoreSelectUsersContext(() => LuCoreSelectUsersDirective)], exportAs: ["luUsers"], usesInheritance: true, ngImport: i0 }); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucca-front-ng-core-select-user.mjs","sources":["../../../packages/ng/core-select/user/me.provider.ts","../../../packages/ng/core-select/user/translations.ts","../../../packages/ng/core-select/user/user.translate.ts","../../../packages/ng/core-select/user/former-employees.component.ts","../../../packages/ng/core-select/user/user-displayer.component.ts","../../../packages/ng/core-select/user/user-homonym.service.ts","../../../packages/ng/core-select/user/user-option.component.ts","../../../packages/ng/core-select/user/users.directive.ts","../../../packages/ng/core-select/user/lucca-front-ng-core-select-user.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\n\nexport const LU_CORE_SELECT_CURRENT_USER_ID = new InjectionToken<number>('LuCoreSelectCurrentUserId');\n\nexport function provideCoreSelectCurrentUserId(factory: () => number): Provider {\n\treturn {\n\t\tprovide: LU_CORE_SELECT_CURRENT_USER_ID,\n\t\tuseFactory: factory,\n\t};\n}\n","export const Translations = {\n\t'nl-BE': {\n\t\tme: 'Ik:',\n\t\tincludeFormerEmployees: 'Inclusief medewerkers die zijn vertrokken',\n\t},\n\tnl: {\n\t\tme: 'Ik:',\n\t\tincludeFormerEmployees: 'Inclusief medewerkers die zijn vertrokken',\n\t},\n\tit: {\n\t\tme: 'Io:',\n\t\tincludeFormerEmployees: 'Includere gli ex collaboratori',\n\t},\n\tfr: {\n\t\tme: 'Moi :',\n\t\tincludeFormerEmployees: 'Inclure les collaborateurs partis',\n\t},\n\tpt: {\n\t\tme: 'Eu:',\n\t\tincludeFormerEmployees: 'Incluir os trabalhadores que saíram',\n\t},\n\tes: {\n\t\tme: 'Yo:',\n\t\tincludeFormerEmployees: 'Incluir a los empleados inactivos',\n\t},\n\tde: {\n\t\tme: 'Ich:',\n\t\tincludeFormerEmployees: 'Ausgeschiedene Mitarbeitende einbeziehen',\n\t},\n\ten: {\n\t\tme: 'Me:',\n\t\tincludeFormerEmployees: 'Include former employees',\n\t},\n\tpl: {\n\t\tme: 'Ja:',\n\t\tincludeFormerEmployees: 'Uwzględnij byłych pracowników',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_CORE_SELECT_USER_TRANSLATIONS = new InjectionToken('LuCoreSelectUserTranslations', {\n\tfactory: () => luCoreSelectUserTranslations,\n});\n\nexport interface LuCoreSelectUserTranslations {\n\tme: string;\n\tincludeFormerEmployees: string;\n}\n\nexport const luCoreSelectUserTranslations: LuTranslation<LuCoreSelectUserTranslations> = Translations;\n","import { ChangeDetectionStrategy, Component, inject, InjectionToken, input, WritableSignal } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { ɵCoreSelectPanelElement } from '@lucca-front/ng/core-select';\nimport { LU_CORE_SELECT_USER_TRANSLATIONS } from './user.translate';\n\nexport interface FormerEmployeesContext {\n\tincludeFormerEmployees: WritableSignal<boolean>;\n}\n\nexport const FORMER_EMPLOYEES_CONTEXT = new InjectionToken<FormerEmployeesContext>('FormerEmployeesContext');\n\n@Component({\n\tselector: 'lu-core-select-former-employees',\n\tstyleUrl: './former-employees.component.scss',\n\timports: [FormsModule],\n\thostDirectives: [ɵCoreSelectPanelElement],\n\ttemplate: `\n\t\t<div class=\"formerEmployeeDisplayer optionItem\">\n\t\t\t<div class=\"optionItem-value\" [class.is-selected]=\"context.includeFormerEmployees()\" (mousedown)=\"onMouseDown($event)\">\n\t\t\t\t{{ intl().includeFormerEmployees }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuCoreSelectFormerEmployeesComponent {\n\treadonly intl = input(...intlInputOptions(LU_CORE_SELECT_USER_TRANSLATIONS));\n\treadonly context = inject(FORMER_EMPLOYEES_CONTEXT);\n\treadonly #selectableItem = inject(ɵCoreSelectPanelElement);\n\n\tconstructor() {\n\t\tthis.#selectableItem.id.set('select-former-employees');\n\t\toutputToObservable(this.#selectableItem.selected)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.context.includeFormerEmployees.set(!this.context.includeFormerEmployees());\n\t\t\t});\n\t}\n\n\tonMouseDown($event: MouseEvent): void {\n\t\tthis.context.includeFormerEmployees.set(!this.context.includeFormerEmployees());\n\t\t$event.preventDefault();\n\t\t$event.stopPropagation();\n\t}\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ILuOptionContext, LU_OPTION_CONTEXT } from '@lucca-front/ng/core-select';\nimport { LuUserDisplayPipe } from '@lucca-front/ng/user';\nimport { LuCoreSelectUser } from './user-option.model';\nimport { LuCoreSelectUsersDirective } from './users.directive';\n\n@Component({\n\tselector: 'lu-user-displayer',\n\timports: [AsyncPipe, LuUserDisplayPipe],\n\ttemplate: `\n\t\t@if (context.option$ | async; as user) {\n\t\t\t<span translate=\"no\">{{ user | luUserDisplay: userDirective.displayFormat() }}</span>\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuUserDisplayerComponent {\n\tprotected context = inject<ILuOptionContext<LuCoreSelectUser>>(LU_OPTION_CONTEXT);\n\tprotected userDirective = inject(LuCoreSelectUsersDirective);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ILuApiCollectionResponse } from '@lucca-front/ng/api';\nimport { LuDisplayFormat, luUserDisplay } from '@lucca-front/ng/user';\nimport { Observable, map, of, startWith, tap } from 'rxjs';\nimport { LuCoreSelectUser } from './user-option.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LuCoreSelectUserHomonymsService {\n\tprotected http = inject(HttpClient);\n\tprotected cache: Record<number, string> = {};\n\n\tprotected extractHomonyms<T extends LuCoreSelectUser>(users: T[], format: LuDisplayFormat): Set<T['id']> {\n\t\tconst usersByFullName: Record<string, T[]> = {};\n\n\t\tfor (const user of users) {\n\t\t\tconst name = luUserDisplay(user, format);\n\t\t\tusersByFullName[name] ||= [];\n\t\t\tusersByFullName[name].push(user);\n\t\t}\n\n\t\treturn new Set(\n\t\t\tObject.values(usersByFullName)\n\t\t\t\t.filter((users) => users.length > 1)\n\t\t\t\t.flatMap((users) => users.map((user) => user.id)),\n\t\t);\n\t}\n\n\tpublic handleHomonyms<T extends LuCoreSelectUser>(users: T[], format: LuDisplayFormat): Observable<T[]> {\n\t\tconst homonyms = this.extractHomonyms(users, format);\n\n\t\tif (homonyms.size === 0) {\n\t\t\treturn of(users);\n\t\t}\n\n\t\treturn this.getAdditionalInformationByUserId(Array.from(homonyms)).pipe(\n\t\t\tmap((additionalInformation) =>\n\t\t\t\tusers.map((user) =>\n\t\t\t\t\thomonyms.has(user.id)\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...user,\n\t\t\t\t\t\t\t\tadditionalInformation: this.cache[user.id] || additionalInformation[user.id],\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: user,\n\t\t\t\t),\n\t\t\t),\n\t\t\tstartWith(users),\n\t\t);\n\t}\n\n\tprotected getAdditionalInformationByUserId<T extends LuCoreSelectUser>(homonyms: T['id'][]): Observable<Record<number, string>> {\n\t\tconst userIds = homonyms.filter((userId) => !this.cache[userId]);\n\n\t\tif (userIds.length === 0) {\n\t\t\treturn of({});\n\t\t}\n\n\t\treturn this.http\n\t\t\t.get<ILuApiCollectionResponse<{ id: number; department?: { name: string } }>>(`/api/v3/users`, {\n\t\t\t\tparams: {\n\t\t\t\t\tid: userIds.join(','),\n\t\t\t\t\tfields: 'id,department.name',\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(\n\t\t\t\tmap((res) => res.data.items),\n\t\t\t\tmap((infos) =>\n\t\t\t\t\tinfos.reduce<Record<number, string>>(\n\t\t\t\t\t\t(acc, info) => ({\n\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t[info.id]: info.department?.name || '',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\ttap((infos) => {\n\t\t\t\t\tthis.cache = {\n\t\t\t\t\t\t...this.cache,\n\t\t\t\t\t\t...infos,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t);\n\t}\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { ILuOptionContext, LU_OPTION_CONTEXT, ɵLuOptionOutletDirective } from '@lucca-front/ng/core-select';\nimport { LuUserDisplayPipe } from '@lucca-front/ng/user';\nimport { map } from 'rxjs';\nimport { LuCoreSelectUser, LuCoreSelectWithAdditionnalInformation } from './user-option.model';\nimport { LU_CORE_SELECT_USER_TRANSLATIONS } from './user.translate';\nimport { LuCoreSelectUsersDirective } from './users.directive';\n\n@Component({\n\tselector: 'lu-user-option',\n\timports: [AsyncPipe, LuUserDisplayPipe, ɵLuOptionOutletDirective],\n\ttemplate: `\n\t\t@if (context.option$ | async; as user) {\n\t\t\t@if (userDirective.displayMeOption() && user.id === userDirective.currentUserId && (hasEmptyClue$ | async)) {\n\t\t\t\t<div>\n\t\t\t\t\t<strong>{{ intl().me }}</strong\n\t\t\t\t\t>&ngsp;\n\t\t\t\t\t<strong translate=\"no\"><ng-container *luOptionOutlet=\"customUserOptionTpl() || defaultUserTpl; value: user\" /></strong>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<div *luOptionOutlet=\"customUserOptionTpl() || defaultUserTpl; value: user\"></div>\n\t\t\t}\n\t\t\t@if (user.additionalInformation) {\n\t\t\t\t<div class=\"option-additional\">{{ user.additionalInformation }}</div>\n\t\t\t}\n\t\t}\n\n\t\t<ng-template #defaultUserTpl let-user>\n\t\t\t<span translate=\"no\">{{ user | luUserDisplay: userDirective.displayFormat() }}</span>\n\t\t</ng-template>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuUserOptionComponent {\n\tprotected context = inject<ILuOptionContext<LuCoreSelectWithAdditionnalInformation<LuCoreSelectUser>>>(LU_OPTION_CONTEXT);\n\tprotected userDirective = inject(LuCoreSelectUsersDirective);\n\treadonly intl = input(...intlInputOptions(LU_CORE_SELECT_USER_TRANSLATIONS));\n\tprotected readonly hasEmptyClue$ = this.userDirective.select.clue$.pipe(map((clue) => !clue));\n\tprotected readonly customUserOptionTpl = this.userDirective.customUserOptionTpl;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Directive, Provider, TemplateRef, Type, computed, effect, forwardRef, inject, input, model, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { ILuApiCollectionResponse } from '@lucca-front/ng/api';\nimport { luBooleanAttribute, luNullableNumberAttribute, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider, LuOptionContext, applySearchDelimiter } from '@lucca-front/ng/core-select';\nimport { ALuCoreSelectApiDirective } from '@lucca-front/ng/core-select/api';\nimport { LuDisplayFormat, LuDisplayFullname } from '@lucca-front/ng/user';\nimport { Observable, catchError, combineLatest, debounceTime, map, of, shareReplay, switchMap, take, tap } from 'rxjs';\nimport { FORMER_EMPLOYEES_CONTEXT, LuCoreSelectFormerEmployeesComponent } from './former-employees.component';\nimport { LU_CORE_SELECT_CURRENT_USER_ID } from './me.provider';\nimport { LuUserDisplayerComponent } from './user-displayer.component';\nimport { LuCoreSelectUserHomonymsService } from './user-homonym.service';\nimport { LuUserOptionComponent } from './user-option.component';\nimport { LuCoreSelectUser, LuCoreSelectWithAdditionnalInformation } from './user-option.model';\n\nexport function provideCoreSelectUsersContext<T extends LuCoreSelectUser = LuCoreSelectUser>(directiveFn: () => Type<LuCoreSelectUsersDirective<T>>): Provider[] {\n\treturn [\n\t\t...provideBaseCoreSelectUsersContext(directiveFn),\n\t\t{\n\t\t\tprovide: LuCoreSelectUsersDirective,\n\t\t\tuseExisting: forwardRef(directiveFn),\n\t\t},\n\t];\n}\n\nfunction provideBaseCoreSelectUsersContext<T extends LuCoreSelectUser = LuCoreSelectUser>(directiveFn: () => Type<LuCoreSelectUsersDirective<T>>): Provider[] {\n\treturn [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(directiveFn),\n\t\t},\n\t\t{\n\t\t\tprovide: FORMER_EMPLOYEES_CONTEXT,\n\t\t\tuseExisting: forwardRef(directiveFn),\n\t\t},\n\t];\n}\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[users],lu-multi-select[users]',\n\texportAs: 'luUsers',\n\tproviders: [provideBaseCoreSelectUsersContext(() => LuCoreSelectUsersDirective)],\n})\nexport class LuCoreSelectUsersDirective<T extends LuCoreSelectUser = LuCoreSelectUser>\n\textends ALuCoreSelectApiDirective<LuCoreSelectWithAdditionnalInformation<T>>\n\timplements CoreSelectApiTotalCountProvider\n{\n\t#defaultSearchUrl = '/api/v3/users/search';\n\t#defaultScopedSearchUrl = '/api/v3/users/scopedsearch';\n\t#userHomonymsService = inject(LuCoreSelectUserHomonymsService);\n\n\t// Not overridable so it will ease employee API migration\n\t#userFields = 'id,firstName,lastName,picture.href';\n\n\tprotected httpClient = inject(HttpClient);\n\tpublic currentUserId = inject(LU_CORE_SELECT_CURRENT_USER_ID);\n\n\treadonly displayFormat = input<LuDisplayFormat>(LuDisplayFullname.lastfirst);\n\n\treadonly filters = input<Record<string, string | number | boolean>>({});\n\treadonly url = input<string | null>(null);\n\treadonly orderBy = input<string | null>(null);\n\treadonly operationIds = input<readonly number[] | null>(null);\n\treadonly uniqueOperationIds = input<readonly number[] | null>(null);\n\treadonly appInstanceId = input(null, { transform: luNullableNumberAttribute });\n\treadonly enableFormerEmployees = input(false, { transform: luBooleanAttribute });\n\treadonly displayMeOption = input(true, { transform: luBooleanAttribute });\n\treadonly customUserOptionTpl = model<TemplateRef<LuOptionContext<T>> | Type<unknown> | undefined>();\n\n\treadonly includeFormerEmployees = signal(false);\n\treadonly searchDelimiter = input<string>(' ');\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.select.optionTpl.set(LuUserOptionComponent);\n\t\tthis.select.valueTpl.set(LuUserDisplayerComponent);\n\n\t\teffect(() => {\n\t\t\tconst enableFormerEmployees = this.enableFormerEmployees();\n\t\t\tif (!enableFormerEmployees) {\n\t\t\t\tuntracked(() => this.select.panelHeaderTpl.set(undefined));\n\t\t\t} else {\n\t\t\t\tuntracked(() => this.select.panelHeaderTpl.set(LuCoreSelectFormerEmployeesComponent));\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected readonly defaultUrl = computed(() => (this.uniqueOperationIds()?.length || (this.appInstanceId() && this.operationIds()?.length) ? this.#defaultScopedSearchUrl : this.#defaultSearchUrl));\n\tprotected readonly urlOrDefault = computed(() => this.url() ?? this.defaultUrl());\n\n\tprotected readonly clue = toSignal(this.clue$);\n\n\tprotected override readonly paramsSignal = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst orderBy = this.orderBy();\n\t\tconst clue = this.clue();\n\t\tconst operationIds = this.operationIds();\n\t\tconst uniqueOperationIds = this.uniqueOperationIds();\n\t\tconst appInstanceId = this.appInstanceId();\n\t\tconst searchDelimiter = this.searchDelimiter();\n\t\tconst formerEmployees = this.includeFormerEmployees();\n\n\t\treturn {\n\t\t\tfields: this.#userFields,\n\t\t\t...this.filters(),\n\t\t\t...(orderBy ? { orderBy } : {}),\n\t\t\t...(clue ? { clue: applySearchDelimiter(clue, searchDelimiter) } : {}),\n\t\t\t...(operationIds ? { operations: operationIds.join(',') } : {}),\n\t\t\t...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),\n\t\t\t...(appInstanceId ? { appInstanceId } : {}),\n\t\t\t...(formerEmployees ? { formerEmployees } : {}),\n\t\t};\n\t});\n\tprotected override readonly params$: Observable<Record<string, string | number | boolean>> = toObservable(this.paramsSignal);\n\n\tprotected readonly meParams$ = toObservable(\n\t\tcomputed(() => {\n\t\t\tconst uniqueOperationIds = this.uniqueOperationIds();\n\t\t\tconst operationIds = this.operationIds();\n\t\t\tconst appInstanceId = this.appInstanceId();\n\n\t\t\treturn {\n\t\t\t\tfields: this.#userFields,\n\t\t\t\t// The \"me\" request is a lookup by id and must not carry the search `filters`:\n\t\t\t\t// they target the search API and aren't necessarily supported by the endpoint\n\t\t\t\t// resolving the current user (e.g. API v3), which would fail the request.\n\t\t\t\t...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),\n\t\t\t\t...(operationIds ? { operations: operationIds.join(',') } : {}),\n\t\t\t\t...(appInstanceId ? { appInstanceId } : {}),\n\t\t\t\tid: this.currentUserId,\n\t\t\t};\n\t\t}),\n\t);\n\n\tprotected readonly me$ = this.meParams$.pipe(\n\t\tswitchMap((params) =>\n\t\t\tthis.httpClient\n\t\t\t\t.get<\n\t\t\t\t\tILuApiCollectionResponse<{\n\t\t\t\t\t\titem: T;\n\t\t\t\t\t}>\n\t\t\t\t>(this.urlOrDefault(), { params })\n\t\t\t\t.pipe(\n\t\t\t\t\tmap((res) => res.data.items.map(({ item }) => item)[0] ?? null),\n\t\t\t\t\t// A failed \"me\" lookup must not block the options: getOptionsPage combines this\n\t\t\t\t\t// stream with the users search, an EMPTY here would leave the select loading forever\n\t\t\t\t\tcatchError(() => of(null)),\n\t\t\t\t),\n\t\t),\n\t\ttakeUntilDestroyed(),\n\t\tshareReplay(1),\n\t);\n\n\tpublic readonly totalCount$ = toObservable(computed(() => ({ url: this.urlOrDefault(), filters: this.filters() }))).pipe(\n\t\tdebounceTime(250),\n\t\tswitchMap(({ url, filters }) =>\n\t\t\tthis.httpClient.get<{ data: { count: number } } | { count: number }>(url, {\n\t\t\t\tparams: {\n\t\t\t\t\t...filters,\n\t\t\t\t\tfields: 'collection.count',\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t\tmap((res) => ('data' in res ? (res?.data.count ?? 0) : (res?.count ?? 0))),\n\t);\n\n\tprotected getMe(): Observable<T | null> {\n\t\treturn this.me$.pipe(take(1));\n\t}\n\n\tprotected getOptions(params: Record<string, string | number | boolean>, page: number): Observable<T[]> {\n\t\treturn this.httpClient\n\t\t\t.get<ILuApiCollectionResponse<{ item: T }>>(this.urlOrDefault(), {\n\t\t\t\tparams: {\n\t\t\t\t\t...params,\n\t\t\t\t\tpaging: `${page * this.pageSize},${this.pageSize}`,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(map((res) => res.data.items.map(({ item }) => item)));\n\t}\n\n\tprotected override getOptionsPage(\n\t\tparams: Record<string, string | number | boolean>,\n\t\tpage: number,\n\t): Observable<{\n\t\titems: LuCoreSelectWithAdditionnalInformation<T>[];\n\t\tisLastPage: boolean;\n\t}> {\n\t\tconst hasClue = !!params['clue'];\n\t\tconst displayMe = this.displayMeOption() && !hasClue;\n\t\tconst prependMe = displayMe && page === 0;\n\n\t\tthis.select.loading.set(true);\n\n\t\tconst me$ = prependMe ? this.getMe() : of(null);\n\n\t\tconst users$ = this.getOptions(params, page).pipe(map((users) => ({ items: users, isLastPage: users.length < this.pageSize })));\n\n\t\tconst page$ = combineLatest([me$, users$]).pipe(\n\t\t\tmap(([me, { items, isLastPage }]) => {\n\t\t\t\t// If \"me\" is displayed as first option, we remove it from the list of users\n\t\t\t\tconst filteredItems = displayMe ? items.filter((u) => u.id !== this.currentUserId) : items;\n\t\t\t\treturn { items: me && prependMe ? [me, ...filteredItems] : filteredItems, isLastPage };\n\t\t\t}),\n\t\t);\n\n\t\treturn page$.pipe(tap(() => this.select.loading.set(false)));\n\t}\n\n\t/**\n\t * Homonyms can only be detected by looking at every loaded option at once: two homonyms may\n\t * land on different pages (last option of a page, first of the next one), in which case a\n\t * page by page detection would find none. So we run it on the accumulated list instead.\n\t */\n\tprotected override transformOptions(options: readonly LuCoreSelectWithAdditionnalInformation<T>[]): Observable<readonly LuCoreSelectWithAdditionnalInformation<T>[]> {\n\t\treturn this.#userHomonymsService.handleHomonyms([...options], this.displayFormat());\n\t}\n\n\tprotected override optionKey = (option: T) => option.id;\n}\n\n@Directive({\n\tselector: '[luUserOption]',\n})\nexport class LuCoreSelectUserOptionDirective<T extends LuCoreSelectUser = LuCoreSelectUser> {\n\t#templateRef = inject(TemplateRef<LuOptionContext<T>>);\n\n\treadonly usersDirective = input<LuCoreSelectUsersDirective<T> | null>(null, { alias: 'luUserOptionUsersRef' });\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.usersDirective], (usersDirective) => {\n\t\t\tif (usersDirective) {\n\t\t\t\tusersDirective.customUserOptionTpl.set(this.#templateRef);\n\t\t\t}\n\t\t});\n\t}\n\tpublic static ngTemplateContextGuard<T extends LuCoreSelectUser>(_dir: LuCoreSelectUserOptionDirective<T>, _ctx: unknown): _ctx is { $implicit: T } {\n\t\treturn true;\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵCoreSelectPanelElement","ɵLuOptionOutletDirective","ɵeffectWithDeps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucca-front-ng-core-select-user.mjs","sources":["../../../packages/ng/core-select/user/me.provider.ts","../../../packages/ng/core-select/user/translations.ts","../../../packages/ng/core-select/user/user.translate.ts","../../../packages/ng/core-select/user/former-employees.component.ts","../../../packages/ng/core-select/user/user-displayer.component.ts","../../../packages/ng/core-select/user/user-homonym.service.ts","../../../packages/ng/core-select/user/user-option.component.ts","../../../packages/ng/core-select/user/users.directive.ts","../../../packages/ng/core-select/user/lucca-front-ng-core-select-user.ts"],"sourcesContent":["import { InjectionToken, Provider } from '@angular/core';\n\nexport const LU_CORE_SELECT_CURRENT_USER_ID = new InjectionToken<number>('LuCoreSelectCurrentUserId');\n\nexport function provideCoreSelectCurrentUserId(factory: () => number): Provider {\n\treturn {\n\t\tprovide: LU_CORE_SELECT_CURRENT_USER_ID,\n\t\tuseFactory: factory,\n\t};\n}\n","export const Translations = {\n\t'nl-BE': {\n\t\tme: 'Ik:',\n\t\tincludeFormerEmployees: 'Inclusief medewerkers die zijn vertrokken',\n\t},\n\tnl: {\n\t\tme: 'Ik:',\n\t\tincludeFormerEmployees: 'Inclusief medewerkers die zijn vertrokken',\n\t},\n\tit: {\n\t\tme: 'Io:',\n\t\tincludeFormerEmployees: 'Includere gli ex collaboratori',\n\t},\n\tfr: {\n\t\tme: 'Moi :',\n\t\tincludeFormerEmployees: 'Inclure les collaborateurs partis',\n\t},\n\tpt: {\n\t\tme: 'Eu:',\n\t\tincludeFormerEmployees: 'Incluir os trabalhadores que saíram',\n\t},\n\tes: {\n\t\tme: 'Yo:',\n\t\tincludeFormerEmployees: 'Incluir a los empleados inactivos',\n\t},\n\tde: {\n\t\tme: 'Ich:',\n\t\tincludeFormerEmployees: 'Ausgeschiedene Mitarbeitende einbeziehen',\n\t},\n\ten: {\n\t\tme: 'Me:',\n\t\tincludeFormerEmployees: 'Include former employees',\n\t},\n\tpl: {\n\t\tme: 'Ja:',\n\t\tincludeFormerEmployees: 'Uwzględnij byłych pracowników',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_CORE_SELECT_USER_TRANSLATIONS = new InjectionToken('LuCoreSelectUserTranslations', {\n\tfactory: () => luCoreSelectUserTranslations,\n});\n\nexport interface LuCoreSelectUserTranslations {\n\tme: string;\n\tincludeFormerEmployees: string;\n}\n\nexport const luCoreSelectUserTranslations: LuTranslation<LuCoreSelectUserTranslations> = Translations;\n","import { ChangeDetectionStrategy, Component, inject, InjectionToken, input, WritableSignal } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { ɵCoreSelectPanelElement } from '@lucca-front/ng/core-select';\nimport { LU_CORE_SELECT_USER_TRANSLATIONS } from './user.translate';\n\nexport interface FormerEmployeesContext {\n\tincludeFormerEmployees: WritableSignal<boolean>;\n}\n\nexport const FORMER_EMPLOYEES_CONTEXT = new InjectionToken<FormerEmployeesContext>('FormerEmployeesContext');\n\n@Component({\n\tselector: 'lu-core-select-former-employees',\n\tstyleUrl: './former-employees.component.scss',\n\timports: [FormsModule],\n\thostDirectives: [ɵCoreSelectPanelElement],\n\ttemplate: `\n\t\t<div class=\"formerEmployeeDisplayer optionItem\">\n\t\t\t<div class=\"optionItem-value\" [class.is-selected]=\"context.includeFormerEmployees()\" (mousedown)=\"onMouseDown($event)\">\n\t\t\t\t{{ intl().includeFormerEmployees }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuCoreSelectFormerEmployeesComponent {\n\treadonly intl = input(...intlInputOptions(LU_CORE_SELECT_USER_TRANSLATIONS));\n\treadonly context = inject(FORMER_EMPLOYEES_CONTEXT);\n\treadonly #selectableItem = inject(ɵCoreSelectPanelElement);\n\n\tconstructor() {\n\t\tthis.#selectableItem.id.set('select-former-employees');\n\t\toutputToObservable(this.#selectableItem.selected)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.context.includeFormerEmployees.set(!this.context.includeFormerEmployees());\n\t\t\t});\n\t}\n\n\tonMouseDown($event: MouseEvent): void {\n\t\tthis.context.includeFormerEmployees.set(!this.context.includeFormerEmployees());\n\t\t$event.preventDefault();\n\t\t$event.stopPropagation();\n\t}\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ILuOptionContext, LU_OPTION_CONTEXT } from '@lucca-front/ng/core-select';\nimport { LuUserDisplayPipe } from '@lucca-front/ng/user';\nimport { LuCoreSelectUser } from './user-option.model';\nimport { LuCoreSelectUsersDirective } from './users.directive';\n\n@Component({\n\tselector: 'lu-user-displayer',\n\timports: [AsyncPipe, LuUserDisplayPipe],\n\ttemplate: `\n\t\t@if (context.option$ | async; as user) {\n\t\t\t<span translate=\"no\">{{ user | luUserDisplay: userDirective.displayFormat() }}</span>\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuUserDisplayerComponent {\n\tprotected context = inject<ILuOptionContext<LuCoreSelectUser>>(LU_OPTION_CONTEXT);\n\tprotected userDirective = inject(LuCoreSelectUsersDirective);\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { ILuApiCollectionResponse } from '@lucca-front/ng/api';\nimport { LuDisplayFormat, luUserDisplay } from '@lucca-front/ng/user';\nimport { Observable, map, of, startWith, tap } from 'rxjs';\nimport { LuCoreSelectUser } from './user-option.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LuCoreSelectUserHomonymsService {\n\tprotected http = inject(HttpClient);\n\tprotected cache: Record<number, string> = {};\n\n\tprotected extractHomonyms<T extends LuCoreSelectUser>(users: T[], format: LuDisplayFormat): Set<T['id']> {\n\t\tconst usersByFullName: Record<string, T[]> = {};\n\n\t\tfor (const user of users) {\n\t\t\tconst name = luUserDisplay(user, format);\n\t\t\tusersByFullName[name] ||= [];\n\t\t\tusersByFullName[name].push(user);\n\t\t}\n\n\t\treturn new Set(\n\t\t\tObject.values(usersByFullName)\n\t\t\t\t.filter((users) => users.length > 1)\n\t\t\t\t.flatMap((users) => users.map((user) => user.id)),\n\t\t);\n\t}\n\n\tpublic handleHomonyms<T extends LuCoreSelectUser>(users: T[], format: LuDisplayFormat): Observable<T[]> {\n\t\tconst homonyms = this.extractHomonyms(users, format);\n\n\t\tif (homonyms.size === 0) {\n\t\t\treturn of(users);\n\t\t}\n\n\t\treturn this.getAdditionalInformationByUserId(Array.from(homonyms)).pipe(\n\t\t\tmap((additionalInformation) =>\n\t\t\t\tusers.map((user) =>\n\t\t\t\t\thomonyms.has(user.id)\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...user,\n\t\t\t\t\t\t\t\tadditionalInformation: this.cache[user.id] || additionalInformation[user.id],\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: user,\n\t\t\t\t),\n\t\t\t),\n\t\t\tstartWith(users),\n\t\t);\n\t}\n\n\tprotected getAdditionalInformationByUserId<T extends LuCoreSelectUser>(homonyms: T['id'][]): Observable<Record<number, string>> {\n\t\tconst userIds = homonyms.filter((userId) => !this.cache[userId]);\n\n\t\tif (userIds.length === 0) {\n\t\t\treturn of({});\n\t\t}\n\n\t\treturn this.http\n\t\t\t.get<ILuApiCollectionResponse<{ id: number; department?: { name: string } }>>(`/api/v3/users`, {\n\t\t\t\tparams: {\n\t\t\t\t\tid: userIds.join(','),\n\t\t\t\t\tfields: 'id,department.name',\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(\n\t\t\t\tmap((res) => res.data.items),\n\t\t\t\tmap((infos) =>\n\t\t\t\t\tinfos.reduce<Record<number, string>>(\n\t\t\t\t\t\t(acc, info) => ({\n\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t[info.id]: info.department?.name || '',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\ttap((infos) => {\n\t\t\t\t\tthis.cache = {\n\t\t\t\t\t\t...this.cache,\n\t\t\t\t\t\t...infos,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t);\n\t}\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { ILuOptionContext, LU_OPTION_CONTEXT, ɵLuOptionOutletDirective } from '@lucca-front/ng/core-select';\nimport { LuUserDisplayPipe } from '@lucca-front/ng/user';\nimport { map, startWith } from 'rxjs';\nimport { LuCoreSelectUser, LuCoreSelectWithAdditionnalInformation } from './user-option.model';\nimport { LU_CORE_SELECT_USER_TRANSLATIONS } from './user.translate';\nimport { LuCoreSelectUsersDirective } from './users.directive';\n\n@Component({\n\tselector: 'lu-user-option',\n\timports: [AsyncPipe, LuUserDisplayPipe, ɵLuOptionOutletDirective],\n\ttemplate: `\n\t\t@if (context.option$ | async; as user) {\n\t\t\t@if (userDirective.displayMeOption() && user.id === userDirective.currentUserId && (hasEmptyClue$ | async)) {\n\t\t\t\t<div>\n\t\t\t\t\t<strong>{{ intl().me }}</strong\n\t\t\t\t\t>&ngsp;\n\t\t\t\t\t<strong translate=\"no\"><ng-container *luOptionOutlet=\"customUserOptionTpl() || defaultUserTpl; value: user\" /></strong>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<div *luOptionOutlet=\"customUserOptionTpl() || defaultUserTpl; value: user\"></div>\n\t\t\t}\n\t\t\t@if (user.additionalInformation) {\n\t\t\t\t<div class=\"option-additional\">{{ user.additionalInformation }}</div>\n\t\t\t}\n\t\t}\n\n\t\t<ng-template #defaultUserTpl let-user>\n\t\t\t<span translate=\"no\">{{ user | luUserDisplay: userDirective.displayFormat() }}</span>\n\t\t</ng-template>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuUserOptionComponent {\n\tprotected context = inject<ILuOptionContext<LuCoreSelectWithAdditionnalInformation<LuCoreSelectUser>>>(LU_OPTION_CONTEXT);\n\tprotected userDirective = inject(LuCoreSelectUsersDirective);\n\treadonly intl = input(...intlInputOptions(LU_CORE_SELECT_USER_TRANSLATIONS));\n\tprotected readonly hasEmptyClue$ = this.userDirective.select.clueChange$.pipe(\n\t\tstartWith(this.userDirective.select.clue),\n\t\tmap((clue) => !clue),\n\t);\n\tprotected readonly customUserOptionTpl = this.userDirective.customUserOptionTpl;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Directive, Provider, TemplateRef, Type, computed, effect, forwardRef, inject, input, model, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { ILuApiCollectionResponse } from '@lucca-front/ng/api';\nimport { luBooleanAttribute, luNullableNumberAttribute, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectApiTotalCountProvider, LuOptionContext, applySearchDelimiter } from '@lucca-front/ng/core-select';\nimport { ALuCoreSelectApiDirective } from '@lucca-front/ng/core-select/api';\nimport { LuDisplayFormat, LuDisplayFullname } from '@lucca-front/ng/user';\nimport { Observable, catchError, combineLatest, debounceTime, map, of, shareReplay, switchMap, take, tap } from 'rxjs';\nimport { FORMER_EMPLOYEES_CONTEXT, LuCoreSelectFormerEmployeesComponent } from './former-employees.component';\nimport { LU_CORE_SELECT_CURRENT_USER_ID } from './me.provider';\nimport { LuUserDisplayerComponent } from './user-displayer.component';\nimport { LuCoreSelectUserHomonymsService } from './user-homonym.service';\nimport { LuUserOptionComponent } from './user-option.component';\nimport { LuCoreSelectUser, LuCoreSelectWithAdditionnalInformation } from './user-option.model';\n\nexport function provideCoreSelectUsersContext<T extends LuCoreSelectUser = LuCoreSelectUser>(directiveFn: () => Type<LuCoreSelectUsersDirective<T>>): Provider[] {\n\treturn [\n\t\t...provideBaseCoreSelectUsersContext(directiveFn),\n\t\t{\n\t\t\tprovide: LuCoreSelectUsersDirective,\n\t\t\tuseExisting: forwardRef(directiveFn),\n\t\t},\n\t];\n}\n\nfunction provideBaseCoreSelectUsersContext<T extends LuCoreSelectUser = LuCoreSelectUser>(directiveFn: () => Type<LuCoreSelectUsersDirective<T>>): Provider[] {\n\treturn [\n\t\t{\n\t\t\tprovide: CORE_SELECT_API_TOTAL_COUNT_PROVIDER,\n\t\t\tuseExisting: forwardRef(directiveFn),\n\t\t},\n\t\t{\n\t\t\tprovide: FORMER_EMPLOYEES_CONTEXT,\n\t\t\tuseExisting: forwardRef(directiveFn),\n\t\t},\n\t];\n}\n\n@Directive({\n\t// The attribute is already prefixed with \"lu-simple-select\"\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: 'lu-simple-select[users],lu-multi-select[users]',\n\texportAs: 'luUsers',\n\tproviders: [provideBaseCoreSelectUsersContext(() => LuCoreSelectUsersDirective)],\n})\nexport class LuCoreSelectUsersDirective<T extends LuCoreSelectUser = LuCoreSelectUser>\n\textends ALuCoreSelectApiDirective<LuCoreSelectWithAdditionnalInformation<T>>\n\timplements CoreSelectApiTotalCountProvider\n{\n\t#defaultSearchUrl = '/api/v3/users/search';\n\t#defaultScopedSearchUrl = '/api/v3/users/scopedsearch';\n\t#userHomonymsService = inject(LuCoreSelectUserHomonymsService);\n\n\t// Not overridable so it will ease employee API migration\n\t#userFields = 'id,firstName,lastName,picture.href';\n\n\tprotected httpClient = inject(HttpClient);\n\tpublic currentUserId = inject(LU_CORE_SELECT_CURRENT_USER_ID);\n\n\treadonly displayFormat = input<LuDisplayFormat>(LuDisplayFullname.lastfirst);\n\n\treadonly filters = input<Record<string, string | number | boolean>>({});\n\treadonly url = input<string | null>(null);\n\treadonly orderBy = input<string | null>(null);\n\treadonly operationIds = input<readonly number[] | null>(null);\n\treadonly uniqueOperationIds = input<readonly number[] | null>(null);\n\treadonly appInstanceId = input(null, { transform: luNullableNumberAttribute });\n\treadonly enableFormerEmployees = input(false, { transform: luBooleanAttribute });\n\treadonly displayMeOption = input(true, { transform: luBooleanAttribute });\n\treadonly customUserOptionTpl = model<TemplateRef<LuOptionContext<T>> | Type<unknown> | undefined>();\n\n\treadonly includeFormerEmployees = signal(false);\n\treadonly searchDelimiter = input<string>(' ');\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.select.optionTpl.set(LuUserOptionComponent);\n\t\tthis.select.valueTpl.set(LuUserDisplayerComponent);\n\n\t\teffect(() => {\n\t\t\tconst enableFormerEmployees = this.enableFormerEmployees();\n\t\t\tif (!enableFormerEmployees) {\n\t\t\t\tuntracked(() => this.select.panelHeaderTpl.set(undefined));\n\t\t\t} else {\n\t\t\t\tuntracked(() => this.select.panelHeaderTpl.set(LuCoreSelectFormerEmployeesComponent));\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected readonly defaultUrl = computed(() => (this.uniqueOperationIds()?.length || (this.appInstanceId() && this.operationIds()?.length) ? this.#defaultScopedSearchUrl : this.#defaultSearchUrl));\n\tprotected readonly urlOrDefault = computed(() => this.url() ?? this.defaultUrl());\n\n\tprotected readonly clue = toSignal(this.clue$);\n\n\tprotected override readonly paramsSignal = computed<Record<string, string | number | boolean>>(() => {\n\t\tconst orderBy = this.orderBy();\n\t\tconst clue = this.clue();\n\t\tconst operationIds = this.operationIds();\n\t\tconst uniqueOperationIds = this.uniqueOperationIds();\n\t\tconst appInstanceId = this.appInstanceId();\n\t\tconst searchDelimiter = this.searchDelimiter();\n\t\tconst formerEmployees = this.includeFormerEmployees();\n\n\t\treturn {\n\t\t\tfields: this.#userFields,\n\t\t\t...this.filters(),\n\t\t\t...(orderBy ? { orderBy } : {}),\n\t\t\t...(clue ? { clue: applySearchDelimiter(clue, searchDelimiter) } : {}),\n\t\t\t...(operationIds ? { operations: operationIds.join(',') } : {}),\n\t\t\t...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),\n\t\t\t...(appInstanceId ? { appInstanceId } : {}),\n\t\t\t...(formerEmployees ? { formerEmployees } : {}),\n\t\t};\n\t});\n\tprotected override readonly params$: Observable<Record<string, string | number | boolean>> = toObservable(this.paramsSignal);\n\n\tprotected readonly meParams$ = toObservable(\n\t\tcomputed(() => {\n\t\t\tconst uniqueOperationIds = this.uniqueOperationIds();\n\t\t\tconst operationIds = this.operationIds();\n\t\t\tconst appInstanceId = this.appInstanceId();\n\n\t\t\treturn {\n\t\t\t\tfields: this.#userFields,\n\t\t\t\t// The \"me\" request is a lookup by id and must not carry the search `filters`:\n\t\t\t\t// they target the search API and aren't necessarily supported by the endpoint\n\t\t\t\t// resolving the current user (e.g. API v3), which would fail the request.\n\t\t\t\t...(uniqueOperationIds ? { uniqueOperations: uniqueOperationIds.join(',') } : {}),\n\t\t\t\t...(operationIds ? { operations: operationIds.join(',') } : {}),\n\t\t\t\t...(appInstanceId ? { appInstanceId } : {}),\n\t\t\t\tid: this.currentUserId,\n\t\t\t};\n\t\t}),\n\t);\n\n\tprotected readonly me$ = this.meParams$.pipe(\n\t\tswitchMap((params) =>\n\t\t\tthis.httpClient\n\t\t\t\t.get<\n\t\t\t\t\tILuApiCollectionResponse<{\n\t\t\t\t\t\titem: T;\n\t\t\t\t\t}>\n\t\t\t\t>(this.urlOrDefault(), { params })\n\t\t\t\t.pipe(\n\t\t\t\t\tmap((res) => res.data.items.map(({ item }) => item)[0] ?? null),\n\t\t\t\t\t// A failed \"me\" lookup must not block the options: getOptionsPage combines this\n\t\t\t\t\t// stream with the users search, an EMPTY here would leave the select loading forever\n\t\t\t\t\tcatchError(() => of(null)),\n\t\t\t\t),\n\t\t),\n\t\ttakeUntilDestroyed(),\n\t\tshareReplay(1),\n\t);\n\n\tpublic readonly totalCount$ = toObservable(computed(() => ({ url: this.urlOrDefault(), filters: this.filters() }))).pipe(\n\t\tdebounceTime(250),\n\t\tswitchMap(({ url, filters }) =>\n\t\t\tthis.httpClient.get<{ data: { count: number } } | { count: number }>(url, {\n\t\t\t\tparams: {\n\t\t\t\t\t...filters,\n\t\t\t\t\tfields: 'collection.count',\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t\tmap((res) => ('data' in res ? (res?.data.count ?? 0) : (res?.count ?? 0))),\n\t);\n\n\tprotected getMe(): Observable<T | null> {\n\t\treturn this.me$.pipe(take(1));\n\t}\n\n\tprotected getOptions(params: Record<string, string | number | boolean>, page: number): Observable<T[]> {\n\t\treturn this.httpClient\n\t\t\t.get<ILuApiCollectionResponse<{ item: T }>>(this.urlOrDefault(), {\n\t\t\t\tparams: {\n\t\t\t\t\t...params,\n\t\t\t\t\tpaging: `${page * this.pageSize},${this.pageSize}`,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(map((res) => res.data.items.map(({ item }) => item)));\n\t}\n\n\tprotected override getOptionsPage(\n\t\tparams: Record<string, string | number | boolean>,\n\t\tpage: number,\n\t): Observable<{\n\t\titems: LuCoreSelectWithAdditionnalInformation<T>[];\n\t\tisLastPage: boolean;\n\t}> {\n\t\tconst hasClue = !!params['clue'];\n\t\tconst displayMe = this.displayMeOption() && !hasClue;\n\t\tconst prependMe = displayMe && page === 0;\n\n\t\tthis.select.loading.set(true);\n\n\t\tconst me$ = prependMe ? this.getMe() : of(null);\n\n\t\tconst users$ = this.getOptions(params, page).pipe(map((users) => ({ items: users, isLastPage: users.length < this.pageSize })));\n\n\t\tconst page$ = combineLatest([me$, users$]).pipe(\n\t\t\tmap(([me, { items, isLastPage }]) => {\n\t\t\t\t// If \"me\" is displayed as first option, we remove it from the list of users\n\t\t\t\tconst filteredItems = displayMe ? items.filter((u) => u.id !== this.currentUserId) : items;\n\t\t\t\treturn { items: me && prependMe ? [me, ...filteredItems] : filteredItems, isLastPage };\n\t\t\t}),\n\t\t);\n\n\t\treturn page$.pipe(\n\t\t\tswitchMap((page) =>\n\t\t\t\tthis.#userHomonymsService.handleHomonyms(page.items, this.displayFormat()).pipe(\n\t\t\t\t\tmap((items) => ({\n\t\t\t\t\t\titems,\n\t\t\t\t\t\tisLastPage: page.isLastPage,\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t),\n\t\t\ttap(() => this.select.loading.set(false)),\n\t\t);\n\t}\n\n\tprotected override optionKey = (option: T) => option.id;\n}\n\n@Directive({\n\tselector: '[luUserOption]',\n})\nexport class LuCoreSelectUserOptionDirective<T extends LuCoreSelectUser = LuCoreSelectUser> {\n\t#templateRef = inject(TemplateRef<LuOptionContext<T>>);\n\n\treadonly usersDirective = input<LuCoreSelectUsersDirective<T> | null>(null, { alias: 'luUserOptionUsersRef' });\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.usersDirective], (usersDirective) => {\n\t\t\tif (usersDirective) {\n\t\t\t\tusersDirective.customUserOptionTpl.set(this.#templateRef);\n\t\t\t}\n\t\t});\n\t}\n\tpublic static ngTemplateContextGuard<T extends LuCoreSelectUser>(_dir: LuCoreSelectUserOptionDirective<T>, _ctx: unknown): _ctx is { $implicit: T } {\n\t\treturn true;\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵCoreSelectPanelElement","ɵLuOptionOutletDirective","ɵeffectWithDeps"],"mappings":"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"}
|