@arsedizioni/ars-utils 22.5.15 → 22.5.17
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/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +82 -23
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +47 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +115 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +77 -22
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +116 -49
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +34 -13
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +149 -48
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +58 -44
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.common.d.ts +42 -10
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +32 -0
- package/types/arsedizioni-ars-utils-core.validators.d.ts +52 -1
- package/types/arsedizioni-ars-utils-evolution.common.d.ts +39 -11
- package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +37 -9
- package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +29 -21
- package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +56 -7
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +13 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.select.mjs","sources":["../../../projects/ars-utils/ui.dialogs.select/select/select-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/select/select-dialog.component.html","../../../projects/ars-utils/ui.dialogs.select/select-tree/select-tree-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/select-tree/select-tree-dialog.component.html","../../../projects/ars-utils/ui.dialogs.select/send-to/send-to-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/send-to/send-to-dialog.component.html","../../../projects/ars-utils/ui.dialogs.select/public_api.ts","../../../projects/ars-utils/ui.dialogs.select/arsedizioni-ars-utils-ui.dialogs.select.ts"],"sourcesContent":["import {\n afterNextRender, ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n output,\n signal,\n viewChild\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxChange, MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatOptionModule } from \"@angular/material/core\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatListModule, MatSelectionList, MatSelectionListChange } from \"@angular/material/list\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SafeHtmlPipe, SearchFilterMetadata, SearchFilterPipe } from '@arsedizioni/ars-utils/core';\nimport {\n SelectDialogAppend,\n SelectDialogData,\n SelectDialogDelete,\n SelectDialogEdit,\n SelectDialogFilter,\n SelectDialogLookup,\n SelectDialogResult,\n SelectableFilter,\n SelectableItem,\n} from \"@arsedizioni/ars-utils/ui\";\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\n\n@Component({\n templateUrl: \"./select-dialog.component.html\",\n styleUrl: './select-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatSelectModule,\n MatOptionModule,\n MatTooltipModule,\n MatMenuModule,\n MatDividerModule,\n MatCheckboxModule,\n MatDialogContent,\n MatListModule,\n MatDialogActions,\n MatDialogClose,\n MatPaginatorModule,\n SearchFilterPipe,\n SafeHtmlPipe\n ],\n})\nexport class SelectDialogComponent {\n readonly paginator = viewChild.required<MatPaginator>('paginator');\n readonly selection = viewChild.required<MatSelectionList>(\"selection\");\n private isViewReady = false;\n private readonly dialogRef = inject(MatDialogRef<SelectDialogComponent>);\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly dialogData = signal<SelectDialogData>((() => {\n const data: SelectDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'outline',\n title: data.title ?? 'Seleziona',\n okCaption: data.okCaption ?? 'Ok',\n multipleSelection: data.multipleSelection ?? false,\n items: data.canLookup ? [] : (data.items ?? []),\n pageSize: data.canLookup && data.canPaginate && !data.pageSize ? 100 : data.pageSize,\n };\n })());\n readonly done = output<SelectDialogResult>();\n readonly edit = output<SelectDialogEdit>();\n readonly view = output<SelectableItem>();\n readonly append = output<SelectDialogAppend>();\n readonly delete = output<SelectDialogDelete>();\n readonly lookup = output<SelectDialogLookup>();\n readonly lookupOptions = output();\n readonly filter = output<SelectDialogFilter>();\n protected canEdit = signal<boolean>(false);\n protected canView = signal<boolean>(false);\n protected canAppend = signal<boolean>(this.dialogData().canAppend ?? false);\n protected canDelete = signal<boolean>(false);\n protected canPaginate = signal<boolean>(this.dialogData().canPaginate ?? false);\n // Handle submit button activity\n protected okDisabled = signal<boolean>(this.dialogData().mustSelect ?? true);\n // Used for array filtering\n protected filterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\n protected filterText: string = \"\";\n protected readonly filterOptions = signal<SelectableFilter[]>([]);\n protected filterOptionsInfo = signal<string>(\"Tutto\");\n // Used to sincronize lookup fields and params\n protected lookupField: string = \"\";\n private lookupParams?: any;\n // Used to display selected elements\n protected selectionInfo = signal<string | null>(null);\n protected selectionMasterIndeterminate = signal<boolean>(false);\n protected selectionMasterChecked = signal<boolean>(false);\n protected total = signal(this.dialogData().items?.length ?? 0);\n\n constructor() {\n const d = this.dialogData();\n if (d.canLookup) {\n if (d.lookupFields?.length) {\n this.lookupField = d.lookupFields[0].value;\n }\n if (d.canFilter) {\n this.filterOptions.set(d.filters ?? []);\n }\n }\n\n afterNextRender(() => {\n this.isViewReady = true;\n const selectedOption = this.filterOptions().find(x => x.checked);\n if (selectedOption) {\n this.applyFilterByOptions(selectedOption);\n }\n if (d.lookupOnInit) {\n this.applyFilter();\n }\n\n });\n }\n\n\n /**\n * Updates the total item count signal, triggering UI refresh.\n * @param newTotal - The new total count; defaults to 0 if omitted.\n */\n notifyChanges(newTotal?: number): void {\n this.total.set(newTotal ?? 0);\n this.cdr.markForCheck();\n }\n\n\n\n /** Returns `true` when every list item is currently selected. */\n private isAllSelected(): boolean {\n return this.selection().selectedOptions.selected.length === this.dialogData().items.length;\n }\n\n /** Returns `true` when at least one list item is selected. */\n private hasSelection(): boolean {\n return this.selection().selectedOptions.selected.length > 0;\n }\n\n /**\n * Selects or deselects all items based on the master checkbox state.\n * @param e - The checkbox change event.\n */\n protected masterSelectionToggle(e: MatCheckboxChange): void {\n if (e.checked)\n // Deselect if not allselected so that toggle makes the right choice\n this.selection().selectAll();\n else this.selection().deselectAll();\n this.selectionMasterIndeterminate.set(false);\n this.selectionMasterChecked.set(e.checked);\n const selection = this.selection();\n this.okDisabled.set(\n !!(this.dialogData().mustSelect &&\n selection.selectedOptions.selected.length === 0));\n this.updateSelectionInfo();\n }\n\n /**\n * Handles selection or deselection of a list item.\n * @param e - The selection list change event.\n */\n protected select(e: MatSelectionListChange): void {\n const selection = this.selection();\n if (!this.dialogData().multipleSelection) {\n this.selection().deselectAll();\n if (e.options?.length > 0)\n e.options[0].selected = true;\n this.okDisabled.set(false);\n } else {\n this.okDisabled.set(\n !!(this.dialogData().mustSelect &&\n selection.selectedOptions.selected.length === 0));\n }\n\n // Update editors\n this.canEdit.set(\n !!(this.dialogData().canEdit &&\n selection.selectedOptions.selected.length === 1));\n this.canView.set(\n !!(this.dialogData().canView &&\n selection.selectedOptions.selected.length === 1));\n this.canDelete.set(\n !!(this.dialogData().canDelete &&\n selection.selectedOptions.selected.length > 0));\n this.selectionMasterIndeterminate.set(\n !this.isAllSelected() && this.hasSelection());\n this.selectionMasterChecked.set(this.hasSelection());\n this.updateSelectionInfo();\n }\n\n /** Refreshes the selection info label shown in the dialog footer. */\n private updateSelectionInfo(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected.length > 0 && this.dialogData().multipleSelection) {\n this.selectionInfo.set(\n selection.selectedOptions.selected.length +\n \" / \" +\n selection.options.length);\n } else {\n this.selectionInfo.set(null);\n }\n }\n\n /** Deselects all items and resets the master checkbox state. */\n clearSelection(): void {\n this.selectionMasterIndeterminate.set(false);\n this.selectionMasterChecked.set(false);\n if (this.isViewReady) {\n this.selection().deselectAll();\n }\n this.selectionInfo.set(null);\n }\n\n /** Emits the current selection and closes the dialog. */\n protected ok(): void {\n if (!this.okDisabled()) {\n const selectedItems: SelectableItem[] = [];\n this.selection().selectedOptions.selected.forEach((element) => {\n selectedItems.push(element.value);\n });\n this.done.emit({ selectedItems: selectedItems });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n }\n\n /** Clears the current filter text input. */\n protected clearFilter(): void {\n this.filterText = \"\";\n }\n\n /**\n * Sets the filter text programmatically.\n * @param text - The new filter string to apply.\n */\n public setFilter(text: string): void {\n this.filterText = text;\n this.cdr.markForCheck();\n }\n\n\n /**\n * Returns the current filter text.\n * @returns The active filter string.\n */\n public getFilter(): string {\n return this.filterText;\n }\n\n /** Emits the `lookupOptions` output event to open the filter options panel. */\n protected showFilterOptions(): void {\n if (this.lookupOptions) {\n this.lookupOptions.emit();\n }\n }\n\n /**\n * Applies the given text filter, emitting a lookup when enabled.\n * @param text - Optional filter string; populates `filterText` when provided.\n * @param e - Optional keyboard event; lookup only fires on Enter.\n */\n protected doFilter(text?: string, e?: KeyboardEvent): void {\n if (text) {\n this.filterText = text;\n }\n if (this.dialogData().canLookup) {\n if (!e || e.key === 'Enter') {\n this.applyFilter();\n }\n }\n }\n\n /**\n * Applies the current filter text, emitting a lookup event.\n */\n private applyFilter() {\n this.clearSelection();\n this.lookup.emit({ items: this.dialogData().items, filter: this.filterText, owner: this });\n }\n\n /**\n * Applies a structured filter option, emitting the filter output event.\n * @param filterOption - The selected filter option object.\n */\n private applyFilterByOptions(filterOption: any): void {\n if (this.dialogData().canLookup && this.dialogData().canFilter) {\n this.filter.emit({\n items: this.dialogData().items,\n filter: this.filterText,\n filterOption: filterOption,\n owner: this,\n });\n this.filterOptionsInfo.set(filterOption ? (filterOption.title ?? \"Tutto\") : \"Tutto\");\n }\n }\n\n /**\n * Applies a structured filter option, emitting the filter output event.\n * @param filterOption - The selected filter option object.\n * @param apply - Optional flag to immediately apply the filter.\n */\n protected doFilterByOptions(filterOption: any, apply?: boolean): void {\n this.applyFilterByOptions(filterOption);\n if (apply) {\n setTimeout(() => {\n this.doFilter();\n }, 250);\n }\n }\n\n /**\n * Triggers a server-side lookup with the given parameters (public API).\n * @param params - An object containing the lookup query parameters.\n */\n doLookup(params: any): void {\n if (this.dialogData().canLookup) {\n this.clearSelection();\n this.lookupParams = params;\n this.lookupParams.first = 0;\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });\n }\n }\n\n /**\n * Updates the paginator length and resets it to the first page.\n * @param total - The new total number of items.\n */\n protected updateLookupPaginator(total: number): void {\n if (this.canPaginate()) {\n const paginator = this.paginator();\n if (paginator) {\n paginator.pageIndex = 0;\n paginator.length = total ?? 0;\n }\n }\n }\n\n /**\n * Handles a paginator page change and triggers a new lookup.\n * @param e - The paginator page change event.\n */\n protected doLookupPage(e: PageEvent): void {\n if (this.canPaginate() && this.dialogData().canLookup) {\n this.clearSelection();\n if (!this.lookupParams) {\n this.lookupParams = { first: 0, count: this.dialogData().pageSize ?? 0 };\n }\n this.lookupParams.first = e.pageIndex * (this.dialogData().pageSize ?? 0);\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });\n }\n }\n\n /** Emits the `append` output event to open the add-item flow. */\n protected doAppend(): void {\n this.append.emit({ items: this.dialogData().items, owner: this } as SelectDialogAppend);\n }\n\n /** Emits the `edit` output event for the currently selected item. */\n protected doEdit(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected?.length > 0) {\n this.edit.emit({\n item: selection.selectedOptions.selected[0].value,\n items: this.dialogData().items,\n owner: this\n } as SelectDialogEdit);\n }\n }\n\n /** Emits the `view` output event for the currently selected item. */\n protected doView(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected?.length > 0) {\n this.view.emit(selection.selectedOptions.selected[0].value);\n }\n }\n\n /** Emits the `delete` output event with all currently selected items. */\n protected doDelete(): void {\n const selectedItems: SelectableItem[] = [];\n this.selection().selectedOptions.selected.forEach((element) => {\n selectedItems.push(element.value);\n });\n this.delete.emit({\n items: this.dialogData().items,\n selectedItems: selectedItems,\n } as SelectDialogDelete);\n this.canDelete.set(false);\n this.canEdit.set(false);\n\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData().description) {\r\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n }\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n @if (!dialogData().canLookupWithOptions) {\r\n <div fxFlex>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\r\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\r\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (dialogData().canLookupWithInlineOptions) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\r\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\r\n <mat-icon>tune</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\r\n <div fxFlex fxHide.lt-md>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData().lookupFields; track $index) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData().canLookupWithOptions) {\r\n <div fxFlex fxHide.lt-md>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData().canLookup && dialogData().canFilter) {\r\n <div fxFlex fxHide.lt-md>\r\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" >\r\n <div><mat-icon>filter_alt</mat-icon></div>\r\n <div>{{filterOptionsInfo()}}</div>\r\n <div><mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon></div>\r\n </div>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions(); track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" >\r\n <div fxFlex fxHide.lt-md>\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex fxHide.gt-sm>\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\r\n [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\r\n @if (canAppend()) {\r\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\r\n <mat-icon>add</mat-icon> Aggiungi\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\r\n <mat-icon>edit</mat-icon> Modifica\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\r\n <mat-icon>visibility</mat-icon> Mostra\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\r\n <mat-icon>delete</mat-icon> Elimina\r\n </button>\r\n }\r\n </mat-menu>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\r\n <div>\r\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\r\n @if (dialogData().multipleSelection) {\r\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData().header) {\r\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<mat-dialog-content style=\"padding-top:0\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\r\n <div class=\"text message\"><i>\r\n @if (!dialogData().emptyMessage) {\r\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData().maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\r\n [multiple]=\"dialogData().multipleSelection\">\r\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText : ''): filterMetadata); track\r\n $index) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"secondary\" style=\"padding-left:20px\">\r\n @if (selectionInfo()) {\r\n <span class=\"bold\">{{selectionInfo()}}</span> <span class=\"small\"> elementi selezionati</span>\r\n } @else {\r\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText ? filterMetadata.count : total())) ??\r\n 0}}</span> <span class=\"small\"> elementi</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate()) {\r\n <mat-paginator class=\"x-small\" #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\r\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\r\n </button>\r\n @if (dialogData().mustSelect) {\r\n <button mat-stroked-button mat-dialog-close>\r\n <span>Annulla</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injectable,\n OnDestroy,\n computed,\n inject,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { INode, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ItemNode, SelectTreeDialogData, SelectTreeDialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n@Injectable()\nexport class TreeDataSource implements OnDestroy {\n private readonly _dataChange = new BehaviorSubject<ItemNode[]>([]);\n readonly dataChange$ = this._dataChange.asObservable();\n\n get data(): ItemNode[] {\n return this._dataChange.value;\n }\n\n ngOnDestroy(): void {\n this._dataChange.complete();\n }\n\n initialize(data: ItemNode[]): void {\n this._dataChange.next(data);\n }\n\n /**\n * Find a node by id recursively.\n * @param node - The source node to search from, or null to search from root.\n * @param id - The id to search for.\n * @returns The matching node, or undefined if not found.\n */\n findNode(node: ItemNode | null, id: string): ItemNode | undefined {\n if (node) {\n if (node.id === id) return node;\n const children = node.children;\n if (children) {\n let _n: ItemNode | undefined;\n children.some(n => {\n _n = this.findNode(n as ItemNode, id);\n return !!_n;\n });\n return _n;\n }\n return undefined;\n }\n // Search all root nodes when called with null\n for (const root of this.data) {\n const found = this.findNode(root, id);\n if (found) return found;\n }\n return undefined;\n }\n /**\n * Remove a node from the tree.\n * @param id - The id of the node to remove.\n */\n removeNode(id: string): void {\n let n = this.findNode(null, id);\n if (!n) return;\n if (n.parent) {\n // children/count are optional on INode: guard before indexing\n const siblings = n.parent.children ?? [];\n const p = siblings.findIndex(c => c.id === id);\n if (p !== -1) {\n siblings.splice(p, 1);\n if ((n.parent.count ?? 0) > 0) n.parent.count!--;\n }\n } else {\n const p = this.data.findIndex(n => n.id === id);\n if (p !== -1) {\n this.data.splice(p, 1);\n }\n }\n\n this._dataChange.next(this.data);\n }\n\n /**\n * Insert a new node at the top of its parent (or root).\n * @param node - The new node to insert.\n */\n insertNode(node: ItemNode): void {\n if (node.parent) {\n (node.parent.children ??= []).unshift(node);\n node.parent.count = (node.parent.count ?? 0) + 1;\n } else this.data.unshift(node);\n\n this._dataChange.next(this.data);\n }\n\n /**\n * Rename a node in the tree.\n * @param id - The id of the node to rename.\n * @param name - The new name for the node.\n * @returns The renamed node, or undefined if not found.\n */\n renameNode(id: string, name: string): ItemNode | undefined {\n const n = this.findNode(null, id);\n if (n) {\n n.name = name;\n this._dataChange.next(this.data);\n }\n return n;\n }\n\n /**\n * Notify all subscribers of the current data state.\n */\n update(): void {\n this._dataChange.next(this.data);\n }\n}\n\nexport interface SelectTreeDialogAppend {\n parent?: ItemNode;\n owner?: any;\n}\n\n@Component({\n templateUrl: './select-tree-dialog.component.html',\n styleUrl: './select-tree-dialog.component.scss',\n providers: [TreeDataSource],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule,\n MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,\n MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectTreeDialogComponent {\n /** Emitted when the user confirms a selection. */\n readonly done = output<SelectTreeDialogResult>();\n /** Emitted when the user requests to append a new node. */\n readonly append = output<SelectTreeDialogAppend>();\n private readonly destroyRef = inject(DestroyRef);\n private readonly dialogRef = inject(MatDialogRef<SelectTreeDialogComponent>);\n /** Dialog configuration, injected and exposed as a signal. */\n protected readonly dialogData = signal<SelectTreeDialogData>((() => {\n const data: SelectTreeDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return { ...data, title: data.title ?? 'Seleziona', okCaption: data.okCaption ?? 'OK' };\n })());\n private readonly tree = inject(TreeDataSource);\n private readonly _elRef = inject(ElementRef);\n /** Reference to the Material tree component. */\n protected readonly matTree = viewChild<MatTree<ItemNode>>(MatTree);\n /** Provides children of a tree node to the tree component. */\n protected readonly childrenAccessor = (node: ItemNode) => (node.children ?? []) as ItemNode[];\n /** Root nodes used as the tree data source. */\n protected readonly treeNodes = signal<ItemNode[]>([]);\n /** Currently selected tree node. */\n protected readonly currentNode = signal<ItemNode | undefined>(undefined);\n /** Current filter text. */\n protected readonly filterText = signal<string>('');\n /** Nodes matching the current filter text. */\n protected readonly filteredItems = signal<ItemNode[]>([]);\n /** Index of the currently highlighted filtered node (-1 = none). */\n protected readonly filterIndex = signal(-1);\n /** The currently highlighted filtered node, or null. */\n protected readonly filteredNode = computed<ItemNode | null>(() => {\n const idx = this.filterIndex();\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\n });\n protected readonly canAppend = signal<boolean>(this.dialogData().canAppend || false);\n\n /** Flat node map rebuilt whenever treeNodes changes. */\n private readonly _nodeMap = computed(() => {\n const map = new Map<string, ItemNode>();\n const build = (nodes: ItemNode[]) => {\n for (const n of nodes) {\n map.set(n.id, n);\n if (n.children?.length) build(n.children as ItemNode[]);\n }\n };\n build(this.treeNodes());\n return map;\n });\n\n protected hasChild = (_: number, node: ItemNode) => !!(node.children?.length);\n\n constructor() {\n this.tree.dataChange$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(data => {\n this.treeNodes.set(data);\n setTimeout(() => {\n const current = this.currentNode();\n if (current) {\n const n = this.findInTree(data, current.id);\n if (n) {\n this.currentNode.set(n);\n this.expand(n);\n }\n }\n });\n });\n const data = this.dialogData();\n if (data.nodes) {\n this.tree.initialize(data.nodes);\n }\n if (data.initialFilter) {\n this.filterText.set(data.initialFilter);\n this.doFilter();\n }\n }\n\n /**\n * Confirm the current selection and close the dialog.\n */\n protected ok(): void {\n const node = this.currentNode();\n if (node) {\n this.done.emit({ selectedItems: [node] });\n }\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /**\n * Toggle selection of a tree node. Clicking the already-selected node deselects it.\n * @param e - The mouse event (propagation is stopped).\n * @param node - The node that was clicked.\n */\n protected select(e: MouseEvent, node: ItemNode): void {\n if (e) e.stopPropagation();\n if (node) {\n this.currentNode.set(node.id === this.currentNode()?.id ? undefined : node);\n }\n }\n\n /**\n * Clear the active filter text.\n */\n protected clearFilter(): void {\n this.filterText.set('');\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n }\n\n /**\n * Filter the tree nodes by name (minimum 3 characters).\n */\n protected doFilter(): void {\n const text = this.filterText().trim().toLowerCase();\n if (text.length < 3) {\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n return;\n }\n const matches = Array.from(this._nodeMap().values())\n .filter(n => n.name?.toLowerCase().includes(text));\n this.filteredItems.set(matches);\n const idx = matches.length > 0 ? 0 : -1;\n this.filterIndex.set(idx);\n if (idx >= 0) this._scrollToFiltered(idx, matches);\n }\n\n /**\n * Advance to the next matching filtered node and scroll it into view.\n */\n protected nextFiltered(): void {\n const items = this.filteredItems();\n if (!items.length) return;\n const next = (this.filterIndex() + 1) % items.length;\n this.filterIndex.set(next);\n this._scrollToFiltered(next, items);\n }\n\n /**\n * Returns true when the node is the currently highlighted filter match.\n * @param node - tree node to check.\n */\n protected isFilteredNode(node: ItemNode): boolean {\n return this.filteredNode()?.id === node.id;\n }\n\n /**\n * Expands ancestors of the target node and scrolls it into view.\n * @param index - index within `items` to scroll to.\n * @param items - current filtered items array.\n */\n private _scrollToFiltered(index: number, items: ItemNode[]): void {\n const node = items[index];\n if (!node) return;\n this.currentNode.set(node);\n this.expand(node);\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n /**\n * Expand a node and all of its parent nodes.\n * @param node - The node to expand.\n * @returns Always false.\n */\n public expand(node: ItemNode): boolean {\n this.matTree()?.expand(node);\n let parent = node.parent;\n const visited = new Set<INode>();\n while (parent && !visited.has(parent)) {\n visited.add(parent);\n this.matTree()?.expand(parent as ItemNode);\n parent = parent.parent;\n }\n return false;\n }\n\n /**\n * Recursively find a node by id.\n * @param nodes - Nodes to search.\n * @param id - The id to find.\n */\n private findInTree(nodes: ItemNode[], id: string): ItemNode | undefined {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children?.length) {\n const found = this.findInTree(node.children as ItemNode[], id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n /**\n * Append a new node to the tree.\n * @param node - The node to insert.\n */\n public appendNode(node: ItemNode): void {\n this.tree.insertNode(node);\n }\n\n /**\n * Collapse all tree nodes and reset the current selection.\n */\n protected collapseAll(): void {\n this.matTree()?.collapseAll();\n this.currentNode.set(undefined);\n }\n\n /**\n * Expand all tree nodes and scroll to the selected node, if any.\n */\n protected expandAll(): void {\n this.matTree()?.expandAll();\n const node = this.currentNode();\n if (node) {\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n }\n\n /**\n * Emit an append request with the currently selected node as the parent.\n */\n protected doAppend(): void {\n this.append.emit({ parent: this.currentNode(), owner: this } as SelectTreeDialogAppend);\n }\n\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData().description) {\r\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n }\r\n <div style=\"padding-bottom: 10px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex fxHide.xs>\r\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \r\n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\r\n [ngModel]=\"filterText()\"\r\n (ngModelChange)=\"filterText.set($event)\">\r\n @if (filterText()) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\r\n (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems().length > 0) {\r\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\r\n </div>\r\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\r\n <div>\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\r\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\r\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\r\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\r\n <div fxLayout=\"row\" fxFill>\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\r\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\r\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\r\n (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxFill>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\r\n class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\r\n <button mat-button mat-dialog-close>Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { TextFieldModule } from \"@angular/cdk/text-field\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, output, signal } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatFormFieldAppearance, MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { EmailsValidatorDirective } from '@arsedizioni/ars-utils/core.validators';\nimport { FlexLayoutModule, ISendToDialog } from '@arsedizioni/ars-utils/ui';\nimport { SendToDialogResult, SendToPopulateData } from \"@arsedizioni/ars-utils/ui\";\n\nexport interface SendToDialogData {\n count: number;\n canPopulate?: boolean;\n title?: string;\n text?: string;\n subject?: string;\n info?: string;\n appearance?: MatFormFieldAppearance;\n options?: any;\n}\n\n@Component({\n templateUrl: \"./send-to-dialog.component.html\",\n styleUrl: './send-to-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormsModule,\n FlexLayoutModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n EmailsValidatorDirective,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatCheckboxModule,\n MatDialogActions,\n MatDialogClose,\n SafeHtmlPipe\n ],\n})\nexport class SendToDialogComponent implements ISendToDialog {\n /** Emitted when the user confirms and sends the message. */\n readonly done = output<SendToDialogResult>();\n /** Emitted when the user requests to populate the recipient list. */\n readonly populate = output<SendToPopulateData>();\n private readonly cdr = inject(ChangeDetectorRef);\n /** Dialog configuration, injected and exposed as a signal. */\n protected readonly dialogData = signal<SendToDialogData>((() => {\n const data: SendToDialogData = inject(MAT_DIALOG_DATA) ?? {};\n const count = data.count ?? 0;\n const title = data.title || (count\n ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)\n : undefined);\n return { ...data, count, appearance: data.appearance ?? 'fill', title };\n })());\n /** Form model for the send-to form fields. */\n protected item: SendToDialogResult = {\n recipients: undefined,\n subject: this.dialogData().subject,\n text: this.dialogData().text,\n options: undefined\n };\n\n /**\n * Confirm the form and emit the result.\n */\n protected ok(): void {\n this.item.options = this.dialogData().options;\n this.done.emit(this.item);\n }\n\n /**\n * Request the host to populate the recipient list.\n * Only emits if `canPopulate` is enabled in the dialog data.\n */\n protected populateRecipients(): void {\n if (this.dialogData().canPopulate) {\n this.populate.emit({ item: this.item, source: this });\n }\n }\n\n /**\n * Update the recipient list from an external caller.\n * @param recipients - The new recipients string (semicolon-separated).\n */\n updateRecipients(recipients: string): void {\n this.item.recipients = recipients;\n this.cdr.markForCheck();\n }\n}","<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1000\" #recipients=\"ngModel\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{recipients.value?.length || 0}}/1000 </mat-hint>\r\n @if (recipients.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput name=\"subject\" [(ngModel)]=\"item.subject\" #subject=\"ngModel\" maxlength=\"200\" required />\r\n @if (subject.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{subject.value?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [(ngModel)]=\"item.text\" name=\"text\" maxlength=\"1000\" #text=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" required></textarea>\r\n <mat-hint align=\"end\">{{text.value?.length || 0}}/1000 </mat-hint>\r\n @if (subject.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.select\n */\nexport * from './select/select-dialog.component';\nexport * from './select-tree/select-tree-dialog.component';\nexport * from './send-to/send-to-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i7","i8","i1","i2","i5","i6","i9"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.select.mjs","sources":["../../../projects/ars-utils/ui.dialogs.select/select/select-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/select/select-dialog.component.html","../../../projects/ars-utils/ui.dialogs.select/select-tree/select-tree-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/select-tree/select-tree-dialog.component.html","../../../projects/ars-utils/ui.dialogs.select/send-to/send-to-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/send-to/send-to-dialog.component.html","../../../projects/ars-utils/ui.dialogs.select/public_api.ts","../../../projects/ars-utils/ui.dialogs.select/arsedizioni-ars-utils-ui.dialogs.select.ts"],"sourcesContent":["import {\n afterNextRender, ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n output,\n signal,\n viewChild\n} from \"@angular/core\";\nimport { FormField, form } from '@angular/forms/signals';\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxChange, MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatOptionModule } from \"@angular/material/core\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatListModule, MatSelectionList, MatSelectionListChange } from \"@angular/material/list\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SafeHtmlPipe, SearchFilterMetadata, SearchFilterPipe } from '@arsedizioni/ars-utils/core';\nimport {\n SelectDialogAppend,\n SelectDialogData,\n SelectDialogDelete,\n SelectDialogEdit,\n SelectDialogFilter,\n SelectDialogLookup,\n SelectDialogResult,\n SelectableFilter,\n SelectableItem,\n} from \"@arsedizioni/ars-utils/ui\";\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\n\n@Component({\n templateUrl: \"./select-dialog.component.html\",\n styleUrl: './select-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatFormFieldModule,\n MatInputModule,\n FormField,\n MatButtonModule,\n MatIconModule,\n MatSelectModule,\n MatOptionModule,\n MatTooltipModule,\n MatMenuModule,\n MatDividerModule,\n MatCheckboxModule,\n MatDialogContent,\n MatListModule,\n MatDialogActions,\n MatDialogClose,\n MatPaginatorModule,\n SearchFilterPipe,\n SafeHtmlPipe\n ],\n})\nexport class SelectDialogComponent {\n readonly paginator = viewChild.required<MatPaginator>('paginator');\n readonly selection = viewChild.required<MatSelectionList>(\"selection\");\n private isViewReady = false;\n private readonly dialogRef = inject(MatDialogRef<SelectDialogComponent>);\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly dialogData = signal<SelectDialogData>((() => {\n const data: SelectDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'outline',\n title: data.title ?? 'Seleziona',\n okCaption: data.okCaption ?? 'Ok',\n multipleSelection: data.multipleSelection ?? false,\n items: data.canLookup ? [] : (data.items ?? []),\n pageSize: data.canLookup && data.canPaginate && !data.pageSize ? 100 : data.pageSize,\n };\n })());\n readonly done = output<SelectDialogResult>();\n readonly edit = output<SelectDialogEdit>();\n readonly view = output<SelectableItem>();\n readonly append = output<SelectDialogAppend>();\n readonly delete = output<SelectDialogDelete>();\n readonly lookup = output<SelectDialogLookup>();\n readonly lookupOptions = output();\n readonly filter = output<SelectDialogFilter>();\n protected canEdit = signal<boolean>(false);\n protected canView = signal<boolean>(false);\n protected canAppend = signal<boolean>(this.dialogData().canAppend ?? false);\n protected canDelete = signal<boolean>(false);\n protected canPaginate = signal<boolean>(this.dialogData().canPaginate ?? false);\n // Handle submit button activity\n protected okDisabled = signal<boolean>(this.dialogData().mustSelect ?? true);\n // Used for array filtering\n protected filterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\n protected readonly filterText = signal<string>('');\n /** Root signal form bound to the filter text input. */\n protected readonly filterForm = form(this.filterText);\n protected readonly filterOptions = signal<SelectableFilter[]>([]);\n protected filterOptionsInfo = signal<string>(\"Tutto\");\n // Used to sincronize lookup fields and params\n protected lookupField: string = \"\";\n private lookupParams?: any;\n // Used to display selected elements\n protected selectionInfo = signal<string | null>(null);\n protected selectionMasterIndeterminate = signal<boolean>(false);\n protected selectionMasterChecked = signal<boolean>(false);\n protected total = signal(this.dialogData().items?.length ?? 0);\n\n constructor() {\n const d = this.dialogData();\n if (d.canLookup) {\n if (d.lookupFields?.length) {\n this.lookupField = d.lookupFields[0].value;\n }\n if (d.canFilter) {\n this.filterOptions.set(d.filters ?? []);\n }\n }\n\n afterNextRender(() => {\n this.isViewReady = true;\n const selectedOption = this.filterOptions().find(x => x.checked);\n if (selectedOption) {\n this.applyFilterByOptions(selectedOption);\n }\n if (d.lookupOnInit) {\n this.applyFilter();\n }\n\n });\n }\n\n\n /**\n * Updates the total item count signal, triggering UI refresh.\n * @param newTotal - The new total count; defaults to 0 if omitted.\n */\n notifyChanges(newTotal?: number): void {\n this.total.set(newTotal ?? 0);\n this.cdr.markForCheck();\n }\n\n\n\n /** Returns `true` when every list item is currently selected. */\n private isAllSelected(): boolean {\n return this.selection().selectedOptions.selected.length === this.dialogData().items.length;\n }\n\n /** Returns `true` when at least one list item is selected. */\n private hasSelection(): boolean {\n return this.selection().selectedOptions.selected.length > 0;\n }\n\n /**\n * Selects or deselects all items based on the master checkbox state.\n * @param e - The checkbox change event.\n */\n protected masterSelectionToggle(e: MatCheckboxChange): void {\n if (e.checked)\n // Deselect if not allselected so that toggle makes the right choice\n this.selection().selectAll();\n else this.selection().deselectAll();\n this.selectionMasterIndeterminate.set(false);\n this.selectionMasterChecked.set(e.checked);\n const selection = this.selection();\n this.okDisabled.set(\n !!(this.dialogData().mustSelect &&\n selection.selectedOptions.selected.length === 0));\n this.updateSelectionInfo();\n }\n\n /**\n * Handles selection or deselection of a list item.\n * @param e - The selection list change event.\n */\n protected select(e: MatSelectionListChange): void {\n const selection = this.selection();\n if (!this.dialogData().multipleSelection) {\n this.selection().deselectAll();\n if (e.options?.length > 0)\n e.options[0].selected = true;\n this.okDisabled.set(false);\n } else {\n this.okDisabled.set(\n !!(this.dialogData().mustSelect &&\n selection.selectedOptions.selected.length === 0));\n }\n\n // Update editors\n this.canEdit.set(\n !!(this.dialogData().canEdit &&\n selection.selectedOptions.selected.length === 1));\n this.canView.set(\n !!(this.dialogData().canView &&\n selection.selectedOptions.selected.length === 1));\n this.canDelete.set(\n !!(this.dialogData().canDelete &&\n selection.selectedOptions.selected.length > 0));\n this.selectionMasterIndeterminate.set(\n !this.isAllSelected() && this.hasSelection());\n this.selectionMasterChecked.set(this.hasSelection());\n this.updateSelectionInfo();\n }\n\n /** Refreshes the selection info label shown in the dialog footer. */\n private updateSelectionInfo(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected.length > 0 && this.dialogData().multipleSelection) {\n this.selectionInfo.set(\n selection.selectedOptions.selected.length +\n \" / \" +\n selection.options.length);\n } else {\n this.selectionInfo.set(null);\n }\n }\n\n /** Deselects all items and resets the master checkbox state. */\n clearSelection(): void {\n this.selectionMasterIndeterminate.set(false);\n this.selectionMasterChecked.set(false);\n if (this.isViewReady) {\n this.selection().deselectAll();\n }\n this.selectionInfo.set(null);\n }\n\n /** Emits the current selection and closes the dialog. */\n protected ok(): void {\n if (!this.okDisabled()) {\n const selectedItems: SelectableItem[] = [];\n this.selection().selectedOptions.selected.forEach((element) => {\n selectedItems.push(element.value);\n });\n this.done.emit({ selectedItems: selectedItems });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n }\n\n /** Clears the current filter text input. */\n protected clearFilter(): void {\n this.filterText.set('');\n }\n\n /**\n * Sets the filter text programmatically.\n * @param text - The new filter string to apply.\n */\n public setFilter(text: string): void {\n this.filterText.set(text);\n }\n\n\n /**\n * Returns the current filter text.\n * @returns The active filter string.\n */\n public getFilter(): string {\n return this.filterText();\n }\n\n /** Emits the `lookupOptions` output event to open the filter options panel. */\n protected showFilterOptions(): void {\n if (this.lookupOptions) {\n this.lookupOptions.emit();\n }\n }\n\n /**\n * Applies the given text filter, emitting a lookup when enabled.\n * @param text - Optional filter string; populates `filterText` when provided.\n * @param e - Optional keyboard event; lookup only fires on Enter.\n */\n protected doFilter(text?: string, e?: KeyboardEvent): void {\n if (text) {\n this.filterText.set(text);\n }\n if (this.dialogData().canLookup) {\n if (!e || e.key === 'Enter') {\n this.applyFilter();\n }\n }\n }\n\n /**\n * Applies the current filter text, emitting a lookup event.\n */\n private applyFilter() {\n this.clearSelection();\n this.lookup.emit({ items: this.dialogData().items, filter: this.filterText(), owner: this });\n }\n\n /**\n * Applies a structured filter option, emitting the filter output event.\n * @param filterOption - The selected filter option object.\n */\n private applyFilterByOptions(filterOption: any): void {\n if (this.dialogData().canLookup && this.dialogData().canFilter) {\n this.filter.emit({\n items: this.dialogData().items,\n filter: this.filterText(),\n filterOption: filterOption,\n owner: this,\n });\n this.filterOptionsInfo.set(filterOption ? (filterOption.title ?? \"Tutto\") : \"Tutto\");\n }\n }\n\n /**\n * Applies a structured filter option, emitting the filter output event.\n * @param filterOption - The selected filter option object.\n * @param apply - Optional flag to immediately apply the filter.\n */\n protected doFilterByOptions(filterOption: any, apply?: boolean): void {\n this.applyFilterByOptions(filterOption);\n if (apply) {\n setTimeout(() => {\n this.doFilter();\n }, 250);\n }\n }\n\n /**\n * Triggers a server-side lookup with the given parameters (public API).\n * @param params - An object containing the lookup query parameters.\n */\n doLookup(params: any): void {\n if (this.dialogData().canLookup) {\n this.clearSelection();\n this.lookupParams = params;\n this.lookupParams.first = 0;\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });\n }\n }\n\n /**\n * Updates the paginator length and resets it to the first page.\n * @param total - The new total number of items.\n */\n protected updateLookupPaginator(total: number): void {\n if (this.canPaginate()) {\n const paginator = this.paginator();\n if (paginator) {\n paginator.pageIndex = 0;\n paginator.length = total ?? 0;\n }\n }\n }\n\n /**\n * Handles a paginator page change and triggers a new lookup.\n * @param e - The paginator page change event.\n */\n protected doLookupPage(e: PageEvent): void {\n if (this.canPaginate() && this.dialogData().canLookup) {\n this.clearSelection();\n if (!this.lookupParams) {\n this.lookupParams = { first: 0, count: this.dialogData().pageSize ?? 0 };\n }\n this.lookupParams.first = e.pageIndex * (this.dialogData().pageSize ?? 0);\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });\n }\n }\n\n /** Emits the `append` output event to open the add-item flow. */\n protected doAppend(): void {\n this.append.emit({ items: this.dialogData().items, owner: this } as SelectDialogAppend);\n }\n\n /** Emits the `edit` output event for the currently selected item. */\n protected doEdit(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected?.length > 0) {\n this.edit.emit({\n item: selection.selectedOptions.selected[0].value,\n items: this.dialogData().items,\n owner: this\n } as SelectDialogEdit);\n }\n }\n\n /** Emits the `view` output event for the currently selected item. */\n protected doView(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected?.length > 0) {\n this.view.emit(selection.selectedOptions.selected[0].value);\n }\n }\n\n /** Emits the `delete` output event with all currently selected items. */\n protected doDelete(): void {\n const selectedItems: SelectableItem[] = [];\n this.selection().selectedOptions.selected.forEach((element) => {\n selectedItems.push(element.value);\n });\n this.delete.emit({\n items: this.dialogData().items,\n selectedItems: selectedItems,\n } as SelectDialogDelete);\n this.canDelete.set(false);\n this.canEdit.set(false);\n\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div>\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\n @if (!dialogData().canLookupWithOptions) {\n <div fxFlex>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n @if (dialogData().canLookupWithInlineOptions) {\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n }\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\n <div fxFlex fxHide.lt-md>\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\n <mat-label>Come...</mat-label>\n <mat-select [(value)]=\"lookupField\">\n @for (field of dialogData().lookupFields; track $index) {\n <mat-option [value]=\"field.value\">\n {{field.name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n @if (dialogData().canLookupWithOptions) {\n <div fxFlex fxHide.lt-md>\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\n </button>\n </div>\n }\n @if (dialogData().canLookup && dialogData().canFilter) {\n <div fxFlex fxHide.lt-md>\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\n [matMenuTriggerFor]=\"menuFilter\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" >\n <div><mat-icon>filter_alt</mat-icon></div>\n <div>{{filterOptionsInfo()}}</div>\n <div><mat-icon class=\"icon-menu-drop-down\">\n arrow_drop_down</mat-icon></div>\n </div>\n </button>\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\n @for (f of filterOptions(); track $index) {\n @if (f.divider) {\n <mat-divider></mat-divider>\n }\n @if (f.groupName) {\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\n }\n @if (!f.groupName && !f.divider) {\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\n @if (f.radio && f.value) {\n <span style=\"padding-left:40px\"></span>\n }\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\n </button>\n }\n\n }\n </mat-menu>\n </div>\n }\n @if (canEdit() || canAppend() || canView() || canDelete()) {\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" >\n <div fxFlex fxHide.lt-md>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n @if (canEdit()) {\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\n </button>\n }\n @if (canView()) {\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\n </button>\n }\n @if (canDelete()) {\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\n </button>\n }\n </div>\n <div fxFlex fxHide.gt-sm>\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\n [matMenuTriggerFor]=\"menuActions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\n @if (canAppend()) {\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\n <mat-icon>add</mat-icon> Aggiungi\n </button>\n }\n @if (canEdit()) {\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\n <mat-icon>edit</mat-icon> Modifica\n </button>\n }\n @if (canView()) {\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\n <mat-icon>visibility</mat-icon> Mostra\n </button>\n }\n @if (canDelete()) {\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\n <mat-icon>delete</mat-icon> Elimina\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n </div>\n </div>\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\n <div>\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\n @if (dialogData().multipleSelection) {\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\n </mat-checkbox>\n </div>\n }\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\n @if (dialogData().header) {\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n </div>\n </div>\n </div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\n <div class=\"text message\"><i>\n @if (!dialogData().emptyMessage) {\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\n esistente.\n @if (dialogData().maxItems > 0) {\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\n }\n </span>\n } @else {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n }\n </i>\n </div>\n }\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\n [multiple]=\"dialogData().multipleSelection\">\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText() : ''): filterMetadata); track\n $index) {\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"column\" fxFill>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n @if (selectionInfo()) {\n <span class=\"bold\">{{selectionInfo()}}</span> <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span> <span class=\"small\"> elementi</span>\n }\n </div>\n <div fxFlexAlign=\"center\">\n @if (canPaginate()) {\n <mat-paginator class=\"x-small\" #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\n }\n </div>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\n </button>\n @if (dialogData().mustSelect) {\n <button mat-stroked-button mat-dialog-close>\n <span>Annulla</span>\n </button>\n }\n </div>\n </div>\n</mat-dialog-actions>","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injectable,\n OnDestroy,\n computed,\n inject,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormField, form } from '@angular/forms/signals';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { INode, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ItemNode, SelectTreeDialogData, SelectTreeDialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n@Injectable()\nexport class TreeDataSource implements OnDestroy {\n private readonly _dataChange = new BehaviorSubject<ItemNode[]>([]);\n readonly dataChange$ = this._dataChange.asObservable();\n\n get data(): ItemNode[] {\n return this._dataChange.value;\n }\n\n ngOnDestroy(): void {\n this._dataChange.complete();\n }\n\n initialize(data: ItemNode[]): void {\n this._dataChange.next(data);\n }\n\n /**\n * Find a node by id recursively.\n * @param node - The source node to search from, or null to search from root.\n * @param id - The id to search for.\n * @returns The matching node, or undefined if not found.\n */\n findNode(node: ItemNode | null, id: string): ItemNode | undefined {\n if (node) {\n if (node.id === id) return node;\n const children = node.children;\n if (children) {\n let _n: ItemNode | undefined;\n children.some(n => {\n _n = this.findNode(n as ItemNode, id);\n return !!_n;\n });\n return _n;\n }\n return undefined;\n }\n // Search all root nodes when called with null\n for (const root of this.data) {\n const found = this.findNode(root, id);\n if (found) return found;\n }\n return undefined;\n }\n /**\n * Remove a node from the tree.\n * @param id - The id of the node to remove.\n */\n removeNode(id: string): void {\n let n = this.findNode(null, id);\n if (!n) return;\n if (n.parent) {\n // children/count are optional on INode: guard before indexing\n const siblings = n.parent.children ?? [];\n const p = siblings.findIndex(c => c.id === id);\n if (p !== -1) {\n siblings.splice(p, 1);\n if ((n.parent.count ?? 0) > 0) n.parent.count!--;\n }\n } else {\n const p = this.data.findIndex(n => n.id === id);\n if (p !== -1) {\n this.data.splice(p, 1);\n }\n }\n\n this._dataChange.next(this.data);\n }\n\n /**\n * Insert a new node at the top of its parent (or root).\n * @param node - The new node to insert.\n */\n insertNode(node: ItemNode): void {\n if (node.parent) {\n (node.parent.children ??= []).unshift(node);\n node.parent.count = (node.parent.count ?? 0) + 1;\n } else this.data.unshift(node);\n\n this._dataChange.next(this.data);\n }\n\n /**\n * Rename a node in the tree.\n * @param id - The id of the node to rename.\n * @param name - The new name for the node.\n * @returns The renamed node, or undefined if not found.\n */\n renameNode(id: string, name: string): ItemNode | undefined {\n const n = this.findNode(null, id);\n if (n) {\n n.name = name;\n this._dataChange.next(this.data);\n }\n return n;\n }\n\n /**\n * Notify all subscribers of the current data state.\n */\n update(): void {\n this._dataChange.next(this.data);\n }\n}\n\nexport interface SelectTreeDialogAppend {\n parent?: ItemNode;\n owner?: any;\n}\n\n@Component({\n templateUrl: './select-tree-dialog.component.html',\n styleUrl: './select-tree-dialog.component.scss',\n providers: [TreeDataSource],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormField, MatButtonModule,\n MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,\n MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectTreeDialogComponent {\n /** Emitted when the user confirms a selection. */\n readonly done = output<SelectTreeDialogResult>();\n /** Emitted when the user requests to append a new node. */\n readonly append = output<SelectTreeDialogAppend>();\n private readonly destroyRef = inject(DestroyRef);\n private readonly dialogRef = inject(MatDialogRef<SelectTreeDialogComponent>);\n /** Dialog configuration, injected and exposed as a signal. */\n protected readonly dialogData = signal<SelectTreeDialogData>((() => {\n const data: SelectTreeDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return { ...data, title: data.title ?? 'Seleziona', okCaption: data.okCaption ?? 'OK' };\n })());\n private readonly tree = inject(TreeDataSource);\n private readonly _elRef = inject(ElementRef);\n /** Reference to the Material tree component. */\n protected readonly matTree = viewChild<MatTree<ItemNode>>(MatTree);\n /** Provides children of a tree node to the tree component. */\n protected readonly childrenAccessor = (node: ItemNode) => (node.children ?? []) as ItemNode[];\n /** Root nodes used as the tree data source. */\n protected readonly treeNodes = signal<ItemNode[]>([]);\n /** Currently selected tree node. */\n protected readonly currentNode = signal<ItemNode | undefined>(undefined);\n /** Current filter text. */\n protected readonly filterText = signal<string>('');\n /** Root signal form bound to the filter text input. */\n protected readonly filterForm = form(this.filterText);\n /** Nodes matching the current filter text. */\n protected readonly filteredItems = signal<ItemNode[]>([]);\n /** Index of the currently highlighted filtered node (-1 = none). */\n protected readonly filterIndex = signal(-1);\n /** The currently highlighted filtered node, or null. */\n protected readonly filteredNode = computed<ItemNode | null>(() => {\n const idx = this.filterIndex();\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\n });\n protected readonly canAppend = signal<boolean>(this.dialogData().canAppend || false);\n\n /** Flat node map rebuilt whenever treeNodes changes. */\n private readonly _nodeMap = computed(() => {\n const map = new Map<string, ItemNode>();\n const build = (nodes: ItemNode[]) => {\n for (const n of nodes) {\n map.set(n.id, n);\n if (n.children?.length) build(n.children as ItemNode[]);\n }\n };\n build(this.treeNodes());\n return map;\n });\n\n protected hasChild = (_: number, node: ItemNode) => !!(node.children?.length);\n\n constructor() {\n this.tree.dataChange$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(data => {\n this.treeNodes.set(data);\n setTimeout(() => {\n const current = this.currentNode();\n if (current) {\n const n = this.findInTree(data, current.id);\n if (n) {\n this.currentNode.set(n);\n this.expand(n);\n }\n }\n });\n });\n const data = this.dialogData();\n if (data.nodes) {\n this.tree.initialize(data.nodes);\n }\n if (data.initialFilter) {\n this.filterText.set(data.initialFilter);\n this.doFilter();\n }\n }\n\n /**\n * Confirm the current selection and close the dialog.\n */\n protected ok(): void {\n const node = this.currentNode();\n if (node) {\n this.done.emit({ selectedItems: [node] });\n }\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /**\n * Toggle selection of a tree node. Clicking the already-selected node deselects it.\n * @param e - The mouse event (propagation is stopped).\n * @param node - The node that was clicked.\n */\n protected select(e: MouseEvent, node: ItemNode): void {\n if (e) e.stopPropagation();\n if (node) {\n this.currentNode.set(node.id === this.currentNode()?.id ? undefined : node);\n }\n }\n\n /**\n * Clear the active filter text.\n */\n protected clearFilter(): void {\n this.filterText.set('');\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n }\n\n /**\n * Filter the tree nodes by name (minimum 3 characters).\n */\n protected doFilter(): void {\n const text = this.filterText().trim().toLowerCase();\n if (text.length < 3) {\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n return;\n }\n const matches = Array.from(this._nodeMap().values())\n .filter(n => n.name?.toLowerCase().includes(text));\n this.filteredItems.set(matches);\n const idx = matches.length > 0 ? 0 : -1;\n this.filterIndex.set(idx);\n if (idx >= 0) this._scrollToFiltered(idx, matches);\n }\n\n /**\n * Advance to the next matching filtered node and scroll it into view.\n */\n protected nextFiltered(): void {\n const items = this.filteredItems();\n if (!items.length) return;\n const next = (this.filterIndex() + 1) % items.length;\n this.filterIndex.set(next);\n this._scrollToFiltered(next, items);\n }\n\n /**\n * Returns true when the node is the currently highlighted filter match.\n * @param node - tree node to check.\n */\n protected isFilteredNode(node: ItemNode): boolean {\n return this.filteredNode()?.id === node.id;\n }\n\n /**\n * Expands ancestors of the target node and scrolls it into view.\n * @param index - index within `items` to scroll to.\n * @param items - current filtered items array.\n */\n private _scrollToFiltered(index: number, items: ItemNode[]): void {\n const node = items[index];\n if (!node) return;\n this.currentNode.set(node);\n this.expand(node);\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n /**\n * Expand a node and all of its parent nodes.\n * @param node - The node to expand.\n * @returns Always false.\n */\n public expand(node: ItemNode): boolean {\n this.matTree()?.expand(node);\n let parent = node.parent;\n const visited = new Set<INode>();\n while (parent && !visited.has(parent)) {\n visited.add(parent);\n this.matTree()?.expand(parent as ItemNode);\n parent = parent.parent;\n }\n return false;\n }\n\n /**\n * Recursively find a node by id.\n * @param nodes - Nodes to search.\n * @param id - The id to find.\n */\n private findInTree(nodes: ItemNode[], id: string): ItemNode | undefined {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children?.length) {\n const found = this.findInTree(node.children as ItemNode[], id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n /**\n * Append a new node to the tree.\n * @param node - The node to insert.\n */\n public appendNode(node: ItemNode): void {\n this.tree.insertNode(node);\n }\n\n /**\n * Collapse all tree nodes and reset the current selection.\n */\n protected collapseAll(): void {\n this.matTree()?.collapseAll();\n this.currentNode.set(undefined);\n }\n\n /**\n * Expand all tree nodes and scroll to the selected node, if any.\n */\n protected expandAll(): void {\n this.matTree()?.expandAll();\n const node = this.currentNode();\n if (node) {\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n }\n\n /**\n * Emit an append request with the currently selected node as the parent.\n */\n protected doAppend(): void {\n this.append.emit({ parent: this.currentNode(), owner: this } as SelectTreeDialogAppend);\n }\n\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<div style=\"padding: 0 24px\">\n @if (dialogData().description) {\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div style=\"padding-bottom: 10px;\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex fxHide.xs>\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>Cerca...</mat-label>\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\n [formField]=\"filterForm\">\n @if (filterText()) {\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\n (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n @if (filteredItems().length > 0) {\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\n </div>\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\n </button>\n </div>\n }\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\n <div>\n @if (canAppend()) {\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\n </button>\n }\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n<mat-dialog-content>\n <div fxLayout=\"column\" fxFill>\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\n <div fxLayout=\"row\" fxFill>\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\n }\n </div>\n </div>\n </mat-tree-node>\n\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\n (click)=\"select($event, node);\">\n <div fxLayout=\"row\" fxFill>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\n class=\"small-icon-button\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n </div>\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\n {{node.name}}\n </div>\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\n @if (node.count > 0) {\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\n }\n </div>\n </div>\n </mat-tree-node>\n </mat-tree>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\n <button mat-button mat-dialog-close>Annulla</button>\n </div>\n</mat-dialog-actions>","import { TextFieldModule } from \"@angular/cdk/text-field\";\nimport { ChangeDetectionStrategy, Component, inject, output, signal } from \"@angular/core\";\nimport { FormField, form, maxLength, required } from '@angular/forms/signals';\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatFormFieldAppearance, MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { emailsValidator } from '@arsedizioni/ars-utils/core.validators';\nimport { FlexLayoutModule, ISendToDialog } from '@arsedizioni/ars-utils/ui';\nimport { SendToDialogResult, SendToPopulateData } from \"@arsedizioni/ars-utils/ui\";\n\nexport interface SendToDialogData {\n count: number;\n canPopulate?: boolean;\n title?: string;\n text?: string;\n subject?: string;\n info?: string;\n appearance?: MatFormFieldAppearance;\n options?: any;\n}\n\n@Component({\n templateUrl: \"./send-to-dialog.component.html\",\n styleUrl: './send-to-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField,\n FlexLayoutModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatCheckboxModule,\n MatDialogActions,\n MatDialogClose,\n SafeHtmlPipe\n ],\n})\nexport class SendToDialogComponent implements ISendToDialog {\n /** Emitted when the user confirms and sends the message. */\n readonly done = output<SendToDialogResult>();\n /** Emitted when the user requests to populate the recipient list. */\n readonly populate = output<SendToPopulateData>();\n /** Dialog configuration, injected and exposed as a signal. */\n protected readonly dialogData = signal<SendToDialogData>((() => {\n const data: SendToDialogData = inject(MAT_DIALOG_DATA) ?? {};\n const count = data.count ?? 0;\n const title = data.title || (count\n ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)\n : undefined);\n return { ...data, count, appearance: data.appearance ?? 'fill', title };\n })());\n /** Model backing the signal form. */\n private readonly model = signal<SendToDialogResult>({\n recipients: '',\n subject: this.dialogData().subject ?? '',\n text: this.dialogData().text ?? '',\n options: undefined\n });\n\n /**\n * Signal form for the send-to fields: recipients (a required, valid,\n * semicolon-separated email list), subject and text are all required.\n */\n protected readonly form = form(this.model, p => {\n required(p.recipients);\n maxLength(p.recipients, 1000);\n emailsValidator(p.recipients);\n required(p.subject);\n maxLength(p.subject, 200);\n required(p.text);\n maxLength(p.text, 1000);\n });\n\n /**\n * Confirm the form and emit the result.\n */\n protected ok(): void {\n this.model.update(m => ({ ...m, options: this.dialogData().options }));\n this.done.emit(this.model());\n }\n\n /**\n * Request the host to populate the recipient list.\n * Only emits if `canPopulate` is enabled in the dialog data.\n */\n protected populateRecipients(): void {\n if (this.dialogData().canPopulate) {\n this.populate.emit({ item: this.model(), source: this });\n }\n }\n\n /**\n * Update the recipient list from an external caller.\n * @param recipients - The new recipients string (semicolon-separated).\n */\n updateRecipients(recipients: string): void {\n this.model.update(m => ({ ...m, recipients }));\n }\n}","<div class=\"dialog-info\">\r\n @if (form().invalid()) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [formField]=\"form.recipients\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.recipients().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"form.recipients().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{form.recipients().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.recipients().invalid()) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput [formField]=\"form.subject\" />\r\n @if (form.subject().invalid()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{form.subject().value()?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [formField]=\"form.text\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n <mat-hint align=\"end\">{{form.text().value()?.length || 0}}/1000 </mat-hint>\r\n @if (form.text().invalid()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.select\n */\nexport * from './select/select-dialog.component';\nexport * from './select-tree/select-tree-dialog.component';\nexport * from './send-to/send-to-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i6","i7","i4","i5","i8"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -201,6 +201,19 @@ interface ClipperUserInfo {
|
|
|
201
201
|
interface ClipperLoginResult extends LoginResult<ClipperUserInfo> {
|
|
202
202
|
settings?: ClipperChannelSettings[];
|
|
203
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Answer of `GET /session/status`: whether this browser holds a live session towards the Clipper API.
|
|
206
|
+
*
|
|
207
|
+
* This is the probe behind the link state. The auth cookie is HttpOnly and belongs to the API's
|
|
208
|
+
* host, so nothing here can read it, and its presence would prove nothing anyway — the session also
|
|
209
|
+
* lives server-side and may have been revoked or evicted. The endpoint never answers 401, which is
|
|
210
|
+
* what makes it safe to call with no session at all: a probe that failed with a status code would be
|
|
211
|
+
* reported by the interceptor as an expired session.
|
|
212
|
+
*/
|
|
213
|
+
interface ClipperSessionStatus {
|
|
214
|
+
/** True when the cookie this browser presented resolves to a live, validated session. */
|
|
215
|
+
connected: boolean;
|
|
216
|
+
}
|
|
204
217
|
interface ClipperLoginInfo {
|
|
205
218
|
context?: ClipperUserInfo;
|
|
206
219
|
channels?: ClipperChannelSettings[];
|
|
@@ -1010,12 +1023,17 @@ declare class ClipperLoginService {
|
|
|
1010
1023
|
*/
|
|
1011
1024
|
get user(): ClipperUserInfo | undefined;
|
|
1012
1025
|
/**
|
|
1013
|
-
*
|
|
1026
|
+
* Establishes the session state at bootstrap by asking the API — the only party that can read the
|
|
1027
|
+
* HttpOnly cookie — whether this browser still holds one.
|
|
1014
1028
|
*
|
|
1015
1029
|
* Called by `ClipperService.initialize`, right after `ClipperCoreService.initialize`, so a
|
|
1016
|
-
* consumer gets the restore for free and never has to know this method exists.
|
|
1017
|
-
*
|
|
1018
|
-
*
|
|
1030
|
+
* consumer gets the restore for free and never has to know this method exists.
|
|
1031
|
+
*
|
|
1032
|
+
* The probe now runs UNCONDITIONALLY, where it used to run only when a stored context existed.
|
|
1033
|
+
* The stored context is just a hint — "this browser signed in at some point" — and the cookie can
|
|
1034
|
+
* outlive it: local storage cleared while the month-long cookie stayed put made this library
|
|
1035
|
+
* declare "no link" with a perfectly valid session in the browser. The API is the only source of
|
|
1036
|
+
* truth on the matter, so it is asked every time.
|
|
1019
1037
|
*
|
|
1020
1038
|
* A host application that drives its own return from an external provider, or that starts on its
|
|
1021
1039
|
* own sign-in page, should call `core.setLoggedIn(false)` before bootstrapping rather than let
|
|
@@ -1024,12 +1042,17 @@ declare class ClipperLoginService {
|
|
|
1024
1042
|
*/
|
|
1025
1043
|
initialize(): void;
|
|
1026
1044
|
/**
|
|
1027
|
-
* Asks `/session/
|
|
1028
|
-
*
|
|
1045
|
+
* Asks `/session/status` whether this browser holds a live session, and hydrates the context
|
|
1046
|
+
* through {@link me} when it does.
|
|
1047
|
+
*
|
|
1048
|
+
* The probe is silent by construction: `/session/status` never answers 401, so a visitor who
|
|
1049
|
+
* never signed in — or a cookie whose session has died — comes back as `connected: false` with no
|
|
1050
|
+
* error broadcast and no dialog. Only then is the stale stored context cleared, so the `loggedIn`
|
|
1051
|
+
* signal tells the truth at every bootstrap.
|
|
1029
1052
|
*
|
|
1030
|
-
* Nothing is cleared on failure, and that is deliberate:
|
|
1031
|
-
*
|
|
1032
|
-
*
|
|
1053
|
+
* Nothing is cleared on a transport failure, and that is deliberate: an unreachable API is not
|
|
1054
|
+
* proof of a dead session — the proxy may have answered 502, the device may be offline — and
|
|
1055
|
+
* clearing on any of those would sign the user out with a perfectly valid cookie.
|
|
1033
1056
|
* @returns void
|
|
1034
1057
|
*/
|
|
1035
1058
|
private restoreSession;
|
|
@@ -1062,6 +1085,15 @@ declare class ClipperLoginService {
|
|
|
1062
1085
|
* @returns An observable that emits once the logout has been processed.
|
|
1063
1086
|
*/
|
|
1064
1087
|
logout(): Observable<ApiResult<unknown>>;
|
|
1088
|
+
/**
|
|
1089
|
+
* Asks the API whether this browser holds a live session, without ever failing with a 401: the
|
|
1090
|
+
* route is anonymous and answers `connected: false` to a caller with no session. This is the one
|
|
1091
|
+
* honest way to know the link state — the auth cookie is HttpOnly and belongs to the API's host,
|
|
1092
|
+
* so it cannot be read from here, and its presence would prove nothing anyway, since the session
|
|
1093
|
+
* also lives server-side and may have been revoked or evicted.
|
|
1094
|
+
* @returns An observable emitting the API result wrapping the session status.
|
|
1095
|
+
*/
|
|
1096
|
+
status(): Observable<ApiResult<ClipperSessionStatus>>;
|
|
1065
1097
|
/**
|
|
1066
1098
|
* Reads the current session from the server, which resolves it from the auth cookie claims
|
|
1067
1099
|
* without touching the database. Used to restore the state after a page refresh instead of
|
|
@@ -1299,4 +1331,4 @@ declare class ClipperCoreService {
|
|
|
1299
1331
|
}
|
|
1300
1332
|
|
|
1301
1333
|
export { ClipperAccountService, ClipperAuthors, ClipperCalendarSearchParams, ClipperCalendarState, ClipperCalendarStates, ClipperChannel, ClipperChannelSettings, ClipperChannels, ClipperCoreService, ClipperDashboard, ClipperDocumentChangeReasons, ClipperDocumentContainer, ClipperDocumentsService, ClipperExportDocumentsFormat, ClipperFacet, ClipperLoginService, ClipperMessages, ClipperModel, ClipperModels, ClipperModule, ClipperModuleGroup, ClipperModuleGroups, ClipperModules, ClipperQueryDocumentFlags, ClipperQueryReferencesMode, ClipperRegions, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsSnapshot, ClipperSearchParams, ClipperSearchResult, ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperSelectionMode, ClipperService, ClipperServiceFlags, ClipperSort, ClipperSources, ClipperUtils, clipperAuthInterceptor };
|
|
1302
|
-
export type { ClipperAvailableChannel, ClipperChannelSettingsItem, ClipperDashboardItem, ClipperDashboardModelItem, ClipperDeleteWorkingDocumentsParams, ClipperDocumentAnchorInfo, ClipperDocumentInfo, ClipperDocumentNote, ClipperDocumentNoteTracking, ClipperDocumentRelevantChunkHit, ClipperDocumentRelevants, ClipperDocumentStructure, ClipperDocumentUpdateStateParams, ClipperExportDocumentsParams, ClipperLoginInfo, ClipperLoginResult, ClipperOTPInfo, ClipperReferencesSearchParams, ClipperSearchCalendarSnapshotMonth, ClipperSearchFacet, ClipperSearchFacetGroup, ClipperSearchFacetsResult, ClipperSearchFilter, ClipperSendDocumentsByEmailParams, ClipperTaxonomyParams, ClipperTopicInfo, ClipperUserChannelInfo, ClipperUserInfo, ClipperUserSearch, ClipperUserTrialInfo, ClipperUserWorkingDocument, EditedEventArgs, SectorInfo };
|
|
1334
|
+
export type { ClipperAvailableChannel, ClipperChannelSettingsItem, ClipperDashboardItem, ClipperDashboardModelItem, ClipperDeleteWorkingDocumentsParams, ClipperDocumentAnchorInfo, ClipperDocumentInfo, ClipperDocumentNote, ClipperDocumentNoteTracking, ClipperDocumentRelevantChunkHit, ClipperDocumentRelevants, ClipperDocumentStructure, ClipperDocumentUpdateStateParams, ClipperExportDocumentsParams, ClipperLoginInfo, ClipperLoginResult, ClipperOTPInfo, ClipperReferencesSearchParams, ClipperSearchCalendarSnapshotMonth, ClipperSearchFacet, ClipperSearchFacetGroup, ClipperSearchFacetsResult, ClipperSearchFilter, ClipperSendDocumentsByEmailParams, ClipperSessionStatus, ClipperTaxonomyParams, ClipperTopicInfo, ClipperUserChannelInfo, ClipperUserInfo, ClipperUserSearch, ClipperUserTrialInfo, ClipperUserWorkingDocument, EditedEventArgs, SectorInfo };
|
|
@@ -315,6 +315,12 @@ declare class ClipperSearchResultManager extends ClipperDocumentManager {
|
|
|
315
315
|
protected snapshot: ClipperSearchResult | undefined;
|
|
316
316
|
protected readonly filterBusy: _angular_core.WritableSignal<boolean>;
|
|
317
317
|
protected filterParams: ClipperSearchParams;
|
|
318
|
+
/**
|
|
319
|
+
* Parameters that produced the result set currently on screen, frozen at the moment the query
|
|
320
|
+
* was issued. Pagination and sorting page over this copy so that filter pane edits which have
|
|
321
|
+
* not been applied yet cannot leak into a page change.
|
|
322
|
+
*/
|
|
323
|
+
protected activeParams: ClipperSearchParams | undefined;
|
|
318
324
|
protected readonly filterPaneHasBackdrop: _angular_core.WritableSignal<boolean>;
|
|
319
325
|
protected readonly filterPaneClosed: _angular_core.WritableSignal<boolean>;
|
|
320
326
|
protected readonly filterPane2HasBackdrop: _angular_core.WritableSignal<boolean>;
|
|
@@ -458,6 +464,32 @@ declare class ClipperSearchResultManager extends ClipperDocumentManager {
|
|
|
458
464
|
* @param queryChunks - Pipe-separated highlight chunks (e.g. "|1|2|3...").
|
|
459
465
|
*/
|
|
460
466
|
openDocument(documentId?: string, query?: string, queryChunks?: string): void;
|
|
467
|
+
/**
|
|
468
|
+
* Freezes the parameters that produced the result set currently on screen. Paging and
|
|
469
|
+
* re-sorting must run against this copy, never against `filterParams`, which is bound to the
|
|
470
|
+
* filter pane and may hold edits the user has not applied yet.
|
|
471
|
+
* @param params - The parameters actually sent to the server for the current result set.
|
|
472
|
+
*/
|
|
473
|
+
protected setActiveParams(params: ClipperSearchParams): void;
|
|
474
|
+
/**
|
|
475
|
+
* Returns a working copy of the parameters that produced the result set currently on screen.
|
|
476
|
+
* @returns A clone of the active parameters, or `undefined` when no search has run yet.
|
|
477
|
+
*/
|
|
478
|
+
protected getActiveParams(): ClipperSearchParams | undefined;
|
|
479
|
+
/**
|
|
480
|
+
* Builds the parameters needed to load a different page of the result set currently on screen.
|
|
481
|
+
* @param pageIndex - The zero-based index of the requested page.
|
|
482
|
+
* @returns A clone of the active parameters with the paging offset moved to `pageIndex`, or
|
|
483
|
+
* `undefined` when no search has run yet.
|
|
484
|
+
*/
|
|
485
|
+
protected getPageParams(pageIndex: number): ClipperSearchParams | undefined;
|
|
486
|
+
/**
|
|
487
|
+
* Revives the date properties of a set of search parameters read back from storage, where JSON
|
|
488
|
+
* serialisation has turned them into strings.
|
|
489
|
+
* @param params - The deserialised parameters, or `undefined` when the stored state predates them.
|
|
490
|
+
* @returns The same instance with its date properties converted back to `Date`, or `undefined`.
|
|
491
|
+
*/
|
|
492
|
+
protected reviveParamsDates(params?: ClipperSearchParams): ClipperSearchParams | undefined;
|
|
461
493
|
/**
|
|
462
494
|
* Serialises the current component state (paginator, facets, filter params, scroll, sort, data)
|
|
463
495
|
* to the given storage under the given key, enabling later restoration.
|