@arsedizioni/ars-utils 22.5.46 → 22.5.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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>&nbsp; <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span>&nbsp; <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\";\r\nimport { ChangeDetectionStrategy, Component, inject, output, signal } from \"@angular/core\";\r\nimport { form, FormField, FormRoot, maxLength, required } from '@angular/forms/signals';\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { DtoUtils, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { emails, notEmpty, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\r\nimport { FlexLayoutModule, ISendToDialog } from '@arsedizioni/ars-utils/ui';\r\nimport { SendToDialogResult, SendToPopulateData } from \"@arsedizioni/ars-utils/ui\";\r\n\r\n/**\r\n * Form model of the send-to dialog.\r\n *\r\n * {@link SendToDialogResult} is the DTO: every field of it is optional, so it cannot\r\n * back a signal form directly. Here every editable field is present and holds `''` when\r\n * empty; `options` is not editable and is only added back by {@link toPayload}.\r\n */\r\ninterface SendToForm {\r\n /** Semicolon-separated recipient list; `''` when the input is empty. */\r\n recipients: string;\r\n /** Subject of the message; `''` when the input is empty. */\r\n subject: string;\r\n /** Body of the message; `''` when the input is empty. */\r\n text: string;\r\n}\r\n\r\n/** Neutral form model: it declares every field the form owns and its empty value. */\r\nconst _EMPTY_ITEM: SendToForm = { recipients: '', subject: '', text: '' };\r\n\r\nexport interface SendToDialogData {\r\n count: number;\r\n canPopulate?: boolean;\r\n title?: string;\r\n text?: string;\r\n subject?: string;\r\n info?: string;\r\n appearance?: MatFormFieldAppearance;\r\n options?: any;\r\n}\r\n\r\n@Component({\r\n templateUrl: \"./send-to-dialog.component.html\",\r\n styleUrl: './send-to-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormField, FormRoot,\r\n FlexLayoutModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SendToDialogComponent implements ISendToDialog {\r\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\r\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\r\n\r\n /** Emitted when the user confirms and sends the message. */\r\n readonly done = output<SendToDialogResult>();\r\n /** Emitted when the user requests to populate the recipient list. */\r\n readonly populate = output<SendToPopulateData>();\r\n /** Dialog configuration, injected and exposed as a signal. */\r\n protected readonly dialogData = signal<SendToDialogData>((() => {\r\n const data: SendToDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n const count = data.count ?? 0;\r\n const title = data.title || (count\r\n ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)\r\n : undefined);\r\n return { ...data, count, appearance: data.appearance ?? 'fill', title };\r\n })());\r\n /** Model backing the signal form. */\r\n private readonly model = signal<SendToForm>(this.toForm());\r\n\r\n /**\r\n * Builds the form model from the dialog data, which may pre-fill subject and body.\r\n * @returns A fresh form model.\r\n */\r\n private toForm(): SendToForm {\r\n const data = this.dialogData();\r\n return DtoUtils.toForm(_EMPTY_ITEM, { subject: data.subject, text: data.text });\r\n }\r\n\r\n /**\r\n * Builds the dialog result from the current form model.\r\n *\r\n * Ad-hoc because the result also carries the caller's `options`, which the dialog\r\n * only passes through and are therefore not part of the form model.\r\n * @returns The message to emit through `done` or `populate`.\r\n */\r\n private toPayload(): SendToDialogResult {\r\n return { ...DtoUtils.toPayload(this.model()), options: this.dialogData().options };\r\n }\r\n\r\n /**\r\n * Signal form for the send-to fields: recipients (a required, valid,\r\n * semicolon-separated email list), subject and text are all required.\r\n */\r\n protected readonly form = form(this.model, p => {\r\n required(p.recipients);\r\n notEmpty(p.recipients);\r\n maxLength(p.recipients, 1000);\r\n emails(p.recipients);\r\n required(p.subject);\r\n notEmpty(p.subject);\r\n maxLength(p.subject, 200);\r\n required(p.text);\r\n notEmpty(p.text);\r\n maxLength(p.text, 1000);\r\n });\r\n\r\n /**\r\n * Confirm the form and emit the result.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.toPayload());\r\n }\r\n\r\n /**\r\n * Request the host to populate the recipient list.\r\n * Only emits if `canPopulate` is enabled in the dialog data.\r\n */\r\n protected populateRecipients(): void {\r\n if (this.dialogData().canPopulate) {\r\n this.populate.emit({ item: this.toPayload(), source: this });\r\n }\r\n }\r\n\r\n /**\r\n * Update the recipient list from an external caller.\r\n * @param recipients - The new recipients string (semicolon-separated).\r\n */\r\n updateRecipients(recipients: string): void {\r\n this.model.update(m => ({ ...m, recipients }));\r\n }\r\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 [formRoot]=\"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>{{ getErrorMessage(form.recipients().errors()) }}</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>{{ getErrorMessage(form.subject().errors()) }}</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>{{ getErrorMessage(form.text().errors()) }}</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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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.select.mjs","sources":["../../../projects/ars-utils/ui.dialogs.select/list/list-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.select/list/list-dialog.component.html","../../../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 ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n signal\n} from \"@angular/core\";\nimport { FormField, form } from '@angular/forms/signals';\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, 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 { MatListModule } from \"@angular/material/list\";\nimport { SafeHtmlPipe, SearchFilterMetadata, SearchFilterPipe } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule, ListDialogData, SelectableItem } from \"@arsedizioni/ars-utils/ui\";\n\n\n\n/**\n * Read-only counterpart of `SelectDialogComponent`: it shows a list of items with a search box\n * and nothing else.\n *\n * Deliberately not a selection: the list is a plain `mat-list`, not a `mat-selection-list`, so\n * there is no selected state to read, no `done` payload and no Ok / Annulla pair — closing is the\n * only way out and it is always available. It carries no add / edit / delete affordance either:\n * a dialog that cannot change anything is the whole point, and a caller that needs commands wants\n * `SelectDialogComponent` instead.\n *\n * Filtering is client-side, through the same `search` pipe the select dialog uses on its local\n * items. There is no server-side lookup: paging a list nobody can act on would buy nothing.\n */\n@Component({\n templateUrl: \"./list-dialog.component.html\",\n styleUrl: './list-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,\n MatFormFieldModule,\n MatInputModule,\n FormField,\n MatButtonModule,\n MatIconModule,\n MatListModule,\n SearchFilterPipe,\n SafeHtmlPipe\n ],\n})\nexport class ListDialogComponent {\n private readonly cdr = inject(ChangeDetectorRef);\n\n protected readonly dialogData = signal<ListDialogData>((() => {\n const data: ListDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'outline',\n title: data.title ?? 'Elenco',\n closeCaption: data.closeCaption ?? 'Chiudi',\n items: data.items ?? [],\n };\n })());\n\n /** Items currently on screen. Seeded from the dialog data and replaceable through {@link setItems}. */\n protected readonly items = signal<SelectableItem[]>(this.dialogData().items ?? []);\n\n /** Counters written by the `search` pipe while it filters, read back by the footer. */\n protected filterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\n\n /** Current search text. */\n protected readonly filterText = signal<string>(this.dialogData().filter ?? '');\n\n /** Root signal form bound to the search input. */\n protected readonly filterForm = form(this.filterText);\n\n /**\n * Replaces the items on screen, for a caller that fills the list after opening the dialog or\n * refreshes it while it is open.\n * @param items - The new items to display; an empty array clears the list.\n */\n public setItems(items: SelectableItem[]): void {\n this.items.set(items ?? []);\n this.cdr.markForCheck();\n }\n\n /**\n * Sets the search text programmatically.\n * @param text - The new search string to apply.\n */\n public setFilter(text: string): void {\n this.filterText.set(text ?? '');\n }\n\n /**\n * Returns the current search text.\n * @returns The active search string.\n */\n public getFilter(): string {\n return this.filterText();\n }\n\n /** Clears the search text, restoring the whole list. */\n protected clearFilter(): void {\n this.filterText.set('');\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=\"list-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n }\n <div fxLayout=\"row\" fxFill>\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\" matInput title=\"Digita il testo\" [formField]=\"filterForm\"\n (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation()\">\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 </mat-form-field>\n </div>\n </div>\n @if (dialogData().header && items().length > 0) {\n <div class=\"text\" style=\"padding-top: 10px;\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\n }\n</div>\n<mat-dialog-content style=\"padding-top:0\">\n <div fxLayout=\"column\" fxFill>\n @if (items().length === 0) {\n <div class=\"text message\"><i>\n @if (dialogData().emptyMessage) {\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\n } @else {\n <span>Nessun elemento da visualizzare.</span>\n }\n </i>\n </div>\n }\n <!--\n A plain `mat-list`, not a `mat-selection-list`: the rows carry no selected state and no\n click target, so nothing here can be acted upon by mistake.\n -->\n <mat-list role=\"list\">\n @for (item of (items() | search: filterText(): filterMetadata); track $index) {\n <mat-list-item role=\"listitem\">\n <div [innerHtml]=\"item.template | safeHtml\"></div>\n </mat-list-item>\n }\n </mat-list>\n @if (items().length > 0 && filterText() && filterMetadata.count === 0) {\n <div class=\"text message\"><i>\n <span>Nessun elemento corrisponde alla ricerca.</span>\n </i>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\n <div class=\"secondary\" style=\"padding-left:20px\">\n <span class=\"bold\">{{ (filterText() ? filterMetadata.count : items().length) ?? 0 }}</span>&nbsp;\n <span class=\"small\"> elementi</span>\n </div>\n <div>\n <button mat-flat-button mat-dialog-close cdkFocusInitial>\n <span>{{dialogData().closeCaption}}</span>\n </button>\n </div>\n </div>\n</mat-dialog-actions>\n","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>&nbsp; <span class=\"small\"> elementi selezionati</span>\n } @else {\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText() ? filterMetadata.count : total())) ??\n 0}}</span>&nbsp; <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\";\r\nimport { ChangeDetectionStrategy, Component, inject, output, signal } from \"@angular/core\";\r\nimport { form, FormField, FormRoot, maxLength, required } from '@angular/forms/signals';\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { DtoUtils, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { emails, notEmpty, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\r\nimport { FlexLayoutModule, ISendToDialog } from '@arsedizioni/ars-utils/ui';\r\nimport { SendToDialogResult, SendToPopulateData } from \"@arsedizioni/ars-utils/ui\";\r\n\r\n/**\r\n * Form model of the send-to dialog.\r\n *\r\n * {@link SendToDialogResult} is the DTO: every field of it is optional, so it cannot\r\n * back a signal form directly. Here every editable field is present and holds `''` when\r\n * empty; `options` is not editable and is only added back by {@link toPayload}.\r\n */\r\ninterface SendToForm {\r\n /** Semicolon-separated recipient list; `''` when the input is empty. */\r\n recipients: string;\r\n /** Subject of the message; `''` when the input is empty. */\r\n subject: string;\r\n /** Body of the message; `''` when the input is empty. */\r\n text: string;\r\n}\r\n\r\n/** Neutral form model: it declares every field the form owns and its empty value. */\r\nconst _EMPTY_ITEM: SendToForm = { recipients: '', subject: '', text: '' };\r\n\r\nexport interface SendToDialogData {\r\n count: number;\r\n canPopulate?: boolean;\r\n title?: string;\r\n text?: string;\r\n subject?: string;\r\n info?: string;\r\n appearance?: MatFormFieldAppearance;\r\n options?: any;\r\n}\r\n\r\n@Component({\r\n templateUrl: \"./send-to-dialog.component.html\",\r\n styleUrl: './send-to-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormField, FormRoot,\r\n FlexLayoutModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SendToDialogComponent implements ISendToDialog {\r\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\r\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\r\n\r\n /** Emitted when the user confirms and sends the message. */\r\n readonly done = output<SendToDialogResult>();\r\n /** Emitted when the user requests to populate the recipient list. */\r\n readonly populate = output<SendToPopulateData>();\r\n /** Dialog configuration, injected and exposed as a signal. */\r\n protected readonly dialogData = signal<SendToDialogData>((() => {\r\n const data: SendToDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n const count = data.count ?? 0;\r\n const title = data.title || (count\r\n ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)\r\n : undefined);\r\n return { ...data, count, appearance: data.appearance ?? 'fill', title };\r\n })());\r\n /** Model backing the signal form. */\r\n private readonly model = signal<SendToForm>(this.toForm());\r\n\r\n /**\r\n * Builds the form model from the dialog data, which may pre-fill subject and body.\r\n * @returns A fresh form model.\r\n */\r\n private toForm(): SendToForm {\r\n const data = this.dialogData();\r\n return DtoUtils.toForm(_EMPTY_ITEM, { subject: data.subject, text: data.text });\r\n }\r\n\r\n /**\r\n * Builds the dialog result from the current form model.\r\n *\r\n * Ad-hoc because the result also carries the caller's `options`, which the dialog\r\n * only passes through and are therefore not part of the form model.\r\n * @returns The message to emit through `done` or `populate`.\r\n */\r\n private toPayload(): SendToDialogResult {\r\n return { ...DtoUtils.toPayload(this.model()), options: this.dialogData().options };\r\n }\r\n\r\n /**\r\n * Signal form for the send-to fields: recipients (a required, valid,\r\n * semicolon-separated email list), subject and text are all required.\r\n */\r\n protected readonly form = form(this.model, p => {\r\n required(p.recipients);\r\n notEmpty(p.recipients);\r\n maxLength(p.recipients, 1000);\r\n emails(p.recipients);\r\n required(p.subject);\r\n notEmpty(p.subject);\r\n maxLength(p.subject, 200);\r\n required(p.text);\r\n notEmpty(p.text);\r\n maxLength(p.text, 1000);\r\n });\r\n\r\n /**\r\n * Confirm the form and emit the result.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.toPayload());\r\n }\r\n\r\n /**\r\n * Request the host to populate the recipient list.\r\n * Only emits if `canPopulate` is enabled in the dialog data.\r\n */\r\n protected populateRecipients(): void {\r\n if (this.dialogData().canPopulate) {\r\n this.populate.emit({ item: this.toPayload(), source: this });\r\n }\r\n }\r\n\r\n /**\r\n * Update the recipient list from an external caller.\r\n * @param recipients - The new recipients string (semicolon-separated).\r\n */\r\n updateRecipients(recipients: string): void {\r\n this.model.update(m => ({ ...m, recipients }));\r\n }\r\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 [formRoot]=\"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>{{ getErrorMessage(form.recipients().errors()) }}</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>{{ getErrorMessage(form.subject().errors()) }}</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>{{ getErrorMessage(form.text().errors()) }}</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 './list/list-dialog.component';\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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"}