@arsedizioni/ars-utils 22.5.36 → 22.5.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +174 -150
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +92 -10
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +43 -7
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +0 -6
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +91 -30
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +97 -42
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +24 -10
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +79 -23
- package/types/arsedizioni-ars-utils-core.d.ts +46 -10
- package/types/arsedizioni-ars-utils-core.date.d.ts +37 -4
- package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +116 -6
- package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +93 -11
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +29 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.prompt.mjs","sources":["../../../projects/ars-utils/ui.dialogs.prompt/prompt/prompt-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.prompt/prompt/prompt-dialog.component.html","../../../projects/ars-utils/ui.dialogs.prompt/prompt-date/prompt-date-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.prompt/prompt-date/prompt-date-dialog.component.html","../../../projects/ars-utils/ui.dialogs.prompt/prompt-time/prompt-time-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.prompt/prompt-time/prompt-time-dialog.component.html","../../../projects/ars-utils/ui.dialogs.prompt/public_api.ts","../../../projects/ars-utils/ui.dialogs.prompt/arsedizioni-ars-utils-ui.dialogs.prompt.ts"],"sourcesContent":["import { TextFieldModule } from '@angular/cdk/text-field';\nimport { FlexLayoutModule, PromptDialogData, PromptDialogResult, PromptDialogType } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { form, FormField, FormRoot, max, maxLength, min, required } from '@angular/forms/signals';\nimport { notEmpty, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\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 { MatSelectModule } from '@angular/material/select';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\n\n@Component({\n templateUrl: './prompt-dialog.component.html',\n styleUrl: './prompt-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule, MatFormFieldModule, MatInputModule,\n MatButtonModule, MatIconModule, TextFieldModule, MatSelectModule, MatOptionModule, MatCheckboxModule, MatDialogActions,\n MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n readonly done = output<PromptDialogResult>();\n private readonly dialogService = inject(ShellService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type: data.type ?? PromptDialogType.Default,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /** Model backing the signal form. `value` type depends on the prompt type. */\n private readonly model = signal<{ value: any }>((() => {\n const data = this.dialogData();\n if (data.initialValue && data.type !== PromptDialogType.List) {\n return { value: data.initialValue };\n }\n // Empty-state convention of native inputs bound via [formField]:\n // number inputs use null, textual inputs (text/date/textarea) use ''.\n return { value: data.type === PromptDialogType.Number || data.type === PromptDialogType.List ? null : '' };\n })());\n\n /**\n * Signal form for the prompt value. Validators mirror the previous template-driven\n * form: `required` follows the dialog data, `min`/`max` apply to the Number type.\n */\n protected readonly form = form(this.model, p => {\n // The value path is typed as `any` because its shape depends on the prompt type.\n const value = p.value as any;\n required(value, { when: () => !!this.dialogData().required });\n notEmpty(value, { when: () => !!this.dialogData().required });\n min(value, () => this.dialogData().type === PromptDialogType.Number ? this.dialogData().minValue : undefined);\n max(value, () => this.dialogData().type === PromptDialogType.Number ? this.dialogData().maxValue : undefined);\n maxLength(value, () => {\n switch (this.dialogData().type) {\n case PromptDialogType.Default: return 200;\n case PromptDialogType.Text: return 1000;\n default: return undefined;\n }\n });\n });\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n let value: any = this.form.value().value();\n if (this.dialogData().type === PromptDialogType.Date) {\n const date = SystemUtils.parseDate(value as string);\n if (!date || date.getFullYear() > 9999) {\n this.dialogService.error('Data non valida.');\n return;\n }\n }\n // Native number/date inputs report an empty value as null; normalize to undefined.\n value ??= undefined;\n this.done.emit({\n value,\n type: this.dialogData().type,\n options: this.dialogData().options\n });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (!dialogData().type) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"text\" matInput [formField]=\"$any(form.value)\">\r\n @if (form.value().value()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"form.value().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"date\" matInput [formField]=\"$any(form.value)\">\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors(), 'Data non valida.') }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 2) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"number\" matInput [formField]=\"$any(form.value)\">\r\n @if (form.value().value() !== null && form.value().value() !== undefined) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"form.value().value.set(null)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 3) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <textarea matInput [formField]=\"$any(form.value)\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.value().value()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"form.value().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"end\">{{$any(form.value().value())?.length || 0}}/1000 </mat-hint>\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 5) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-select [formField]=\"$any(form.value)\">\r\n @for (i of dialogData().initialValue; track $index) {\r\n <mat-option [value]=\"i.value\">\r\n {{i.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\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\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule, PromptDateDialogResult, PromptDialogData, PromptDialogType } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { form, FormField, FormRoot, required } from '@angular/forms/signals';\nimport { SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\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 { DateInterval, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Component({\n templateUrl: './prompt-date-dialog.component.html',\n styleUrl: './prompt-date-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatButtonModule, MatIconModule,\n MatCheckboxModule, MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptDateDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /**\n * Error text for a date range: whichever end is in error speaks for the pair.\n * @param from - Errors of the start field, from `f.from().errors()`.\n * @param to - Errors of the end field, from `f.to().errors()`.\n * @returns The text to show under the range, or `undefined` when neither end is in error.\n */\n protected rangeErrorMessage(\n from: readonly { kind: string; message?: string }[],\n to: readonly { kind: string; message?: string }[]\n ): string | undefined {\n return SignalsUtils.getFieldErrorMessage(from.length ? from : to, 'Intervallo non valido.');\n }\n\n readonly done = output<PromptDateDialogResult>();\n private readonly dialogService = inject(ShellService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n const type = (data.type === PromptDialogType.Date || data.type === PromptDialogType.DateInterval)\n ? data.type\n : PromptDialogType.Date;\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /**\n * Model backing the signal form: `date` serves the single-date type, while\n * `from`/`to` serve the date-interval type. Empty values are `null` (not\n * `undefined`) because signal forms only build child fields for keys whose\n * value is defined, and Material's datepicker accessors report an empty\n * input as `null` anyway; values are normalized to `undefined` on emit.\n */\n private readonly model = signal<{ date: Date | null; from: Date | null; to: Date | null }>(((): { date: Date | null; from: Date | null; to: Date | null } => {\n const d = this.dialogData();\n if (d.type === PromptDialogType.DateInterval) {\n const interval = d.initialValue as DateInterval | undefined;\n return { date: null, from: interval?.from ?? null, to: interval?.to ?? null };\n }\n return { date: (d.initialValue as Date | undefined) ?? null, from: null, to: null };\n })());\n\n /**\n * Signal form for the date value(s). `required` follows the dialog data and only\n * applies to the fields of the active prompt type; the datepicker's own parse\n * validators are picked up through the ControlValueAccessor interop.\n */\n protected readonly form = form(this.model, p => {\n required(p.date, { when: () => !!this.dialogData().required && this.dialogData().type === PromptDialogType.Date });\n required(p.from, { when: () => !!this.dialogData().required && this.dialogData().type === PromptDialogType.DateInterval });\n required(p.to, { when: () => !!this.dialogData().required && this.dialogData().type === PromptDialogType.DateInterval });\n });\n\n /** Debounced stream of keyup events on the interval inputs (shorthand typing support). */\n private readonly intervalKeyup = new Subject<{ event: KeyboardEvent; end: boolean }>();\n\n constructor() {\n // Same behavior as DateIntervalChangeDirective, rewired to the signal form:\n // shorthand strings (e.g. \"d/m\") typed in either input are debounced, parsed\n // with SystemUtils.changeDateInterval and written back into the form fields.\n this.intervalKeyup\n .pipe(debounceTime(100), takeUntilDestroyed(inject(DestroyRef)))\n .subscribe(({ event, end }) => {\n const value = (event.target as HTMLInputElement)?.value;\n if (value !== undefined) {\n const m = this.model();\n const interval = new DateInterval(m.from, m.to);\n SystemUtils.changeDateInterval(value, interval, end, event.key === ' ');\n this.model.update(cur => ({ ...cur, from: interval.from ?? null, to: interval.to ?? null }));\n }\n });\n }\n\n /**\n * Blocks the space key on the interval inputs; it is reserved as the\n * \"copy the other bound\" shortcut handled by onIntervalKeyup.\n * @param event - The keydown event from the start or end date input.\n */\n protected onIntervalKeydown(event: KeyboardEvent): void {\n if (event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Forwards keyup events of the interval inputs to the debounced shorthand parser.\n * @param event - The keyup event from the start or end date input.\n * @param end - `true` when the event comes from the end-date input.\n */\n protected onIntervalKeyup(event: KeyboardEvent, end: boolean): void {\n this.intervalKeyup.next({ event, end });\n }\n\n /**\n * Clears both bounds of the date interval.\n */\n protected clearInterval(): void {\n this.model.update(cur => ({ ...cur, from: null, to: null }));\n }\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n const m = this.model();\n this.done.emit({\n value: this.dialogData().type === PromptDialogType.Date\n ? m.date ?? undefined\n : new DateInterval(m.from ?? undefined, m.to ?? undefined),\n type: this.dialogData().type,\n options: this.dialogData().options\n });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [formField]=\"form.date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n @if (form.date().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.date().errors(), 'Data non valida.') }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 4) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" min=\"1750-01-01\" [required]=\"dialogData().required\">\r\n <input matStartDate [formField]=\"form.from\" placeholder=\"Da data\"\r\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false)\">\r\n <input matEndDate [formField]=\"form.to\" placeholder=\"A data\"\r\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true)\">\r\n </mat-date-range-input>\r\n @if (form.from().value() || form.to().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearInterval()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n @if (form.from().invalid() || form.to().invalid()) {\r\n <mat-error>{{ rangeErrorMessage(form.from().errors(), form.to().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\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\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, PromptDialogResult, PromptDialogType, PromptTimeDialogData } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { form, FormField, FormRoot, required } 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 { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { notEmpty, SignalsUtils, time } from '@arsedizioni/ars-utils/core.validators';\n\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n@Component({\n templateUrl: './prompt-time-dialog.component.html',\n styleUrl: './prompt-time-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule,\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatCheckboxModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptTimeDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n readonly done = output<PromptDialogResult>();\n private readonly dialogService = inject(ShellService);\n\n protected readonly dialogData = signal<PromptTimeDialogData>((() => {\n const data: PromptTimeDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type: PromptDialogType.Time,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /** Model backing the signal form. The value is a `\"HH:MM\"` time string. */\n private readonly model = signal<{ value: string }>({\n value: this.dialogData().initialValue ?? '',\n });\n\n /**\n * Signal form for the time value: `required` follows the dialog data and the\n * time validator enforces format and the optional allowed slots.\n */\n protected readonly form = form(this.model, p => {\n required(p.value, { when: () => !!this.dialogData().required });\n notEmpty(p.value, { when: () => !!this.dialogData().required });\n time(p.value, () => this.dialogData().slots);\n });\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit({ value: this.form.value().value() || undefined, options: this.dialogData().options });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n <div>\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"time\" matInput [formField]=\"form.value\">\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n @if(this.dialogData().slots) {\r\n <div class=\"small bold uppercase\">Orari disponibili:</div>\r\n <ul class=\"small\">\r\n @for (s of this.dialogData().slots.replaceAll('-', ' - ').split('|'); track $index) {\r\n <li>{{s}}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\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\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.prompt\n */\nexport * from './prompt/prompt-dialog.component';\nexport * from './prompt-date/prompt-date-dialog.component';\nexport * from './prompt-time/prompt-time-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i7","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.prompt.mjs","sources":["../../../projects/ars-utils/ui.dialogs.prompt/prompt/prompt-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.prompt/prompt/prompt-dialog.component.html","../../../projects/ars-utils/ui.dialogs.prompt/prompt-date/prompt-date-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.prompt/prompt-date/prompt-date-dialog.component.html","../../../projects/ars-utils/ui.dialogs.prompt/prompt-time/prompt-time-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.prompt/prompt-time/prompt-time-dialog.component.html","../../../projects/ars-utils/ui.dialogs.prompt/public_api.ts","../../../projects/ars-utils/ui.dialogs.prompt/arsedizioni-ars-utils-ui.dialogs.prompt.ts"],"sourcesContent":["import { TextFieldModule } from '@angular/cdk/text-field';\nimport { FlexLayoutModule, PromptDialogData, PromptDialogResult, PromptDialogType } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { form, FormField, FormRoot, max, maxLength, min, required } from '@angular/forms/signals';\nimport { notEmpty, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\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 { MatSelectModule } from '@angular/material/select';\nimport { DtoUtils, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\n\n/**\n * Form model of the generic prompt.\n *\n * The DTO side is {@link PromptDialogData.initialValue} on the way in and\n * {@link PromptDialogResult.value} on the way out; both may be absent, while the form\n * always owns the field. `value` stays `any` because its shape follows the prompt type.\n */\ninterface PromptForm {\n /** The prompted value: `''` for textual types, `null` for the number and list types. */\n value: any;\n}\n\n/** Neutral form model: it declares every field the form owns and its empty value. */\nconst _EMPTY_ITEM: PromptForm = { value: '' };\n\n@Component({\n templateUrl: './prompt-dialog.component.html',\n styleUrl: './prompt-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule, MatFormFieldModule, MatInputModule,\n MatButtonModule, MatIconModule, TextFieldModule, MatSelectModule, MatOptionModule, MatCheckboxModule, MatDialogActions,\n MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n readonly done = output<PromptDialogResult>();\n private readonly dialogService = inject(ShellService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type: data.type ?? PromptDialogType.Default,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /** Model backing the signal form. `value` type depends on the prompt type. */\n private readonly model = signal<PromptForm>(this.toForm());\n\n /**\n * Builds the form model from the value carried by the dialog data.\n *\n * Ad-hoc because the empty value follows the prompt type: native inputs bound via\n * `[formField]` report an empty number or an unselected option as `null`, while a\n * text, date or textarea input reports `''`. The list type never takes an initial\n * value: its options are matched by the template.\n * @returns A fresh form model.\n */\n private toForm(): PromptForm {\n const data = this.dialogData();\n const empty: PromptForm = data.type === PromptDialogType.Number || data.type === PromptDialogType.List\n ? { ..._EMPTY_ITEM, value: null }\n : _EMPTY_ITEM;\n return DtoUtils.toForm(\n empty,\n data.initialValue && data.type !== PromptDialogType.List ? { value: data.initialValue } : undefined);\n }\n\n /**\n * Builds the dialog result from the current form model.\n *\n * Ad-hoc because the result also carries the prompt type and the caller's `options`,\n * which are not part of the form model; the value itself goes through\n * {@link DtoUtils.toPayload}, so an input left empty travels as absent instead of as\n * an empty string or a `null`.\n * @returns The result to emit through `done`.\n */\n private toPayload(): PromptDialogResult {\n const data = this.dialogData();\n return { ...DtoUtils.toPayload(this.model()), type: data.type, options: data.options };\n }\n\n /**\n * Signal form for the prompt value. Validators mirror the previous template-driven\n * form: `required` follows the dialog data, `min`/`max` apply to the Number type.\n */\n protected readonly form = form(this.model, p => {\n // The value path is typed as `any` because its shape depends on the prompt type.\n const value = p.value as any;\n required(value, { when: () => !!this.dialogData().required });\n notEmpty(value, { when: () => !!this.dialogData().required });\n min(value, () => this.dialogData().type === PromptDialogType.Number ? this.dialogData().minValue : undefined);\n max(value, () => this.dialogData().type === PromptDialogType.Number ? this.dialogData().maxValue : undefined);\n maxLength(value, () => {\n switch (this.dialogData().type) {\n case PromptDialogType.Default: return 200;\n case PromptDialogType.Text: return 1000;\n default: return undefined;\n }\n });\n });\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n if (this.dialogData().type === PromptDialogType.Date) {\n const date = SystemUtils.parseDate(this.form.value().value() as string);\n if (!date || date.getFullYear() > 9999) {\n this.dialogService.error('Data non valida.');\n return;\n }\n }\n this.done.emit(this.toPayload());\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (!dialogData().type) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"text\" matInput [formField]=\"$any(form.value)\">\r\n @if (form.value().value()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"form.value().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"date\" matInput [formField]=\"$any(form.value)\">\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors(), 'Data non valida.') }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 2) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"number\" matInput [formField]=\"$any(form.value)\">\r\n @if (form.value().value() !== null && form.value().value() !== undefined) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"form.value().value.set(null)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 3) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <textarea matInput [formField]=\"$any(form.value)\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"></textarea>\r\n @if (form.value().value()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"form.value().value.set('')\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"end\">{{$any(form.value().value())?.length || 0}}/1000 </mat-hint>\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 5) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-select [formField]=\"$any(form.value)\">\r\n @for (i of dialogData().initialValue; track $index) {\r\n <mat-option [value]=\"i.value\">\r\n {{i.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\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\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, DestroyRef, inject, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule, PromptDateDialogResult, PromptDialogData, PromptDialogType } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { form, FormField, FormRoot, required } from '@angular/forms/signals';\nimport { SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDatepickerParseErrorFixDirective } from '@arsedizioni/ars-utils/core.date';\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 { DateInterval, DtoUtils, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/**\n * Form model of the date prompt.\n *\n * The DTO side is {@link PromptDialogData.initialValue} on the way in and\n * {@link PromptDateDialogResult.value} on the way out; both leave the value out when\n * there is none, while the form always owns every field. Dates are always `Date | null`\n * — never a `Date | string` — because `null` is what Material's date accessors write\n * when a datepicker input is cleared.\n */\ninterface PromptDateForm {\n /** Value of the single-date type; `null` when the input is empty. */\n date: Date | null;\n /** Start of the range of the date-interval type; `null` when the input is empty. */\n from: Date | null;\n /** End of the range of the date-interval type; `null` when the input is empty. */\n to: Date | null;\n}\n\n/** Neutral form model: it declares every field the form owns and its empty value. */\nconst _EMPTY_ITEM: PromptDateForm = { date: null, from: null, to: null };\n\n@Component({\n templateUrl: './prompt-date-dialog.component.html',\n styleUrl: './prompt-date-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatDatepickerParseErrorFixDirective, MatButtonModule, MatIconModule,\n MatCheckboxModule, MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptDateDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /**\n * Error text for a date range: whichever end is in error speaks for the pair.\n * @param from - Errors of the start field, from `f.from().errors()`.\n * @param to - Errors of the end field, from `f.to().errors()`.\n * @returns The text to show under the range, or `undefined` when neither end is in error.\n */\n protected rangeErrorMessage(\n from: readonly { kind: string; message?: string }[],\n to: readonly { kind: string; message?: string }[]\n ): string | undefined {\n return SignalsUtils.getFieldErrorMessage(from.length ? from : to, 'Intervallo non valido.');\n }\n\n readonly done = output<PromptDateDialogResult>();\n private readonly dialogService = inject(ShellService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n const type = (data.type === PromptDialogType.Date || data.type === PromptDialogType.DateInterval)\n ? data.type\n : PromptDialogType.Date;\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /**\n * Model backing the signal form: `date` serves the single-date type, while\n * `from`/`to` serve the date-interval type. Empty values are `null` (not\n * `undefined`) because signal forms only build child fields for keys whose\n * value is defined, and Material's datepicker accessors report an empty\n * input as `null` anyway; values are normalized to `undefined` on emit.\n */\n private readonly model = signal<PromptDateForm>(this.toForm());\n\n /**\n * Builds the form model from the value carried by the dialog data: a `Date` for the\n * single-date type, a {@link DateInterval} for the date-interval one.\n * @returns A fresh form model, empty when the dialog was opened without a value.\n */\n private toForm(): PromptDateForm {\n const d = this.dialogData();\n if (d.type === PromptDialogType.DateInterval) {\n const interval = d.initialValue as DateInterval | undefined;\n return DtoUtils.toForm(_EMPTY_ITEM, { from: interval?.from, to: interval?.to });\n }\n return DtoUtils.toForm(_EMPTY_ITEM, { date: d.initialValue as Date | undefined });\n }\n\n /**\n * Builds the dialog result from the current form model.\n *\n * Ad-hoc because the two prompt types produce different values out of the same model\n * — a `Date` or a {@link DateInterval} — and because the result also carries the type\n * and the caller's `options`, which are not part of the form model. The dates\n * themselves go through {@link DtoUtils.toPayload}, so a bound left empty travels as\n * absent instead of as `null`.\n * @returns The result to emit through `done`.\n */\n private toPayload(): PromptDateDialogResult {\n const d = this.dialogData();\n const dto = DtoUtils.toPayload(this.model());\n return {\n value: d.type === PromptDialogType.Date ? dto.date : new DateInterval(dto.from, dto.to),\n type: d.type,\n options: d.options\n };\n }\n\n /**\n * Signal form for the date value(s). `required` follows the dialog data and only\n * applies to the fields of the active prompt type; the datepicker's own parse\n * validators are picked up through the ControlValueAccessor interop.\n */\n protected readonly form = form(this.model, p => {\n required(p.date, { when: () => !!this.dialogData().required && this.dialogData().type === PromptDialogType.Date });\n required(p.from, { when: () => !!this.dialogData().required && this.dialogData().type === PromptDialogType.DateInterval });\n required(p.to, { when: () => !!this.dialogData().required && this.dialogData().type === PromptDialogType.DateInterval });\n });\n\n /** Debounced stream of keyup events on the interval inputs (shorthand typing support). */\n private readonly intervalKeyup = new Subject<{ event: KeyboardEvent; end: boolean }>();\n\n constructor() {\n // Same behavior as DateIntervalChangeDirective, rewired to the signal form:\n // shorthand strings (e.g. \"d/m\") typed in either input are debounced, parsed\n // with SystemUtils.changeDateInterval and written back into the form fields.\n this.intervalKeyup\n .pipe(debounceTime(100), takeUntilDestroyed(inject(DestroyRef)))\n .subscribe(({ event, end }) => {\n const value = (event.target as HTMLInputElement)?.value;\n if (value !== undefined) {\n const m = this.model();\n const interval = new DateInterval(m.from ?? undefined, m.to ?? undefined);\n SystemUtils.changeDateInterval(value, interval, end, event.key === ' ');\n this.model.update(cur => ({ ...cur, from: interval.from ?? null, to: interval.to ?? null }));\n }\n });\n }\n\n /**\n * Blocks the space key on the interval inputs; it is reserved as the\n * \"copy the other bound\" shortcut handled by onIntervalKeyup.\n * @param event - The keydown event from the start or end date input.\n */\n protected onIntervalKeydown(event: KeyboardEvent): void {\n if (event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Forwards keyup events of the interval inputs to the debounced shorthand parser.\n * @param event - The keyup event from the start or end date input.\n * @param end - `true` when the event comes from the end-date input.\n */\n protected onIntervalKeyup(event: KeyboardEvent, end: boolean): void {\n this.intervalKeyup.next({ event, end });\n }\n\n /**\n * Clears both bounds of the date interval.\n */\n protected clearInterval(): void {\n this.model.update(cur => ({ ...cur, from: null, to: null }));\n }\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit(this.toPayload());\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [formField]=\"form.date\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n @if (form.date().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.date().errors(), 'Data non valida.') }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 4) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" min=\"1750-01-01\" [required]=\"dialogData().required\">\r\n <input matStartDate [formField]=\"form.from\" placeholder=\"Da data\"\r\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, false)\">\r\n <input matEndDate [formField]=\"form.to\" placeholder=\"A data\"\r\n (keydown)=\"onIntervalKeydown($event)\" (keyup)=\"onIntervalKeyup($event, true)\">\r\n </mat-date-range-input>\r\n @if (form.from().value() || form.to().value()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearInterval()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n @if (form.from().invalid() || form.to().invalid()) {\r\n <mat-error>{{ rangeErrorMessage(form.from().errors(), form.to().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\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\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, PromptDialogResult, PromptDialogType, PromptTimeDialogData } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { form, FormField, FormRoot, required } 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 { DtoUtils, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { notEmpty, SignalsUtils, time } from '@arsedizioni/ars-utils/core.validators';\n\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n/**\n * Form model of the time prompt.\n *\n * The DTO side is {@link PromptTimeDialogData.initialValue} on the way in and\n * {@link PromptDialogResult.value} on the way out; both leave the value out when there\n * is none, while the form always owns the field and holds `''` when empty.\n */\ninterface PromptTimeForm {\n /** The `\"HH:MM\"` time value; `''` when the input is empty. */\n value: string;\n}\n\n/** Neutral form model: it declares every field the form owns and its empty value. */\nconst _EMPTY_ITEM: PromptTimeForm = { value: '' };\n\n@Component({\n templateUrl: './prompt-time-dialog.component.html',\n styleUrl: './prompt-time-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule,\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatCheckboxModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptTimeDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n readonly done = output<PromptDialogResult>();\n private readonly dialogService = inject(ShellService);\n\n protected readonly dialogData = signal<PromptTimeDialogData>((() => {\n const data: PromptTimeDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type: PromptDialogType.Time,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /** Model backing the signal form. The value is a `\"HH:MM\"` time string. */\n private readonly model = signal<PromptTimeForm>(this.toForm());\n\n /**\n * Builds the form model from the value carried by the dialog data.\n * @returns A fresh form model, empty when the dialog was opened without a value.\n */\n private toForm(): PromptTimeForm {\n return DtoUtils.toForm(_EMPTY_ITEM, { value: this.dialogData().initialValue });\n }\n\n /**\n * Builds the dialog result from the current form model.\n *\n * Ad-hoc because the result also carries the caller's `options`, which are not part\n * of the form model; the time itself goes through {@link DtoUtils.toPayload}, so an\n * empty input travels as absent instead of as an empty string.\n * @returns The result to emit through `done`.\n */\n private toPayload(): PromptDialogResult {\n return { ...DtoUtils.toPayload(this.model()), options: this.dialogData().options };\n }\n\n /**\n * Signal form for the time value: `required` follows the dialog data and the\n * time validator enforces format and the optional allowed slots.\n */\n protected readonly form = form(this.model, p => {\n required(p.value, { when: () => !!this.dialogData().required });\n notEmpty(p.value, { when: () => !!this.dialogData().required });\n time(p.value, () => this.dialogData().slots);\n });\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit(this.toPayload());\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n <div>\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"time\" matInput [formField]=\"form.value\">\r\n @if (form.value().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.value().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n @if(this.dialogData().slots) {\r\n <div class=\"small bold uppercase\">Orari disponibili:</div>\r\n <ul class=\"small\">\r\n @for (s of this.dialogData().slots.replaceAll('-', ' - ').split('|'); track $index) {\r\n <li>{{s}}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\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\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.prompt\n */\nexport * from './prompt/prompt-dialog.component';\nexport * from './prompt-date/prompt-date-dialog.component';\nexport * from './prompt-time/prompt-time-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_EMPTY_ITEM","i4","i7","i5"],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ import * as i6 from '@angular/material/select';
|
|
|
25
25
|
import { MatSelectModule } from '@angular/material/select';
|
|
26
26
|
import * as i7 from '@angular/material/tooltip';
|
|
27
27
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
28
|
-
import { SearchFilterPipe, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';
|
|
28
|
+
import { SearchFilterPipe, SafeHtmlPipe, DtoUtils } from '@arsedizioni/ars-utils/core';
|
|
29
29
|
import * as i1 from '@arsedizioni/ars-utils/ui';
|
|
30
30
|
import { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';
|
|
31
31
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -744,6 +744,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImpor
|
|
|
744
744
|
MatDialogClose, SafeHtmlPipe], template: "<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>", styles: [".fill,.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-toolbar{padding:0 5px 0 24px;height:48px;min-height:48px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.fill{min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important;line-height:1.2!important}.smaller{font-size:smaller!important;line-height:1.2!important}.small{font-size:small!important;line-height:1.2!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:1.2!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer .title-container-with-loader,.drawer-small .title-container,.drawer-small .title-container-with-loader{padding-right:5px;padding-bottom:20px;padding-left:0}.drawer .title-container,.drawer-small .title-container{padding-top:20px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding-top:14px}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.bright{filter:brightness(.7)!important}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b,.bold{font-weight:600}.bright{filter:brightness(1.5)!important}}.tree{background-color:transparent!important}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-filtered ::ng-deep .mdc-label,.tree-node-filtered ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-accent, #7894ae)!important}.tree-node-activated ::ng-deep .mdc-label,.tree-node-activated ::ng-deep .mat-mdc-checkbox label{font-weight:700;color:var(--ars-color-secondary, #4a635f)!important}.selecttree-description{padding:0 24px 24px}\n"] }]
|
|
745
745
|
}], ctorParameters: () => [], propDecorators: { done: [{ type: i0.Output, args: ["done"] }], append: [{ type: i0.Output, args: ["append"] }], matTree: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatTree), { isSignal: true }] }] } });
|
|
746
746
|
|
|
747
|
+
/** Neutral form model: it declares every field the form owns and its empty value. */
|
|
748
|
+
const _EMPTY_ITEM = { recipients: '', subject: '', text: '' };
|
|
747
749
|
class SendToDialogComponent {
|
|
748
750
|
constructor() {
|
|
749
751
|
/** Error text of a field: the message declared in the schema, or the shared fallback. */
|
|
@@ -763,12 +765,7 @@ class SendToDialogComponent {
|
|
|
763
765
|
})(), /* @ts-ignore */
|
|
764
766
|
...(ngDevMode ? [{ debugName: "dialogData" }] : /* istanbul ignore next */ []));
|
|
765
767
|
/** Model backing the signal form. */
|
|
766
|
-
this.model = signal(
|
|
767
|
-
recipients: '',
|
|
768
|
-
subject: this.dialogData().subject ?? '',
|
|
769
|
-
text: this.dialogData().text ?? '',
|
|
770
|
-
options: undefined
|
|
771
|
-
}, /* @ts-ignore */
|
|
768
|
+
this.model = signal(this.toForm(), /* @ts-ignore */
|
|
772
769
|
...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
|
|
773
770
|
/**
|
|
774
771
|
* Signal form for the send-to fields: recipients (a required, valid,
|
|
@@ -787,12 +784,29 @@ class SendToDialogComponent {
|
|
|
787
784
|
maxLength(p.text, 1000);
|
|
788
785
|
});
|
|
789
786
|
}
|
|
787
|
+
/**
|
|
788
|
+
* Builds the form model from the dialog data, which may pre-fill subject and body.
|
|
789
|
+
* @returns A fresh form model.
|
|
790
|
+
*/
|
|
791
|
+
toForm() {
|
|
792
|
+
const data = this.dialogData();
|
|
793
|
+
return DtoUtils.toForm(_EMPTY_ITEM, { subject: data.subject, text: data.text });
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* Builds the dialog result from the current form model.
|
|
797
|
+
*
|
|
798
|
+
* Ad-hoc because the result also carries the caller's `options`, which the dialog
|
|
799
|
+
* only passes through and are therefore not part of the form model.
|
|
800
|
+
* @returns The message to emit through `done` or `populate`.
|
|
801
|
+
*/
|
|
802
|
+
toPayload() {
|
|
803
|
+
return { ...DtoUtils.toPayload(this.model()), options: this.dialogData().options };
|
|
804
|
+
}
|
|
790
805
|
/**
|
|
791
806
|
* Confirm the form and emit the result.
|
|
792
807
|
*/
|
|
793
808
|
ok() {
|
|
794
|
-
this.
|
|
795
|
-
this.done.emit(this.model());
|
|
809
|
+
this.done.emit(this.toPayload());
|
|
796
810
|
}
|
|
797
811
|
/**
|
|
798
812
|
* Request the host to populate the recipient list.
|
|
@@ -800,7 +814,7 @@ class SendToDialogComponent {
|
|
|
800
814
|
*/
|
|
801
815
|
populateRecipients() {
|
|
802
816
|
if (this.dialogData().canPopulate) {
|
|
803
|
-
this.populate.emit({ item: this.
|
|
817
|
+
this.populate.emit({ item: this.toPayload(), source: this });
|
|
804
818
|
}
|
|
805
819
|
}
|
|
806
820
|
/**
|