iss-ctrl 0.0.21 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs +110 -0
- package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs.map +1 -0
- package/fesm2022/iss-ctrl-base.mjs +663 -0
- package/fesm2022/iss-ctrl-base.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.field-Dj5EGLUr.mjs +92 -0
- package/fesm2022/iss-ctrl-checkbox.field-Dj5EGLUr.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.mjs +143 -0
- package/fesm2022/iss-ctrl-checkbox.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs +31 -0
- package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.field-BLLAjBbP.mjs +76 -0
- package/fesm2022/iss-ctrl-chips.field-BLLAjBbP.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.mjs +168 -0
- package/fesm2022/iss-ctrl-chips.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs +38 -0
- package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.field-BSpXukpO.mjs +98 -0
- package/fesm2022/iss-ctrl-date-picker.field-BSpXukpO.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.mjs +200 -0
- package/fesm2022/iss-ctrl-date-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs +40 -0
- package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.field-CjNHU1RW.mjs +97 -0
- package/fesm2022/iss-ctrl-date-range-picker.field-CjNHU1RW.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.mjs +307 -0
- package/fesm2022/iss-ctrl-date-range-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs +41 -0
- package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.field-DGMY9PaU.mjs +98 -0
- package/fesm2022/iss-ctrl-datetime-picker.field-DGMY9PaU.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.mjs +226 -0
- package/fesm2022/iss-ctrl-datetime-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs +42 -0
- package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs.map +1 -0
- package/fesm2022/iss-ctrl-file-picker.field-CbepZaX6.mjs +210 -0
- package/fesm2022/iss-ctrl-file-picker.field-CbepZaX6.mjs.map +1 -0
- package/fesm2022/iss-ctrl-file-picker.mjs +272 -0
- package/fesm2022/iss-ctrl-file-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.field-Ctlf3OCN.mjs +104 -0
- package/fesm2022/iss-ctrl-input.field-Ctlf3OCN.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.mjs +204 -0
- package/fesm2022/iss-ctrl-input.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs +22 -0
- package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs.map +1 -0
- package/fesm2022/iss-ctrl-iss-ctrl-DvnkwSMG.mjs +1789 -0
- package/fesm2022/iss-ctrl-iss-ctrl-DvnkwSMG.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-event-bOt6IlIo.mjs → iss-ctrl-load-event-CuZ7pMjk.mjs} +4 -3
- package/fesm2022/iss-ctrl-load-event-CuZ7pMjk.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs → iss-ctrl-load-options-event-B10rhdqh.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs.map → iss-ctrl-load-options-event-B10rhdqh.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs → iss-ctrl-load-value-event-C-aRgKLx.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs.map → iss-ctrl-load-value-event-C-aRgKLx.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-mobile.field-DXVYT3q-.mjs +77 -0
- package/fesm2022/iss-ctrl-mobile.field-DXVYT3q-.mjs.map +1 -0
- package/fesm2022/iss-ctrl-mobile.mjs +2465 -0
- package/fesm2022/iss-ctrl-mobile.mjs.map +1 -0
- package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs +22 -0
- package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs → iss-ctrl-note.field-C8X9-mgD.mjs} +2 -2
- package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs.map → iss-ctrl-note.field-C8X9-mgD.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-plate.field-aI81tAOV.mjs +92 -0
- package/fesm2022/iss-ctrl-plate.field-aI81tAOV.mjs.map +1 -0
- package/fesm2022/iss-ctrl-plate.mjs +491 -0
- package/fesm2022/iss-ctrl-plate.mjs.map +1 -0
- package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs +179 -0
- package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.field-B_JjPIlb.mjs +96 -0
- package/fesm2022/iss-ctrl-radio.field-B_JjPIlb.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.mjs +101 -0
- package/fesm2022/iss-ctrl-radio.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs +30 -0
- package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs → iss-ctrl-replace-api-keys-DLnagkOr.mjs} +2 -2
- package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs.map → iss-ctrl-replace-api-keys-DLnagkOr.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-select.field-DoU4G_8t.mjs +87 -0
- package/fesm2022/iss-ctrl-select.field-DoU4G_8t.mjs.map +1 -0
- package/fesm2022/iss-ctrl-select.mjs +387 -0
- package/fesm2022/iss-ctrl-select.mjs.map +1 -0
- package/fesm2022/iss-ctrl-select.viewer-Dv9M-lG-.mjs +30 -0
- package/fesm2022/iss-ctrl-select.viewer-Dv9M-lG-.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs → iss-ctrl-set-value-event-Dhw0Vj5J.mjs} +2 -2
- package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs.map → iss-ctrl-set-value-event-Dhw0Vj5J.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-slide-toggle.field-TVVbAr6p.mjs +85 -0
- package/fesm2022/iss-ctrl-slide-toggle.field-TVVbAr6p.mjs.map +1 -0
- package/fesm2022/iss-ctrl-slide-toggle.mjs +72 -0
- package/fesm2022/iss-ctrl-slide-toggle.mjs.map +1 -0
- package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs +34 -0
- package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-table.field-B5FxF6hn.mjs → iss-ctrl-table.field-E0r9w0os.mjs} +142 -140
- package/fesm2022/iss-ctrl-table.field-E0r9w0os.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.field-CmHPDpk-.mjs +82 -0
- package/fesm2022/iss-ctrl-textarea.field-CmHPDpk-.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.mjs +115 -0
- package/fesm2022/iss-ctrl-textarea.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs +22 -0
- package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.field-Cb0I5Ut1.mjs +77 -0
- package/fesm2022/iss-ctrl-time-picker.field-Cb0I5Ut1.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.mjs +170 -0
- package/fesm2022/iss-ctrl-time-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs +22 -0
- package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.field-Bj8WrkB-.mjs +105 -0
- package/fesm2022/iss-ctrl-toggle-button.field-Bj8WrkB-.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs +156 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs +30 -0
- package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs.map +1 -0
- package/fesm2022/iss-ctrl-tokens.mjs +25 -0
- package/fesm2022/iss-ctrl-tokens.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs → iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs} +2 -2
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs.map → iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-user-picker.field-BH63sZ-X.mjs → iss-ctrl-user-picker.field-BIzB5ZX6.mjs} +151 -150
- package/fesm2022/iss-ctrl-user-picker.field-BIzB5ZX6.mjs.map +1 -0
- package/fesm2022/iss-ctrl.mjs +3 -1
- package/fesm2022/iss-ctrl.mjs.map +1 -1
- package/package.json +69 -1
- package/types/iss-ctrl-base.d.ts +306 -0
- package/types/iss-ctrl-checkbox.d.ts +45 -0
- package/types/iss-ctrl-chips.d.ts +41 -0
- package/types/iss-ctrl-date-picker.d.ts +75 -0
- package/types/iss-ctrl-date-range-picker.d.ts +95 -0
- package/types/iss-ctrl-datetime-picker.d.ts +77 -0
- package/types/iss-ctrl-file-picker.d.ts +95 -0
- package/types/iss-ctrl-input.d.ts +76 -0
- package/types/iss-ctrl-mobile.d.ts +91 -0
- package/types/iss-ctrl-plate.d.ts +54 -0
- package/types/iss-ctrl-radio.d.ts +34 -0
- package/types/iss-ctrl-select.d.ts +75 -0
- package/types/iss-ctrl-slide-toggle.d.ts +26 -0
- package/types/iss-ctrl-textarea.d.ts +30 -0
- package/types/iss-ctrl-time-picker.d.ts +48 -0
- package/types/iss-ctrl-toggle-button.d.ts +41 -0
- package/types/iss-ctrl-tokens.d.ts +21 -0
- package/types/iss-ctrl.d.ts +120 -1810
- package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs +0 -9683
- package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs.map +0 -1
- package/fesm2022/iss-ctrl-load-event-bOt6IlIo.mjs.map +0 -1
- package/fesm2022/iss-ctrl-table.field-B5FxF6hn.mjs.map +0 -1
- package/fesm2022/iss-ctrl-user-picker.field-BH63sZ-X.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss-ctrl-iss-ctrl-DvnkwSMG.mjs","sources":["../../../projects/iss/src/shared/classes/field-async-validation.ts","../../../projects/iss/src/shared/classes/field-config.ts","../../../projects/iss/src/shared/classes/field-action-config.ts","../../../projects/iss/src/shared/classes/field-event.ts","../../../projects/iss/src/shared/classes/iss-field.ts","../../../projects/iss/src/shared/indexes/validators.index.ts","../../../projects/iss/src/shared/services/form-engine.ts","../../../projects/iss/src/shared/indexes/components.index.ts","../../../projects/iss/src/shared/indexes/services.index.ts","../../../projects/iss/src/shared/indexes/viewers.index.ts","../../../projects/iss/src/shared/services/loader.ts","../../../projects/iss/src/shared/tokens/field.token.ts","../../../projects/iss/src/components/outlet/field-data-injector.ts","../../../projects/iss/src/components/outlet/outlet.ts","../../../projects/iss/src/events/triggers/event-trigger.ts","../../../projects/iss/src/events/triggers/event-trigger-manager.ts","../../../projects/iss/src/events/event-handler.ts","../../../projects/iss/src/components/controls/base/field-base.ts","../../../projects/iss/src/shared/constants/view-provider.const.ts","../../../projects/iss/src/shared/constants/placeholder-regex.const.ts","../../../projects/iss/src/shared/constants/validation.const.ts","../../../projects/iss/src/shared/pipes/translate.pipe.ts","../../../projects/iss/src/components/shared/validation-message.ts","../../../projects/iss/src/components/shared/field-viewer.ts","../../../projects/iss/src/shared/pipes/arabic-number.pipe.ts","../../../projects/iss/src/components/controls/plate/plate-letter.pipe.ts","../../../projects/iss/src/components/controls/user-picker/employee.ts","../../../projects/iss/src/shared/utilities/replace-placeholder.util.ts","../../../projects/iss/src/components/controls/file-picker/file-handler.ts","../../../projects/iss/src/shared/utilities/array-from.util.ts","../../../projects/iss/src/shared/utilities/get-property-by-path.util.ts","../../../projects/iss/src/components/controls/file-picker/format-file-size.util.ts","../../../projects/iss/src/validators/core.validator.ts","../../../projects/iss/src/validators/file.validator.ts","../../../projects/iss/src/validators/time.validator.ts","../../../projects/iss/src/public-api.ts","../../../projects/iss/src/iss-ctrl.ts"],"sourcesContent":["export class FieldAsyncValidation {\r\n alreadyExists: string | undefined;\r\n\r\n constructor(asyncValidation: any) {\r\n this.alreadyExists = asyncValidation?.alreadyExists;\r\n }\r\n}\r\n","import { signal, WritableSignal } from \"@angular/core\";\r\n\r\n/**\r\n * Per-field configuration, reachable as `field.config` and consumed by the `iss-field-*`\r\n * components. Every entry is a signal, so it can be changed at runtime by field events.\r\n *\r\n * Not every key applies to every field — the class doc of each `iss-field-*` component\r\n * lists exactly which of these it reads.\r\n *\r\n * ### Keys by area\r\n * - **Common:** `type` · `disabled` · `readonly` · `placeholder` · `suffix` · `hideLabel` · `multiple`\r\n * - **Bounds:** `min` · `max` · `minLength` · `maxLength`\r\n * - **Dates:** `minDate` · `maxDate` · `dateFilter` · `hijriCalendar` · `emitHijri`\r\n * - **Attachments:** `allowedFileSize` · `allowedFileTypes` · `minFilesCount` · `maxFilesCount` · `templateId` · `templateUrl`\r\n * - **Users:** `minUsersCount` · `maxUsersCount`\r\n * - **Table:** `showInTableColumns` · `tableWithFilter` · `tableWithSort` · `tableWithPagination`\r\n *\r\n * @example\r\n * ```json\r\n * { \"name\": \"email\", \"type\": \"text_input\", \"config\": { \"type\": \"email\", \"maxLength\": 120 } }\r\n * ```\r\n */\r\nexport class FieldConfig {\r\n /**\r\n * Native input type for `text_input` (`text`, `email`, `number`, `password`, …).\r\n */\r\n type: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Disables the control; the underlying `FormControl` is disabled on init.\r\n */\r\n disabled: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Shows the value but blocks interaction. Unlike `disabled`, the value is still submitted.\r\n */\r\n readonly: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Placeholder text shown while the field is empty.\r\n */\r\n placeholder: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Text rendered after the value (a unit or currency, for example).\r\n */\r\n suffix: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Hides the field label without removing it from the accessibility tree.\r\n */\r\n hideLabel: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Allows more than one value — multi select, multi file upload, multi toggle.\r\n */\r\n multiple: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Minimum number of characters. Source: `config.minLength`.\r\n */\r\n minLength: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Maximum number of characters. Source: `config.maxLength`.\r\n */\r\n maxLength: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Minimum numeric value (also the minimum user count for the user picker).\r\n */\r\n min: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Maximum numeric value (also the maximum user count for the user picker).\r\n */\r\n max: WritableSignal<number | undefined> = signal(undefined);\r\n\r\n /**\r\n * Earliest selectable date for date, datetime and date-range fields.\r\n */\r\n minDate: WritableSignal<Date | undefined> = signal(undefined);\r\n /**\r\n * Latest selectable date for date, datetime and date-range fields.\r\n */\r\n maxDate: WritableSignal<Date | undefined> = signal(undefined);\r\n /**\r\n * Restricts the calendar to working days. Source: `config.acceptWorkDaysOnly`.\r\n */\r\n dateFilter: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Renders the calendar as an Umm al-Qura Hijri calendar. The emitted value stays Gregorian\r\n * unless {@link FieldConfig.emitHijri} is also on. Source: `config.hijriCalendar`, also\r\n * accepted as `config.HijriCalendar`.\r\n */\r\n hijriCalendar: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Emits the picked date as a Hijri date instead of a Gregorian one — the same day emitted\r\n * as `1447-03-16` rather than `2025-09-08`. Implies {@link FieldConfig.hijriCalendar}: a\r\n * Hijri value is always picked from a Hijri calendar.\r\n */\r\n emitHijri: WritableSignal<boolean | undefined> = signal(undefined);\r\n\r\n /**\r\n * Id of a downloadable template offered next to an attachment field.\r\n */\r\n templateId: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Direct URL of the downloadable template for an attachment field.\r\n */\r\n templateUrl: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Maximum size per uploaded file. Source: `config.allowedSize`.\r\n */\r\n allowedFileSize: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Comma separated list of accepted file extensions or MIME types.\r\n */\r\n allowedFileTypes: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Maximum number of files that may be attached.\r\n */\r\n maxFilesCount: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Minimum number of files required.\r\n */\r\n minFilesCount: WritableSignal<number | undefined> = signal(undefined);\r\n\r\n /**\r\n * Maximum number of users selectable in a user picker.\r\n */\r\n maxUsersCount: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Minimum number of users required in a user picker.\r\n */\r\n minUsersCount: WritableSignal<number | undefined> = signal(undefined);\r\n\r\n /**\r\n * Parsed from the field definition but not consumed yet — table columns currently come\r\n * from `field.children`.\r\n */\r\n showInTableColumns: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Enables the filter row on a `table` field.\r\n */\r\n tableWithFilter: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Enables column sorting on a `table` field.\r\n */\r\n tableWithSort: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Enables the paginator on a `table` field.\r\n */\r\n tableWithPagination: WritableSignal<boolean | undefined> = signal(undefined);\r\n\r\n constructor(config: any) {\r\n this.type.set(config?.type);\r\n this.suffix.set(config?.suffix);\r\n this.placeholder.set(config?.placeholder);\r\n this.readonly.set(config?.readonly);\r\n this.disabled.set(config?.disabled);\r\n this.multiple.set(config?.multiple);\r\n this.hideLabel.set(config?.hideLabel);\r\n this.min.set(config?.min);\r\n this.max.set(config?.max);\r\n this.minDate.set(config?.minDate);\r\n this.maxDate.set(config?.maxDate);\r\n this.dateFilter.set(config?.acceptWorkDaysOnly);\r\n this.hijriCalendar.set(config?.hijriCalendar ?? config?.HijriCalendar);\r\n this.emitHijri.set(config?.emitHijri);\r\n this.minLength.set(config?.minLength);\r\n this.maxLength.set(config?.maxLength);\r\n this.allowedFileSize.set(config?.allowedSize);\r\n this.allowedFileTypes.set(config?.allowedFileTypes);\r\n this.maxFilesCount.set(config?.maxFilesCount);\r\n this.minFilesCount.set(config?.minFilesCount);\r\n this.templateId.set(config?.templateId);\r\n this.templateUrl.set(config?.templateUrl);\r\n this.maxUsersCount.set(config?.maxUsersCount);\r\n this.minUsersCount.set(config?.minUsersCount);\r\n this.showInTableColumns.set(config?.showInTableColumns);\r\n this.tableWithFilter.set(config?.tableWithFilter);\r\n this.tableWithSort.set(config?.tableWithSort);\r\n this.tableWithPagination.set(config?.tableWithPagination);\r\n }\r\n}\r\n","import { EventConfigFn } from \"../interfaces/event-strategy\";\r\nimport { ActionTriggerFn } from \"../interfaces/event-trigger-fn\";\r\nimport { Loader } from \"../services/loader\";\r\n\r\nexport class FieldActionConfig {\r\n operator: \"or\" | \"and\" | undefined;\r\n setValueFromApiResponse: string | undefined;\r\n setValueFromRequestDto: string | undefined;\r\n setValueFromLoggedInUser: string | undefined;\r\n setValueFromJsonValue: string | undefined;\r\n triggerFromApiResponse: string | undefined;\r\n triggerFromJsonValue: string | undefined;\r\n replaceApiKeyFromField: string | undefined;\r\n fn: EventConfigFn | undefined = undefined;\r\n fnPromise: Promise<EventConfigFn> | undefined = undefined;\r\n afterFetchFn: EventConfigFn | undefined = undefined;\r\n afterFetchFnPromise: Promise<EventConfigFn> | undefined = undefined;\r\n triggerFn!: ActionTriggerFn;\r\n triggerFnPromise: Promise<ActionTriggerFn> | undefined = undefined;\r\n disableAfterFetching: boolean | undefined = false;\r\n disableAfterSetValue: boolean | undefined = false;\r\n\r\n constructor(action: any, loader: Loader) {\r\n this.operator = action.config?.operator;\r\n this.setValueFromApiResponse = action.config?.setValueFromApiResponse;\r\n this.setValueFromRequestDto = action.config?.setValueFromRequestDto;\r\n this.setValueFromLoggedInUser = action.config?.setValueFromLoggedInUser;\r\n this.setValueFromJsonValue = action.config?.setValueFromJsonValue;\r\n this.triggerFromApiResponse = action.config?.fromApiResponse;\r\n this.triggerFromJsonValue = action.config?.fromApiResponse;\r\n this.replaceApiKeyFromField = action.config?.replaceApiKeyFromField;\r\n this.disableAfterFetching = action.config?.disableAfterFetching ?? false;\r\n this.disableAfterSetValue = action.config?.disableAfterSetValue ?? false;\r\n\r\n if (action.config?.fn) {\r\n const fn = loader.loadService<EventConfigFn>(action.config.fn);\r\n if (fn) {\r\n this.fnPromise = fn();\r\n }\r\n }\r\n\r\n if (action.config?.afterFetchFn) {\r\n const fn = loader.loadService<EventConfigFn>(action.config.afterFetchFn);\r\n if (fn) {\r\n this.afterFetchFnPromise = fn();\r\n }\r\n }\r\n\r\n if (action.config?.triggerFn) {\r\n const fn = loader.loadService<ActionTriggerFn>(action.config.triggerFn);\r\n if (fn) {\r\n this.triggerFnPromise = fn();\r\n }\r\n }\r\n }\r\n}\r\n","import { EventStrategy } from \"../interfaces/event-strategy\";\r\nimport { Loader } from \"../services/loader\";\r\nimport { FieldActionConfig } from \"./field-action-config\";\r\n\r\nexport class FieldEvent {\r\n id: number;\r\n name: string;\r\n value: string;\r\n trackedFieldName: string;\r\n triggered: boolean;\r\n config: FieldActionConfig;\r\n fn: EventStrategy | undefined;\r\n fnPromise: Promise<EventStrategy> | undefined = undefined;\r\n\r\n constructor(action: any, loader: Loader) {\r\n this.id = action.id;\r\n this.name = action.name;\r\n this.value = action.value;\r\n this.trackedFieldName = action.eventSourceName;\r\n this.triggered = false;\r\n this.config = new FieldActionConfig(action, loader);\r\n const actionFn = loader.loadService<EventStrategy>(action.name);\r\n if (actionFn) {\r\n this.fnPromise = actionFn();\r\n }\r\n this.fn = undefined;\r\n }\r\n}\r\n","import { isSignal, signal, WritableSignal } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { Option } from \"iss-ctrl/base\";\nimport { Loader } from \"../services/loader\";\nimport { FieldAsyncValidation } from \"./field-async-validation\";\nimport { FieldConfig } from \"./field-config\";\nimport { FieldEvent } from \"./field-event\";\n\n/**\n * Runtime model of a single form field, built from the JSON definition returned by the API.\n *\n * It is what `iss-field-*` components inject through the `FIELD_DATA` token, and the object\n * field events read from and write to. Signal-valued members can be changed at runtime and\n * the rendered field reacts immediately.\n *\n * ### Properties\n * | Property | Type | Description |\n * | --- | --- | --- |\n * | `id` | `number` | Unique field id. |\n * | `name` | `string` | Control name inside the form group. |\n * | `type` | `string` | Key into the `COMPONENTS` index (`text_input`, `dropdown_list`, …). |\n * | `base` | `string` | Underlying data type of the field. |\n * | `label()` | `string` | Visible label. |\n * | `hint()` | `string` | Helper text under the field. |\n * | `options()` | `Option[]` | Choices for select, radio, checkbox and toggle fields. |\n * | `api()` | `string` | Endpoint used to load options or lookups. |\n * | `mode()` | `\"edit\" \\| \"view\"` | Renders the control or the read-only viewer. |\n * | `visible()` | `boolean` | Whether the field is rendered at all. |\n * | `loading()` | `boolean` | Shows the field's own loading state. |\n * | `config` | `FieldConfig` | Per-type configuration — see {@link FieldConfig}. |\n * | `validation` | `any` | Synchronous validation rules, exactly as the JSON declared them. |\n * | `validationFns` | `Record<string, Function>` | Validator factory behind each active rule, resolved by the outlet. |\n * | `asyncValidation` | `FieldAsyncValidation` | Remote validation rules. |\n * | `events` | `FieldEvent[]` | Cross-field reactions (show, hide, set value, …). |\n * | `children` | `IssField[]` | Nested fields, used by table and group fields. |\n * | `value` / `defaultValue` | `string` | Initial and fallback raw values. |\n * | `jsonValue` | `any` | Initial resolved value for controls with a rich payload. |\n * | `ctrlValue()` | `string \\| null` | Live raw value of the control. |\n * | `ctrlJsonValue()` | `any` | Live resolved value (selected options, files, users, …). |\n * | `response()` / `apiResponse` | `any` | Latest payload returned for this field. |\n */\nexport class IssField {\n id: number;\n name: string;\n type: string;\n base: string;\n label: WritableSignal<string> = signal(\"\");\n hint: WritableSignal<string> = signal(\"\");\n options: WritableSignal<Option[]> = signal([]);\n api: WritableSignal<string> = signal(\"\");\n mode: WritableSignal<\"edit\" | \"view\"> = signal(\"edit\");\n visible: WritableSignal<boolean>;\n wasVisible: WritableSignal<boolean> = signal(true);\n events: FieldEvent[];\n validation: any;\n // The lazily imported factory behind each active rule in `validation`, keyed by rule name.\n // The factories are kept beside the rules instead of inside them so `validation` stays the\n // object the JSON declared: what a rule says is the API's, how it is applied is ours.\n validationFns: Record<string, Function> = {};\n asyncValidation: FieldAsyncValidation;\n children: IssField[];\n apiResponse: BehaviorSubject<any> = new BehaviorSubject(null);\n response: WritableSignal<any> = signal(null);\n config: FieldConfig;\n value: string;\n jsonValue: any;\n defaultValue: string;\n ctrlValue: WritableSignal<string | null> = signal(null);\n ctrlJsonValue: WritableSignal<any> = signal(null);\n loading: WritableSignal<boolean> = signal(false);\n\n constructor(field: any, loader: Loader) {\n this.id = field.id;\n this.name = field.name;\n this.type = field.type;\n this.base = field.base;\n\n if (isSignal(field.label)) {\n this.label = field.label;\n } else {\n this.label = signal(field.label ?? field.title);\n }\n\n if (isSignal(field.hint)) {\n this.hint = field.hint;\n } else {\n this.hint = signal(field.hint);\n }\n\n if (isSignal(field.options)) {\n this.options = field.options ?? [];\n } else {\n this.options = signal(field.options ?? []);\n }\n\n if (isSignal(field.api)) {\n this.api = field.api;\n } else {\n this.api = signal(field.api);\n }\n\n field.mode = field.mode ?? \"edit\";\n if (isSignal(field.mode)) {\n this.mode = field.mode;\n } else {\n this.mode = signal(field.mode);\n }\n\n if (!field.events) {\n field.events = [];\n }\n\n // this.mode() and not field.mode: the caller may have passed a signal\n this.visible = signal(!field.events.some((obj: any) => obj.name === \"show\" && this.mode() === \"edit\"));\n this.events = field.events.map((action: any) => new FieldEvent(action, loader));\n this.validation = field.validation;\n this.asyncValidation = new FieldAsyncValidation(field.asyncValidation);\n this.children = field.children;\n this.config = new FieldConfig(field.config);\n this.value = field?.value;\n this.ctrlValue.set(field.value);\n this.ctrlJsonValue.set(field?.jsonValue);\n this.loading.set(field?.loading ?? false);\n this.defaultValue = field?.defaultValue;\n this.jsonValue = field?.jsonValue;\n this.apiResponse = new BehaviorSubject(null);\n }\n\n updateVisibility(value: boolean) {\n this.wasVisible.set(this.visible());\n this.visible.set(value);\n }\n}\n","import { DynamicImport } from \"../interfaces/import\";\r\n\r\nexport const VALIDATORS: DynamicImport<Function> = {\r\n required: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.required),\r\n max: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.max),\r\n min: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.min),\r\n requiredTrue: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.requiredTrue),\r\n email: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.email),\r\n minLength: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.minLength),\r\n maxLength: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.maxLength),\r\n pattern: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.pattern),\r\n regExp: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.pattern),\r\n nullValidator: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.null),\r\n beforeDate: () => import(\"../../validators/time.validator\").then((c) => c.TimeValidator.beforeDate),\r\n afterDate: () => import(\"../../validators/time.validator\").then((c) => c.TimeValidator.afterDate),\r\n within: () => import(\"../../validators/time.validator\").then((c) => c.TimeValidator.afterDate),\r\n maxFilesCount: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.maxCount),\r\n minFilesCount: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.minCount),\r\n fileSize: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.size),\r\n fileType: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.type),\r\n};\r\n\r\n/**\r\n * Whether a rule in a field's `validation` is switched on.\r\n *\r\n * The rule's value is the argument its validator is built with, so it is also what says\r\n * whether the rule applies at all: `{ \"required\": false }` is an optional field, not a\r\n * required one, and a rule the API left out or sent as null is off the same way. Values\r\n * that are falsy but meaningful — `0`, `\"\"` — are rules, so only the three off states are\r\n * rejected here.\r\n */\r\nexport function isActiveValidationRule(value: unknown): boolean {\r\n return value !== undefined && value !== null && value !== false;\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AbstractControl, AsyncValidatorFn, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\r\nimport { map, merge, Observable, of } from \"rxjs\";\r\nimport { FieldAsyncValidation } from \"../classes/field-async-validation\";\r\nimport { FieldEvent } from \"../classes/field-event\";\r\nimport { IssField } from \"../classes/iss-field\";\r\nimport { isActiveValidationRule } from \"../indexes/validators.index\";\r\nimport { FieldChange } from \"../interfaces/event-strategy\";\r\n\r\ninterface OutletRegistration {\r\n fields: IssField[];\r\n expectedFieldNames: string[];\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class FormEngine {\r\n // Fields are stored per host FormGroup, never on the service itself: a single root\r\n // FormEngine serves every form on the page, including the nested outlet that\r\n // iss-field-table renders against its own tableOutletForm.\r\n // The outer WeakMap lets a form's entry be collected with the form. The inner Map is\r\n // keyed by the outlet that registered them, so several outlets can share one host form\r\n // without overwriting each other, and re-registering the same outlet replaces its own\r\n // contribution instead of accumulating stale entries.\r\n readonly #registry: WeakMap<FormGroup, Map<object, OutletRegistration>> = new WeakMap<FormGroup, Map<object, OutletRegistration>>();\r\n\r\n registerFields(form: FormGroup, owner: object, fields: IssField[]): void {\r\n this.#registration(form, owner).fields = fields;\r\n }\r\n\r\n // The names an outlet expects to see as controls on the host form. An outlet is ready\r\n // once every one of them has been added, so this is registered up front in ngOnInit,\r\n // before the fields themselves resolve.\r\n registerExpectedFieldNames(form: FormGroup, owner: object, names: string[]): void {\r\n this.#registration(form, owner).expectedFieldNames = names;\r\n }\r\n\r\n unregisterOutlet(form: FormGroup, owner: object): void {\r\n const owners: Map<object, OutletRegistration> | undefined = this.#registry.get(form);\r\n if (!owners) {\r\n return;\r\n }\r\n owners.delete(owner);\r\n if (!owners.size) {\r\n this.#registry.delete(form);\r\n }\r\n }\r\n\r\n getFields(form: FormGroup): IssField[] {\r\n return this.#registrations(form).map((registration: OutletRegistration) => registration.fields).flat();\r\n }\r\n\r\n getExpectedFieldNames(form: FormGroup): string[] {\r\n const names: string[] = this.#registrations(form).map((registration: OutletRegistration) => registration.expectedFieldNames).flat();\r\n return Array.from(new Set(names));\r\n }\r\n\r\n // Searches nested children too, so a field inside a table can be found from the form\r\n // that hosts the table.\r\n getField(form: FormGroup, name: string, fields: IssField[] = this.getFields(form)): IssField | undefined {\r\n const match: IssField | undefined = fields.find((field: IssField) => field.name === name);\r\n if (match) {\r\n return match;\r\n }\r\n return fields\r\n .filter((field: IssField) => field.children?.length)\r\n .reduce((found: IssField | undefined, field: IssField) => found ?? this.getField(form, name, field.children), undefined);\r\n }\r\n\r\n getControlValue(form: FormGroup, name: string) {\r\n const ctrlValue = form.get(name)?.getRawValue();\r\n if (ctrlValue !== null && ctrlValue !== undefined && ctrlValue !== \"\") {\r\n return ctrlValue;\r\n }\r\n return this.getField(form, name)?.value;\r\n }\r\n\r\n createValidators(field: IssField): ValidatorFn[] {\r\n if (!this.fieldHasValidation(field)) {\r\n return [Validators.nullValidator];\r\n }\r\n return this.#validatorsToNgValidators(field);\r\n }\r\n\r\n createAsyncValidators(field: IssField): AsyncValidatorFn[] {\r\n if (!(field && field.asyncValidation)) {\r\n return [];\r\n }\r\n return this.#asyncValidatorsToNgValidators(field) as AsyncValidatorFn[];\r\n }\r\n\r\n getFieldValue(field: IssField) {\r\n let fieldValue = field.value;\r\n if (field.value === undefined && field.defaultValue) {\r\n fieldValue = field.defaultValue;\r\n }\r\n return fieldValue ?? null;\r\n }\r\n\r\n trackChangesEvents(field: IssField, form: FormGroup): Observable<FieldChange> {\r\n const changes$: Observable<FieldChange>[] = [];\r\n const masterNames: Set<string> = new Set();\r\n field.events.forEach((action: FieldEvent) => {\r\n this.processTrackChanges(action.trackedFieldName, masterNames, changes$, field, form);\r\n });\r\n return merge(...changes$);\r\n }\r\n\r\n trackChangesValidations(field: IssField, form: FormGroup): Observable<FieldChange> {\r\n const changes$: Observable<FieldChange>[] = [];\r\n const masterNames: Set<string> = new Set();\r\n // A rule that names another field — `beforeDate`, say — carries that name as its value, and\r\n // `processTrackChanges` ignores every value that is not a string.\r\n const iterateOn = Object.entries(field.validation ?? {});\r\n iterateOn.forEach((validationObj: any) => {\r\n this.processTrackChanges(validationObj[1], masterNames, changes$, field, form);\r\n });\r\n return merge(...changes$);\r\n }\r\n\r\n processTrackChanges(masterName: any, masterNames: Set<string>, changes$: Observable<FieldChange>[], field: IssField, form: FormGroup) {\r\n if (typeof masterName !== \"string\") {\r\n return;\r\n }\r\n\r\n const masterCtrl: AbstractControl | null = form.get(masterName);\r\n const masterField: IssField | undefined = this.getField(form, masterName);\r\n\r\n if (!masterField) {\r\n return;\r\n }\r\n\r\n if (!masterCtrl) {\r\n return;\r\n }\r\n\r\n if (masterNames.has(masterName)) {\r\n return;\r\n }\r\n\r\n masterNames.add(masterName);\r\n // if the field tracks itself, will not subscribe to value changes, it avoids infinite loops\r\n if (field.name === masterName) {\r\n changes$.push(of({\r\n trackedField: masterField,\r\n trackedControl: masterCtrl,\r\n value: masterCtrl.value\r\n }));\r\n } else {\r\n changes$.push(this.#mapMasterFieldValueChangesToFieldChanges(masterField, masterCtrl));\r\n }\r\n }\r\n\r\n // A field carries validation only where a rule is actually switched on: one sent as `false`\r\n // or `null` says the field is free of it, so it counts for nothing here.\r\n fieldHasValidation(field: IssField): boolean {\r\n return !!field.validation && Object.values(field.validation).some(isActiveValidationRule);\r\n }\r\n\r\n fieldHasAsyncValidation(field: IssField): boolean {\r\n return !!(field.asyncValidation && Object.values(field.asyncValidation).filter((v) => v).length);\r\n }\r\n\r\n isFormValid(form: FormGroup, fields: IssField[]) {\r\n return fields.map((childField: IssField) => {\r\n const currentCtrl = form.get(childField.name);\r\n if (isActiveValidationRule(childField.validation?.required) && childField.visible() && childField.mode() === \"edit\" && currentCtrl?.status !== \"DISABLED\") {\r\n return currentCtrl?.valid;\r\n }\r\n return true;\r\n }).every((status) => status);\r\n }\r\n\r\n #registrations(form: FormGroup): OutletRegistration[] {\r\n const owners: Map<object, OutletRegistration> | undefined = this.#registry.get(form);\r\n if (!owners) {\r\n return [];\r\n }\r\n return Array.from(owners.values());\r\n }\r\n\r\n #registration(form: FormGroup, owner: object): OutletRegistration {\r\n let owners: Map<object, OutletRegistration> | undefined = this.#registry.get(form);\r\n if (!owners) {\r\n owners = new Map<object, OutletRegistration>();\r\n this.#registry.set(form, owners);\r\n }\r\n let registration: OutletRegistration | undefined = owners.get(owner);\r\n if (!registration) {\r\n registration = { fields: [], expectedFieldNames: [] };\r\n owners.set(owner, registration);\r\n }\r\n return registration;\r\n }\r\n\r\n // Builds each switched-on rule into its validator, out of the value the rule was given:\r\n // `{ \"minLength\": 3 }` is what makes the validator refuse two characters, and `{ \"required\":\r\n // false }` builds nothing at all. The field rides along as the second argument for the rules\r\n // that need their neighbours — `beforeDate` and friends — and is ignored by the rest.\r\n // A rule whose factory never resolved is skipped rather than called.\r\n #validatorsToNgValidators(field: IssField): ValidatorFn[] {\r\n return Object.entries(field.validation ?? {})\r\n .filter(([key, value]) => isActiveValidationRule(value) && typeof field.validationFns?.[key] === \"function\")\r\n .map(([key, value]): ValidatorFn => field.validationFns[key](value, field));\r\n }\r\n\r\n #mapNgValidators(validationObj: FieldAsyncValidation | any): ValidatorFn[] {\r\n return Object.entries((validationObj ? validationObj : {}))\r\n .filter((validationObj) => validationObj[1] !== undefined)\r\n .map((validationObj): ValidatorFn => <ValidatorFn>validationObj[1]);\r\n }\r\n\r\n #asyncValidatorsToNgValidators(field: IssField): AsyncValidatorFn[] {\r\n return this.#mapNgValidators(field.asyncValidation).map((validatorValue: any) => validatorValue?.fn(field));\r\n }\r\n\r\n #mapMasterFieldValueChangesToFieldChanges(masterField: IssField, masterCtrl: AbstractControl): Observable<FieldChange> {\r\n return masterCtrl.valueChanges.pipe(\r\n map((value: string): FieldChange => {\r\n return {\r\n trackedField: masterField,\r\n trackedControl: masterCtrl,\r\n value: value,\r\n };\r\n })\r\n );\r\n }\r\n}\r\n","import { Type } from \"@angular/core\";\nimport { DynamicImport } from \"../interfaces/import\";\n\n/**\n * Maps a field's `type` to the `iss-field-*` component that renders it.\n *\n * The outlet looks the field up here and lazy-loads the component, so a `type` that is not\n * a key of this object renders nothing. Hover a field class for the `config` keys it reads.\n *\n * | `type` | Component | Control | Renders |\n * | --- | --- | --- | --- |\n * | `text_input` | `InputField` | `iss-ctrl-input` | Single line text, number, email, password. |\n * | `textarea` | `TextareaField` | `iss-ctrl-textarea` | Multi line free text. |\n * | `dropdown_list` | `SelectField` | `iss-ctrl-select` | Searchable single/multi select. |\n * | `toggle_button` | `ToggleButtonField` | `iss-ctrl-toggle-button` | Options as a button group. |\n * | `checkbox` | `CheckboxField` | `iss-ctrl-checkbox` | Multi choice checkbox list. |\n * | `radio` | `RadioField` | `iss-ctrl-radio` | Single choice radio list. |\n * | `date` | `DatePickerField` | `iss-ctrl-date-picker` | A single date. |\n * | `time` | `TimePickerField` | `iss-ctrl-time-picker` | A time of day. |\n * | `datetime` | `DatetimePickerField` | `iss-ctrl-datetime-picker` | Date and time together. |\n * | `date_range` | `DateRangePickerField` | `iss-ctrl-date-range-picker` | A start/end date range. |\n * | `attachment` | `FilePickerField` | `iss-ctrl-file-picker` | File upload. |\n * | `userPicker` | `UserPickerField` | `iss-ctrl-select` | Employee lookup. |\n * | `vehicle_plate` | `PlateField` | `iss-ctrl-plate-number` | Saudi vehicle plate. |\n * | `enrichment` | `NoteField` | — | Read-only explanatory text. |\n * | `mobile` | `MobileField` | `iss-ctrl-mobile` | International phone number. |\n * | `table` | `TableField` | `iss-ctrl-table` | Repeatable rows built from `children`. |\n * | `chips` | `ChipsField` | `iss-ctrl-chips` | Free text as removable chips. |\n * | `switch` | `SlideToggleField` | `iss-ctrl-slide-toggle` | Boolean on/off switch. |\n */\nexport const COMPONENTS: DynamicImport<Type<any>> = {\n text_input: () => import(\"../../components/controls/input/input.field\").then((c) => c.InputField),\n textarea: () => import(\"../../components/controls/textarea/textarea.field\").then((c) => c.TextareaField),\n\n dropdown_list: () => import(\"../../components/controls/select/select.field\").then((c) => c.SelectField),\n toggle_button: () => import(\"../../components/controls/toggle-button/toggle-button.field\").then((c) => c.ToggleButtonField),\n checkbox: () => import(\"../../components/controls/checkbox/checkbox.field\").then((c) => c.CheckboxField),\n radio: () => import(\"../../components/controls/radio/radio.field\").then((c) => c.RadioField),\n\n date: () => import(\"../../components/controls/date-picker/date-picker.field\").then((c) => c.DatePickerField),\n time: () => import(\"../../components/controls/time-picker/time-picker.field\").then((c) => c.TimePickerField),\n datetime: () => import(\"../../components/controls/datetime-picker/datetime-picker.field\").then((c) => c.DatetimePickerField),\n date_range: () => import(\"../../components/controls/date-range-picker/date-range-picker.field\").then((c) => c.DateRangePickerField),\n\n attachment: () => import(\"../../components/controls/file-picker/file-picker.field\").then((c) => c.FilePickerField),\n\n userPicker: () => import(\"../../components/controls/user-picker/user-picker.field\").then((c) => c.UserPickerField),\n\n vehicle_plate: () => import(\"../../components/controls/plate/plate.field\").then((c) => c.PlateField),\n\n enrichment: () => import(\"../../components/controls/note/note.field\").then((c) => c.NoteField),\n\n mobile: () => import(\"../../components/controls/mobile/mobile.field\").then((c) => c.MobileField),\n\n table: () => import(\"../../components/controls/table/table.field\").then((c) => c.TableField),\n\n chips: () => import(\"../../components/controls/chips/chips.field\").then((c) => c.ChipsField),\n\n switch: () => import(\"../../components/controls/slide-toggle/slide-toggle.field\").then((c) => c.SlideToggleField),\n};\n","import { Type } from \"@angular/core\";\r\nimport { DynamicImport } from \"../interfaces/import\";\r\n\r\nexport const SERVICES: DynamicImport<Type<any>> = {\r\n setValue: () => import(\"../../events/set-value/set-value-event\").then((s) => s.SetValueEvent),\r\n show: () => import(\"../../events/show/show-event\").then((s) => s.ShowEvent),\r\n load: () => import(\"../../events/load/load-value-event\").then((s) => s.LoadValueEvent),\r\n loadOptions: () => import(\"../../events/load/load-options-event\").then((s) => s.LoadOptionsEvent),\r\n triggerBasedOnJsonValue: () => import(\"../../events/triggers/trigger-based-on-json-value\").then((s) => s.TriggerBasedOnJsonValue),\r\n replaceApiKeyDefaultImpl: () => import(\"../../events/load/replace-api-keys\").then((s) => s.ReplaceApiKeys),\r\n};\r\n","import { Type } from \"@angular/core\";\nimport { DynamicImport } from \"../interfaces/import\";\n\n// Read-only counterpart of COMPONENTS: the component used to render a field's value\n// without an editable control, keyed by the same field types.\nexport const VIEWERS: DynamicImport<Type<any>> = {\n date: () => import(\"../../components/controls/date-picker/date-picker.viewer\").then((c) => c.DatePickerViewer),\n datetime: () => import(\"../../components/controls/datetime-picker/datetime-picker.viewer\").then((c) => c.DatePickerTimeViewer),\n dateRange: () => import(\"../../components/controls/date-range-picker/date-range-picker.viewer\").then((c) => c.DateRangePickerViewer),\n date_range: () => import(\"../../components/controls/date-range-picker/date-range-picker.viewer\").then((c) => c.DateRangePickerViewer),\n select: () => import(\"../../components/controls/select/select.viewer\").then((c) => c.SelectViewer),\n input: () => import(\"../../components/controls/input/input.viewer\").then((c) => c.InputViewer),\n text: () => import(\"../../components/controls/input/input.viewer\").then((c) => c.InputViewer),\n checkbox: () => import(\"../../components/controls/checkbox/checkbox.viewer\").then((c) => c.CheckboxViewer),\n file: () => import(\"../../components/controls/file-picker/attachment.viewer\").then((c) => c.AttachmentViewer),\n file2: () => import(\"../../components/controls/file-picker/attachment.viewer\").then((c) => c.AttachmentViewer),\n radio: () => import(\"../../components/controls/radio/radio.viewer\").then((c) => c.RadioViewer),\n textarea: () => import(\"../../components/controls/textarea/textarea.viewer\").then((c) => c.TextareaViewer),\n chips: () => import(\"../../components/controls/chips/chips.viewer\").then((c) => c.ChipsViewer),\n plate: () => import(\"../../components/controls/plate/plate.viewer\").then((c) => c.PlateViewer),\n slideToggle: () => import(\"../../components/controls/slide-toggle/slide-toggle.viewer\").then((c) => c.SlideToggleViewer),\n toggle: () => import(\"../../components/controls/toggle-button/toggle-button.viewer\").then((c) => c.ToggleButtonViewer),\n time: () => import(\"../../components/controls/time-picker/time-picker.viewer\").then((c) => c.TimePickerViewer),\n mobile: () => import(\"../../components/controls/mobile/mobile.viewer\").then((c) => c.MobileViewer),\n};\n","import { inject, Injectable, Injector, Type } from \"@angular/core\";\r\nimport { from, Observable, of, tap } from \"rxjs\";\r\nimport { IssField } from \"../classes/iss-field\";\r\nimport { COMPONENTS } from \"../indexes/components.index\";\r\nimport { SERVICES } from \"../indexes/services.index\";\r\nimport { VIEWERS } from \"../indexes/viewers.index\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class Loader {\r\n #injector: Injector = inject(Injector);\r\n #loadedComponents: Map<string, Type<any>> = new Map();\r\n #loadedViewers: Map<string, Type<any>> = new Map();\r\n #loadedServices: Map<string, <T>() => Promise<T>> = new Map();\r\n\r\n loadComponent(field: IssField): Observable<Type<any> | null> {\r\n const loadedComponent: Type<any> | undefined = this.#loadedComponents.get(field.type);\r\n if (loadedComponent) {\r\n return of(loadedComponent);\r\n }\r\n\r\n const componentImportFn = COMPONENTS[field.type];\r\n if (!componentImportFn) {\r\n return of(null);\r\n }\r\n\r\n return this.#createObservableFromPromise(componentImportFn, field.type, this.#loadedComponents);\r\n }\r\n\r\n loadViewer(type: string): Observable<Type<any> | null> {\r\n const loadedViewer: Type<any> | undefined = this.#loadedViewers.get(type);\r\n if (loadedViewer) {\r\n return of(loadedViewer);\r\n }\r\n\r\n const viewerImportFn = VIEWERS[type];\r\n if (!viewerImportFn) {\r\n return of(null);\r\n }\r\n\r\n return this.#createObservableFromPromise(viewerImportFn, type, this.#loadedViewers);\r\n }\r\n\r\n loadService<T>(serviceName: string): undefined | (() => Promise<T>) {\r\n const loadedService: (<T>() => Promise<T>) | undefined = this.#loadedServices.get(serviceName);\r\n if (loadedService) {\r\n return loadedService;\r\n }\r\n if (!SERVICES[serviceName]) {\r\n // throw new Error(`Service ${serviceName} not found`);\r\n return undefined;\r\n }\r\n return () => SERVICES[serviceName]()\r\n .then((serviceClass: Type<any>) => this.#injector.get(serviceClass))\r\n .then((loadedService) => {\r\n this.#loadedServices.set(serviceName, () => loadedService);\r\n return loadedService;\r\n });\r\n }\r\n\r\n #createObservableFromPromise(componentImportFn: () => Promise<Type<any>>, type: string, cache: Map<string, Type<any>>): Observable<Type<any>> {\r\n return from(componentImportFn()).pipe(\r\n tap((component: Type<any>) => {\r\n cache.set(type, component);\r\n })\r\n );\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { IssField } from \"../classes/iss-field\";\r\n\r\nexport const FIELD_DATA: InjectionToken<IssField> = new InjectionToken(\"Form Field Data\");\r\n","import { inject, Injector, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { FIELD_DATA } from \"../../shared/tokens/field.token\";\r\n\r\n@Pipe({name: \"FieldDataInjector\"})\r\nexport class FieldDataInjector implements PipeTransform {\r\n injector: Injector = inject(Injector);\r\n\r\n transform(field: IssField | null): Injector {\r\n return Injector.create({\r\n parent: this.injector,\r\n providers: [\r\n {\r\n provide: FIELD_DATA,\r\n useValue: field,\r\n },\r\n ],\r\n });\r\n }\r\n}\r\n","import { AsyncPipe, NgComponentOutlet } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, DestroyRef, effect, EffectRef, inject, input, InputSignal, OnDestroy, OnInit, output, OutputEmitterRef, signal, WritableSignal } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { ControlContainer, FormGroup } from \"@angular/forms\";\r\nimport { debounceTime, first, map } from \"rxjs\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { isActiveValidationRule, VALIDATORS } from \"../../shared/indexes/validators.index\";\r\nimport { FormEngine } from \"../../shared/services/form-engine\";\r\nimport { Loader } from \"../../shared/services/loader\";\r\nimport { ComponentOutlet } from \"./component-outlet\";\r\nimport { FieldDataInjector } from \"./field-data-injector\";\r\n\r\n@Component({\r\n selector: \"iss-form-outlet\",\r\n imports: [\r\n NgComponentOutlet,\r\n FieldDataInjector,\r\n AsyncPipe,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n @if (components() && components()?.length) {\r\n @for (component of components(); track $index) {\r\n <ng-container\r\n [ngComponentOutlet]=\"component.self$ | async\"\r\n [ngComponentOutletInjector]=\"component.data | FieldDataInjector\"\r\n [ngComponentOutletInputs]=\"{formReady: formReady(), issField: component.data | FieldDataInjector}\"\r\n />\r\n }\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2rem;\r\n }\r\n `\r\n})\r\nexport class Outlet implements OnInit, OnDestroy {\r\n ready: OutputEmitterRef<boolean> = output();\r\n formReady: WritableSignal<boolean> = signal(false);\r\n fields: InputSignal<IssField[]> = input.required<IssField[]>();\r\n components: WritableSignal<ComponentOutlet[] | null> = signal(null);\r\n #controlContainer: ControlContainer = inject(ControlContainer);\r\n #destroyRef: DestroyRef = inject(DestroyRef);\r\n #formEngine: FormEngine = inject(FormEngine);\r\n #loader: Loader = inject(Loader);\r\n #effectRef: EffectRef = effect((onCleanup) => {\r\n // Dynamic imports cannot be canceled, but an old result must never replace\r\n // the components produced for a newer fields input (or a destroyed outlet).\r\n let active: boolean = true;\r\n onCleanup(() => {\r\n active = false;\r\n });\r\n\r\n // Remove the previous outlet immediately. This destroys its field components\r\n // (which remove their controls in ngOnDestroy) and prevents A's metadata from\r\n // being returned while B is still loading.\r\n this.components.set(null);\r\n this.#formEngine.registerFields(this.hostFormGroup, this, []);\r\n\r\n void this.#componentsFactory(this.fields()).then((components: ComponentOutlet[]) => {\r\n if (!active) {\r\n return;\r\n }\r\n this.components.set(components);\r\n this.#formEngine.registerFields(this.hostFormGroup, this, components.map((component: ComponentOutlet) => component.data));\r\n });\r\n });\r\n\r\n get hostFormGroup(): FormGroup {\r\n return this.#controlContainer.control as FormGroup;\r\n }\r\n\r\n ngOnInit() {\r\n const expectedFieldNames: string[] = this.fields()\r\n .filter((f: IssField) => f.mode() === \"edit\" || (f.mode() === \"view\" && f.value))\r\n .map((f: IssField) => f.name);\r\n this.#formEngine.registerExpectedFieldNames(this.hostFormGroup, this, expectedFieldNames);\r\n\r\n this.#listenToHostFormGroupChanges().pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((isReady) => {\r\n if (isReady) {\r\n this.formReady.set(true);\r\n this.ready.emit(true);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#effectRef.destroy();\r\n this.#formEngine.unregisterOutlet(this.hostFormGroup, this);\r\n }\r\n\r\n async #componentsFactory(fields: IssField[]): Promise<ComponentOutlet[]> {\r\n const fieldsComponentPromise = fields.map(async (field: IssField): Promise<ComponentOutlet> => {\r\n return {\r\n self$: this.#loader.loadComponent(field),\r\n data: await this.#initField(field)\r\n };\r\n });\r\n return await Promise.all(fieldsComponentPromise);\r\n }\r\n\r\n /*todo needs refactoring to be in the issField class*/\r\n\r\n async #initField(field: any): Promise<IssField> {\r\n const f: IssField = new IssField(field, this.#loader);\r\n\r\n await Promise.all([\r\n this.#loadFieldEvents(f),\r\n this.#loadFieldValidation(f)\r\n ]);\r\n\r\n return f;\r\n }\r\n\r\n async #loadFieldEvents(f: IssField): Promise<void> {\r\n if (!f.events?.length) return;\r\n\r\n await Promise.all(\r\n f.events.map(async (action) => {\r\n const [fn, triggerFn, configFn] = await Promise.all([\r\n action.fnPromise,\r\n action.config.triggerFnPromise,\r\n action.config.fnPromise\r\n ]);\r\n\r\n action.fn = fn;\r\n if (triggerFn) {\r\n action.config.triggerFn = triggerFn;\r\n }\r\n action.config.fn = configFn;\r\n })\r\n );\r\n }\r\n\r\n // Resolves the validator behind every rule the field switched on. `validation` itself is left\r\n // exactly as it arrived — the caller's own object, which it may still read and re-render — so\r\n // the factories land in `validationFns` and the rules keep the values they were given.\r\n // A rule that is off carries no validator: nothing is imported for it and nothing is built\r\n // from it, which is what makes `{ \"required\": false }` an optional field.\r\n async #loadFieldValidation(f: IssField): Promise<void> {\r\n if (!f.validation) return;\r\n\r\n const validationEntries = Object.entries(f.validation).filter(\r\n ([key, validation]) => {\r\n if (VALIDATORS[key] === undefined) {\r\n console.error(`${key} not found`);\r\n return false;\r\n }\r\n return isActiveValidationRule(validation);\r\n }\r\n );\r\n\r\n await Promise.all(\r\n validationEntries.map(async ([key]) => {\r\n f.validationFns[key] = await VALIDATORS[key]();\r\n })\r\n );\r\n }\r\n\r\n #listenToHostFormGroupChanges() {\r\n return this.hostFormGroup.valueChanges.pipe(\r\n debounceTime(500),\r\n map(() => {\r\n const controlNames = Object.keys(this.hostFormGroup.getRawValue());\r\n const fieldNames: string[] = this.#formEngine.getExpectedFieldNames(this.hostFormGroup);\r\n const diff = fieldNames.filter((x: string) => !controlNames.includes(x));\r\n return diff.length === 0;\r\n }),\r\n first((v) => v)\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { FieldEvent } from \"../../shared/classes/field-event\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { FieldChange } from \"../../shared/interfaces/event-strategy\";\r\nimport { ActionTriggerFn } from \"../../shared/interfaces/event-trigger-fn\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class EventTrigger implements ActionTriggerFn {\r\n isTriggered(field: IssField, change: FieldChange, action: FieldEvent, masterField?: IssField): boolean {\r\n if (field.name === action.trackedFieldName) {\r\n return true;\r\n }\r\n return action.value.split(\",\").some((actionValue: string) => {\r\n if (actionValue === \"*\" && change.value !== null && change.value !== undefined) {\r\n return true;\r\n }\r\n\r\n if (!change) {\r\n return false;\r\n }\r\n\r\n if (change.value === null || change.value === undefined) {\r\n return false;\r\n }\r\n\r\n const changeValueArray: string[] = change?.value.toString().split(\",\").map((val) => val.trim());\r\n return (changeValueArray?.includes(actionValue.trim()));\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { FieldEvent } from \"../../shared/classes/field-event\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { FieldChange } from \"../../shared/interfaces/event-strategy\";\r\nimport { ActionTriggerFn } from \"../../shared/interfaces/event-trigger-fn\";\r\nimport { EventTrigger } from \"./event-trigger\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class EventTriggerManager {\r\n actionTriggerService = inject(EventTrigger);\r\n\r\n async getActionsToBeTriggered(field: IssField, change: FieldChange): Promise<FieldEvent[]> {\r\n const actionsToBeTriggered: FieldEvent[] = [];\r\n for (const action of field.events) {\r\n /* todo remove await from array and use allSettle instead or any other solution */\r\n const isTruthy = await this.#filterCondition(field, action, change);\r\n if (isTruthy) {\r\n actionsToBeTriggered.push(action);\r\n }\r\n }\r\n return actionsToBeTriggered;\r\n }\r\n\r\n async getActionsToBeReverted(field: IssField, change: FieldChange): Promise<FieldEvent[]> {\r\n const actionsToBeReverted: FieldEvent[] = [];\r\n for (const action of field.events) {\r\n if (action.trackedFieldName !== change.trackedField.name) {\r\n /* todo remove await from array and use allSettle instead or any other solution */\r\n const isTruthy = await this.#filterCondition(field, action, change);\r\n\r\n if (!isTruthy && action.triggered) {\r\n actionsToBeReverted.push(action);\r\n }\r\n }\r\n }\r\n return actionsToBeReverted;\r\n }\r\n\r\n async #filterCondition(field: IssField, action: FieldEvent, change: FieldChange) {\r\n let triggerFn: ActionTriggerFn = action.config.triggerFn;\r\n if (!triggerFn && action.config.triggerFnPromise) {\r\n triggerFn = await action.config.triggerFnPromise;\r\n }\r\n\r\n if (triggerFn) {\r\n return triggerFn.isTriggered(field, change, action);\r\n }\r\n\r\n return this.actionTriggerService.isTriggered(field, change, action);\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\r\nimport { FieldEvent } from \"../shared/classes/field-event\";\r\nimport { IssField } from \"../shared/classes/iss-field\";\r\nimport { EventArgument, EventStrategy, FieldChange } from \"../shared/interfaces/event-strategy\";\r\nimport { EventTriggerManager } from \"./triggers/event-trigger-manager\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class EventHandler {\r\n #actionTriggerManager: EventTriggerManager = inject(EventTriggerManager);\r\n\r\n async fire(control: AbstractControl, form: FormGroup, field: IssField, change: FieldChange) {\r\n let actions: FieldEvent[] = await this.#actionTriggerManager.getActionsToBeTriggered(field, change);\r\n /* todo need to follow up on actions on this field (self) */\r\n for (let i = 0; i < actions.length; i++) {\r\n let evt: EventStrategy | undefined = actions[i].fn;\r\n if (!evt) {\r\n /* todo remove await from array and use allSettle instead or any other solution */\r\n evt = await actions[i].fnPromise;\r\n }\r\n const args: EventArgument = this.#fieldEventArgumentFactory(control, form, field, change, actions[i]);\r\n evt?.fire(args);\r\n }\r\n }\r\n\r\n async revert(control: AbstractControl, form: FormGroup, field: IssField, change: FieldChange) {\r\n const actions: FieldEvent[] = await this.#actionTriggerManager.getActionsToBeReverted(field, change);\r\n for (let i = 0; i < actions.length; i++) {\r\n let evt: EventStrategy | undefined = actions[i].fn;\r\n if (!evt) {\r\n evt = await actions[i].fnPromise;\r\n }\r\n const args: EventArgument = this.#fieldEventArgumentFactory(control, form, field, change, actions[i]);\r\n evt?.revert(args);\r\n }\r\n }\r\n\r\n #fieldEventArgumentFactory(control: AbstractControl, form: FormGroup, field: IssField, change: FieldChange, action: FieldEvent): EventArgument {\r\n return {\r\n action,\r\n change,\r\n control,\r\n field,\r\n form\r\n };\r\n }\r\n}\r\n","import { Component, DestroyRef, effect, EffectRef, inject, input, InputSignal, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\";\r\nimport { ControlContainer, FormControl, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { EventHandler } from \"../../../events/event-handler\";\r\nimport { IssField } from \"../../../shared/classes/iss-field\";\r\nimport { FieldChange } from \"../../../shared/interfaces/event-strategy\";\r\nimport { FormEngine } from \"../../../shared/services/form-engine\";\r\nimport { FIELD_DATA } from \"../../../shared/tokens/field.token\";\r\n\r\n/**\r\n * Base class for every `iss-field-*` field.\r\n *\r\n * A field is the form-engine layer around a control: it reads its whole configuration from\r\n * the injected {@link IssField} (label, options, config, validation, events), registers its\r\n * `FormControl` on the parent `FormGroup` on init and removes it again on destroy, and\r\n * switches between the control (`mode() === \"edit\"`) and the viewer (`mode() === \"view\"`).\r\n *\r\n * ### Inputs\r\n * | Property | Type | Description |\r\n * | --- | --- | --- |\r\n * | `issField` | `IssField` | **Required.** The field definition; also provided through the `FIELD_DATA` token. |\r\n * | `formReady` | `boolean \\| undefined` | Set by the outlet once the whole form exists; gates event wiring. |\r\n *\r\n * ### Properties available on `field`\r\n * `name` · `type` · `base` · `label()` · `hint()` · `options()` · `api()` · `mode()` ·\r\n * `visible()` · `loading()` · `value` · `jsonValue` · `defaultValue` · `ctrlValue()` ·\r\n * `ctrlJsonValue()` · `events` · `validation` · `asyncValidation` · `children` ·\r\n * `response()` · `config` — see {@link IssField} and {@link FieldConfig}.\r\n *\r\n * Fields are not used directly in templates; the outlet resolves them from the field `type`\r\n * through the `COMPONENTS` index.\r\n */\r\n@Component({\r\n template: ``,\r\n imports: [ReactiveFormsModule]\r\n})\r\nexport class FieldBase implements OnInit, OnDestroy {\r\n /**\r\n * The field definition rendered by this component. Required.\r\n */\r\n issField: InputSignal<IssField> = input.required<IssField>();\r\n /**\r\n * Set by the outlet once every field is registered; field events start only after it turns true.\r\n */\r\n formReady = input<boolean>();\r\n /**\r\n * The {@link IssField} for this instance, injected through the `FIELD_DATA` token.\r\n */\r\n field: IssField = inject(FIELD_DATA);\r\n parentFormGroup: ControlContainer = inject(ControlContainer);\r\n formEngine: FormEngine = inject(FormEngine);\r\n eventHandler: EventHandler = inject(EventHandler);\r\n destroyRef: DestroyRef = inject(DestroyRef);\r\n /**\r\n * The `FormControl` this field registers on the parent form under `field.name`.\r\n */\r\n ctrl: FormControl = new FormControl(null);\r\n ctrlValueChange = toSignal(this.ctrl.valueChanges, { initialValue: this.ctrl.getRawValue() });\r\n #valueChangeEffectRef = effect(() => {\r\n this.field.ctrlValue.set(this.ctrlValueChange());\r\n });\r\n #eventEffectRef: EffectRef = effect(() => {\r\n if (this.formReady()) {\r\n this.#initiateEvents();\r\n }\r\n });\r\n\r\n get form() {\r\n return this.parentFormGroup.control as FormGroup;\r\n }\r\n\r\n ngOnInit() {\r\n this.#addControlToForm();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#valueChangeEffectRef.destroy();\r\n this.#eventEffectRef.destroy();\r\n this.#removeControlFromForm();\r\n }\r\n\r\n #addControlToForm(): void {\r\n this.ctrl.setValue(this.formEngine.getFieldValue(this.field));\r\n this.ctrl.setValidators(this.formEngine.createValidators(this.field));\r\n this.ctrl.setAsyncValidators(this.formEngine.createAsyncValidators(this.field));\r\n if (this.field.config.disabled() === true) {\r\n this.ctrl.disable({ emitEvent: false });\r\n }\r\n this.form.addControl(this.field.name, this.ctrl);\r\n\r\n if (this.ctrl.getRawValue()) {\r\n this.ctrl.markAsTouched();\r\n }\r\n }\r\n\r\n // a conditionally rendered field would otherwise leave its control behind on the host\r\n // form, keeping it in the form value and in the outlet's readiness diff forever\r\n #removeControlFromForm(): void {\r\n if (this.form?.get(this.field.name) === this.ctrl) {\r\n this.form.removeControl(this.field.name);\r\n }\r\n }\r\n\r\n #initiateEvents(): void {\r\n // todo don't start events in view mode, just set value\r\n if (this.field.events && this.field.events.length) {\r\n this.#startEvents();\r\n }\r\n\r\n if (this.field.validation) {\r\n this.#updateValidityOnMasterChanges();\r\n }\r\n }\r\n\r\n #startEvents(): void {\r\n this.formEngine.trackChangesEvents(this.field, this.form)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((change: FieldChange) => {\r\n this.eventHandler.revert(this.ctrl, this.form, this.field, change).then();\r\n this.eventHandler.fire(this.ctrl, this.form, this.field, change).then();\r\n });\r\n }\r\n\r\n #updateValidityOnMasterChanges() {\r\n this.formEngine.trackChangesValidations(this.field, this.form)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n this.ctrl.updateValueAndValidity({ emitEvent: false });\r\n });\r\n }\r\n}\r\n","import { inject, StaticProvider } from \"@angular/core\";\r\nimport { ControlContainer } from \"@angular/forms\";\r\n\r\nexport const VIEW_PROVIDER: StaticProvider = {\r\n provide: ControlContainer,\r\n useFactory: () => inject(ControlContainer, {skipSelf: true}),\r\n};\r\n","export const PLACEHOLDER_REGEX: RegExp = /\\{((\\w+).)*(\\w+)}/gi;\r\n","import { IssValidator } from \"../interfaces/validation\";\r\n\r\nexport const VALIDATION_MESSAGES: IssValidator = {\r\n required: () => {\r\n return {\r\n en: \"Mandatory Field\",\r\n ar: \"حقل إجباري\",\r\n };\r\n },\r\n requiredTrue: () => {\r\n return {\r\n en: \"Please Choose\",\r\n ar: \"يُرجى الموافقة\",\r\n };\r\n },\r\n email: () => {\r\n return {\r\n en: \"Please enter a valid email address\",\r\n ar: \"يرجى كتابة عنوان بريد إلكتروني صحيح\",\r\n };\r\n },\r\n minlength: ({ requiredLength }: { requiredLength: number }) => {\r\n return {\r\n en: `Please enter at least ${requiredLength} characters`,\r\n ar: `يُرجى إدخال ${requiredLength} على الأقل`,\r\n };\r\n },\r\n maxlength: ({ requiredLength }: { requiredLength: number }) => {\r\n return {\r\n en: `Please enter at most ${requiredLength} characters`,\r\n ar: `يُرجى إدخال ${requiredLength} على الأكثر`,\r\n };\r\n },\r\n maxAllowedUsers: (max: number) => {\r\n return {\r\n en: `Please enter at most ${max} users`,\r\n ar: `يُرجى اختيار ${max} مستخدم على الأكثر `,\r\n };\r\n },\r\n minAllowedUsers: (min: number) => {\r\n return {\r\n en: `Please enter at least ${min} users`,\r\n ar: `يُرجى اختيار ${min} مستخدم على الأقل `,\r\n };\r\n },\r\n min: ({ min }: { min: number }) => {\r\n return {\r\n en: `Please enter at least ${min}`,\r\n ar: `يُرجى إدخال ${min} على الأقل`,\r\n };\r\n },\r\n max: ({ max }: { max: number }) => {\r\n return {\r\n en: `Please enter at most ${max}`,\r\n ar: `يُرجى إدخال ${max} على الأكثر`,\r\n };\r\n },\r\n pattern: () => {\r\n return {\r\n en: \"Please enter a valid value\",\r\n ar: \"يرجى إدخال قيم صحيحة\",\r\n };\r\n },\r\n wrongTimeSelected: (wrongTimeSelected: string) => {\r\n return {\r\n en: `Selected time should be after ${wrongTimeSelected} hours from now.`,\r\n ar: `الوقت المختار يجب أن يكون بعد ${wrongTimeSelected} من الآن. `,\r\n };\r\n },\r\n relativeTimeValidation_after: (relativeTimeValidation: string) => {\r\n return {\r\n en: `The selected end date should be greater than the ${relativeTimeValidation}.`,\r\n ar: ` تاريخ الانتهاء يجب ان يكون اكبر من ${relativeTimeValidation}.`,\r\n };\r\n },\r\n relativeTimeValidation_before: (relativeTimeValidation: string) => {\r\n return {\r\n en: `Selected time should be before ${relativeTimeValidation}.`,\r\n ar: `الوقت المختار يجب أن يكون قبل ${relativeTimeValidation}.`,\r\n };\r\n },\r\n\r\n relativeTimeValidation_before_noOfDays: (relativeTimeValidation: string) => {\r\n return {\r\n en: `Selected time should be before ${relativeTimeValidation} .`,\r\n ar: `الوقت المختار يجب أن يكون قبل ${relativeTimeValidation} .`,\r\n };\r\n },\r\n relativeTimeValidation_within: (relativeTimeValidation: string) => {\r\n return {\r\n en: `Selected time should be within ${relativeTimeValidation}.`,\r\n ar: ` يجب أن يكون الوقت المحدد ضمن ${relativeTimeValidation}.`,\r\n };\r\n },\r\n fileType: ({ validFileExtensions, inValidFileName }: { validFileExtensions: string, inValidFileName: string }) => ({\r\n en: `${inValidFileName} should be ${validFileExtensions}`,\r\n ar: `يجب أن يكون ${inValidFileName} بصيغة ${validFileExtensions}`,\r\n }),\r\n fileSize: ({ limitSize, inValidFileName }: { limitSize: string, inValidFileName: string }) => ({\r\n en: `${inValidFileName} size should not exceed ${limitSize}.`,\r\n ar: `يجب ألا يزيد حجم ${inValidFileName}} عن ${limitSize}`,\r\n }),\r\n minFileCount: ({ minCount, fileCount }: { minCount: number, fileCount: number }) => {\r\n return {\r\n en: `At least ${minCount} file(s) required, but only ${fileCount} selected.`,\r\n ar: `تتطلب العملية على الأقل ${minCount} ملف(ات)، لكن تم اختيار ${fileCount} فقط.`,\r\n };\r\n },\r\n maxFileCount: ({ maxCount, fileCount }: { maxCount: number, fileCount: number }) => {\r\n return {\r\n en: `You can upload a maximum of ${maxCount} file(s). You have selected ${fileCount} file(s).`,\r\n ar: `يمكنك تحميل حد أقصى من ${maxCount} ملف(ات). لقد قمت باختيار ${fileCount} ملف(ات).`\r\n };\r\n }\r\n};\r\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\nimport { I18n } from \"../interfaces/i18n\";\nimport { UI_LANGUAGE } from \"iss-ctrl/tokens\";\n\n@Pipe({name: \"translate\"})\nexport class TranslatePipe implements PipeTransform {\n currentLanguage = inject(UI_LANGUAGE);\n\n transform(value: I18n | string, locale: string = \"\"): string {\n if (typeof value === \"string\") {\n return value; // Return the string as is, if it's a string\n }\n\n if (value && locale) {\n return value[locale as keyof I18n];\n }\n\n return value?.[this.currentLanguage as keyof I18n];\n }\n}\n","import { KeyValuePipe } from \"@angular/common\";\r\nimport { Component, input, InputSignal } from \"@angular/core\";\r\nimport { ValidationErrors } from \"@angular/forms\";\r\nimport { MatError } from \"@angular/material/form-field\";\r\nimport { VALIDATION_MESSAGES } from \"../../shared/constants/validation.const\";\r\nimport { TranslatePipe } from \"../../shared/pipes/translate.pipe\";\r\n\r\n@Component({\r\n selector: \"iss-validation-message-viewer\",\r\n imports: [\r\n KeyValuePipe,\r\n TranslatePipe,\r\n MatError\r\n ],\r\n template: `\r\n @if (errors() !== null && showMessage()) {\r\n <div class=\"messages\">\r\n @for (error of errors() ?? {} | keyvalue; track error) {\r\n <p>\r\n <mat-error>{{ getValidationMessage(error) | translate }}</mat-error>\r\n </p>\r\n }\r\n </div>\r\n }\r\n `,\r\n styles: `\r\n /* The host keeps no height of its own, so showing or hiding a message never\r\n reflows the fields below it — the messages overlay the outlet gap instead. */\r\n :host {\r\n display: block;\r\n position: relative;\r\n }\r\n\r\n .messages {\r\n position: absolute;\r\n inset-inline: 0;\r\n top: 0;\r\n z-index: 1;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n }\r\n `,\r\n})\r\nexport class ValidationMessage {\r\n errors: InputSignal<ValidationErrors | null> = input.required();\r\n showMessage: InputSignal<boolean> = input.required();\r\n\r\n getValidationMessage(error: { key: string, value: any }): any {\r\n const errorMessageGenerator = VALIDATION_MESSAGES[error.key];\r\n if (!errorMessageGenerator) {\r\n console.warn(`THERE IS NO VALIDATION MESSAGE FOR KEY \"${error.key}\"`);\r\n return error.key;\r\n }\r\n return errorMessageGenerator(error.value);\r\n }\r\n}\r\n","import { Component } from \"@angular/core\";\r\n\r\n/**\r\n * `<iss-field-viewer>` — read-only presentation of a single field as a\r\n * label / value row.\r\n *\r\n * Project the caption into the `label` slot and the rendered value into any\r\n * element carrying a `value` attribute:\r\n *\r\n * ```html\r\n * <iss-field-viewer>\r\n * <label>Request Type</label>\r\n * <span>value</span>\r\n * </iss-field-viewer>\r\n * ```\r\n *\r\n * The label sits in a fixed-width column, so every value in a stack of viewers\r\n * starts on the same vertical line. Override that column with the\r\n * `--field-viewer-label-width` custom property on any ancestor.\r\n * When no label is projected, the value spans the full width of the row.\r\n */\r\n@Component({\r\n selector: \"iss-field-viewer\",\r\n imports: [],\r\n template: `\r\n <div class=\"field-viewer w-100\">\r\n <span class=\"field-viewer__label\"><ng-content select=\"label\"></ng-content></span>\r\n <span class=\"field-viewer__value\"><ng-content></ng-content></span>\r\n </div>\r\n `,\r\n styles: `\r\n :host {\r\n --field-viewer-label-width: 14rem;\r\n --field-viewer-gap: 1.5rem;\r\n --field-viewer-padding: .75rem 1rem;\r\n --field-viewer-label-fc: var(--dark-gray);\r\n --field-viewer-value-fc: var(--black);\r\n\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .field-viewer {\r\n display: grid;\r\n grid-template-columns: var(--field-viewer-label-width) minmax(0, 1fr);\r\n align-items: baseline;\r\n column-gap: var(--field-viewer-gap);\r\n padding: var(--field-viewer-padding);\r\n border-radius: var(--box-radius);\r\n font-size: .875rem;\r\n line-height: var(--default-line-height);\r\n }\r\n\r\n .field-viewer__label {\r\n color: var(--field-viewer-label-fc);\r\n font-weight: var(--font-regular);\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n .field-viewer__value {\r\n min-width: 0;\r\n color: var(--field-viewer-value-fc);\r\n font-weight: var(--font-bold);\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n /* The projected label keeps the slot's typography instead of its own defaults. */\r\n .field-viewer__label ::ng-deep label {\r\n display: block;\r\n margin: 0;\r\n color: inherit;\r\n font: inherit;\r\n }\r\n\r\n /* No label projected — the value takes the whole row. */\r\n .field-viewer:not(:has(.field-viewer__label > *)) {\r\n grid-template-columns: minmax(0, 1fr);\r\n }\r\n\r\n .field-viewer:not(:has(.field-viewer__label > *)) .field-viewer__label {\r\n display: none;\r\n }\r\n\r\n @media (max-width: 575.98px) {\r\n .field-viewer {\r\n grid-template-columns: minmax(0, 1fr);\r\n row-gap: .25rem;\r\n }\r\n }\r\n `,\r\n})\r\nexport class FieldViewer {\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\n\r\n@Pipe({name: \"arabicNumber\"})\r\nexport class ArabicNumberPipe implements PipeTransform {\r\n transform(n: string): string {\r\n if (n === null || n === undefined) {\r\n return \"\";\r\n }\r\n if (Number.isNaN(+n)) {\r\n return n;\r\n }\r\n return new Intl.NumberFormat(\"ar-SA\", {}).format(+n);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { PlateLetter } from \"iss-ctrl/plate\";\nimport { PLATE_LETTERS } from \"iss-ctrl/plate\";\n\n@Pipe({name: \"plateLetter\"})\nexport class PlateLetterPipe implements PipeTransform {\n transform(value: string): unknown {\n const letter: PlateLetter | undefined = PLATE_LETTERS.find((l: PlateLetter) => l.value === value);\n if (letter) {\n return letter.label.ar;\n }\n return value;\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable } from \"@angular/core\";\nimport { map, Observable, tap } from \"rxjs\";\nimport { PLACEHOLDER_REGEX } from \"../../../shared/constants/placeholder-regex.const\";\nimport { USER_SEARCH_API } from \"iss-ctrl/tokens\";\n\n@Injectable({providedIn: \"root\"})\nexport class Employee {\n loggedInUserProfile: any;\n USER_SEARCH_URL: string = inject(USER_SEARCH_API);\n userImageHost = \"https://igateapp.stc.com.sa\";\n #http: HttpClient = inject(HttpClient);\n\n getProfile(email: string): Observable<any> {\n const url = this.replacePlaceholders(this.USER_SEARCH_URL, {email: email});\n\n return this.#http.get(url).pipe(\n map((dto: any) => {\n dto.data.profileImageUrl = this.getProfileImageUrl(dto.data);\n return dto.data;\n }),\n tap((user: any) => {\n localStorage.setItem(\"user\", JSON.stringify(user));\n this.loggedInUserProfile = user;\n })\n );\n }\n\n search(username: string, endpoint?: string): Observable<any[]> {\n let url = this.replacePlaceholders(this.USER_SEARCH_URL, {username});\n if (endpoint) {\n if (!endpoint.includes(\"{username}\")) {\n throw \"endpoint should have this string {username} as a placeholder to be able to replace it\";\n }\n }\n\n if (endpoint) {\n url = this.replacePlaceholders(endpoint, {username});\n }\n\n return this.#http.get<any>(url).pipe(\n map((employees: any) => {\n employees.data = employees.data.map((emp: any) => {\n emp.image = this.getProfileImageUrl(emp);\n return emp;\n });\n return employees.data;\n })\n );\n }\n\n getProfileImageUrl(user: any): string {\n if (user.image && this.#checkIfImageHasValue(user.image)) {\n return this.userImageHost + user.image;\n }\n return \"\";\n }\n\n replacePlaceholders(str: string, values: any) {\n /*TODO check if placeholders passed in values object*/\n if (!str) {\n return \"\";\n }\n return str.replace(PLACEHOLDER_REGEX, (match: any) => {\n return values[match.replace(\"{\", \"\").replace(\"}\", \"\")] ?? match;\n });\n }\n\n #checkIfImageHasValue(imageUri: any) {\n const splitResult = imageUri.split(\"/\");\n return !!(splitResult[splitResult.length - 1] && splitResult[splitResult.length - 1] !== \".jpg\");\n }\n}\n","import { PLACEHOLDER_REGEX } from \"../constants/placeholder-regex.const\";\r\n\r\nexport function replacePlaceholders(str: string, values: any) {\r\n /*TODO check if placeholders passed in values object*/\r\n if (!str) {\r\n return \"\";\r\n }\r\n return str.replace(PLACEHOLDER_REGEX, (match: any) => {\r\n const key = match.replace(\"{\", \"\").replace(\"}\", \"\");\r\n return values[key] ?? match;\r\n });\r\n}\r\n","import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable } from \"@angular/core\";\nimport { EMPTY, forkJoin, map, Observable } from \"rxjs\";\nimport { ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER, ATTACHMENT_UPLOAD_URL, IssAttachment } from \"iss-ctrl/tokens\";\nimport { replacePlaceholders } from \"../../../shared/utilities/replace-placeholder.util\";\nimport { IssFile } from \"iss-ctrl/file-picker\";\n\n@Injectable({ providedIn: \"root\" })\nexport class FileHandler {\n ATTACHMENT_UPLOAD_URL = inject(ATTACHMENT_UPLOAD_URL);\n ATTACHMENT_DOWNLOAD_URL: string = inject(ATTACHMENT_DOWNLOAD_URL);\n attachmentAdapter = inject(ATTACHMENT_UPLOAD_RESPONSE_MAPPER);\n #http: HttpClient = inject(HttpClient);\n readonly #units: string[] = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n upload(data: FormData) {\n const url = this.ATTACHMENT_UPLOAD_URL;\n // no Content-Type header: the browser adds it with the FormData boundary\n return this.#http.post(url, data).pipe(\n map((res: any): IssAttachment[] => this.attachmentAdapter(res)),\n );\n }\n\n formDataFactory(files: IssFile[], multiple: boolean): FormData | null {\n if (files.length === 0) {\n return null;\n }\n const fd: FormData = new FormData();\n let formDataKey = \"file\";\n if (multiple) {\n formDataKey = \"files\";\n }\n for (let i = 0; i < files.length; i++) {\n // @ts-ignore\n fd.append(formDataKey, files[i]);\n }\n return fd;\n }\n\n formDataHasValue(formData: FormData) {\n if (formData) {\n for (const key of formData.keys()) {\n if (formData.get(key)) {\n return true;\n }\n }\n }\n return false;\n }\n\n getFileFromFormData(formData: FormData, name: string): IssFile[] {\n if (!formData) {\n return [];\n }\n const fileFD: IssFile[] = formData.getAll(\"file\") as unknown as IssFile[];\n const filesFD: IssFile[] = formData.getAll(\"files\") as unknown as IssFile[];\n if (filesFD.length) {\n return filesFD.filter((f) => f.name === name);\n }\n if (fileFD.length) {\n return fileFD.filter((f) => f.name === name);\n }\n return [];\n }\n\n formatFileSize(x: string | number) {\n let l: number = 0;\n let n: number = parseInt(x.toString(), 10) || 0;\n\n while (n >= 1024 && ++l) {\n n /= 1024;\n }\n return Math.floor(n) + \" \" + this.#units[l];\n }\n\n fetchFileInfo(id: string): Observable<IssFile> {\n const url: string = replacePlaceholders(this.ATTACHMENT_DOWNLOAD_URL, { fileId: id });\n const httpRequestOptions: any = { observe: \"response\", responseType: \"blob\" };\n return this.#http.get(url, httpRequestOptions).pipe(map((res: any) => this.#processFileBinaryStream(res, id)));\n }\n\n fetchFiles(ids: string) {\n if (ids) {\n return forkJoin(ids.split(\",\").map((id: string) => {\n return this.fetchFileInfo(id);\n }));\n }\n return EMPTY;\n }\n\n #processFileBinaryStream(res: any, fileId: string): any {\n const fileNameHeader = res.headers.get(\"content-disposition\");\n const typeHeader = res.headers.get(\"content-type\");\n let fileName = \"\";\n if (fileNameHeader) {\n fileName = decodeURIComponent(fileNameHeader.split(\";\")[1].split(\"=\")[1].replaceAll(\"\\\"\", \"\"));\n }\n const file: File = new File([res.body], fileName, { type: typeHeader });\n return {\n id: fileId,\n name: file.name,\n type: file.type,\n size: this.formatFileSize(file.size),\n file: file,\n };\n }\n}\n","export function arrayFrom<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n","export function getPropertyByPath(obj: any, path: string | undefined) {\r\n if (obj && path) {\r\n let currentProp: any;\r\n const props = path.split(\".\");\r\n for (let i = 0; i < props.length; i++) {\r\n const propKey = props[i];\r\n if (!currentProp) {\r\n const target = obj[propKey];\r\n if (typeof target === \"function\") {\r\n currentProp = target();\r\n } else {\r\n currentProp = target;\r\n }\r\n } else {\r\n const target = currentProp[propKey];\r\n\r\n if (typeof target === \"function\") {\r\n currentProp = target();\r\n } else {\r\n currentProp = target;\r\n }\r\n }\r\n if (currentProp === undefined) {\r\n break;\r\n }\r\n }\r\n return currentProp;\r\n }\r\n return undefined;\r\n}\r\n","export function formatFileSize(x: string | number) {\r\n const units: string[] = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n let l = 0;\r\n let n = parseInt(x.toString(), 10) || 0;\r\n while (n >= 1024 && ++l) {\r\n n /= 1024;\r\n }\r\n return `${Math.floor(n)}${units[l]}`;\r\n}\r\n","import {ValidatorFn, Validators} from \"@angular/forms\";\n\nexport abstract class IssValidators {\n static required(): ValidatorFn {\n return Validators.required;\n }\n\n static max(maxValue: number): ValidatorFn {\n return Validators.max(maxValue);\n }\n\n static min(minValue: number): ValidatorFn {\n return Validators.min(minValue);\n }\n\n static requiredTrue(): ValidatorFn {\n return Validators.requiredTrue;\n }\n\n static email(): ValidatorFn {\n return Validators.email;\n }\n\n static minLength(minLength: number): ValidatorFn {\n return Validators.minLength(minLength);\n }\n\n static maxLength(maxLength: number): ValidatorFn {\n return Validators.maxLength(maxLength);\n }\n\n static pattern(pattern: string | RegExp): ValidatorFn {\n return Validators.pattern(pattern);\n }\n\n static null(): ValidatorFn {\n return Validators.nullValidator;\n }\n}\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\nimport { formatFileSize } from \"../components/controls/file-picker/format-file-size.util\";\r\n\r\nexport abstract class FileValidators {\r\n static size(limitSize: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData)) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n const filesValidity: any[] = [];\r\n const inValidFileName: string [] = [];\r\n formData.forEach((value: FormDataEntryValue) => {\r\n if (value instanceof File) {\r\n if (value.size > limitSize) {\r\n inValidFileName.push(value.name);\r\n filesValidity.push(false);\r\n } else {\r\n filesValidity.push(true);\r\n }\r\n }\r\n });\r\n\r\n return filesValidity.every((v: any) => v) ? null : {\r\n fileSize: {\r\n limitSize: formatFileSize(limitSize),\r\n inValidFileName: inValidFileName.join()\r\n }\r\n };\r\n };\r\n }\r\n\r\n static type(validFileExtensions: string[]): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData) || validFileExtensions.length === 0) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n const filesValidity: boolean[] = [];\r\n const inValidFileName: string[] = [];\r\n\r\n formData.forEach((value: FormDataEntryValue) => {\r\n if (value instanceof File) {\r\n const uploadedFileExt = value.name.split(\".\").pop()?.toLowerCase();\r\n const isValidExtension = validFileExtensions.some((ext: string) => ext.toLowerCase() === uploadedFileExt);\r\n\r\n if (!isValidExtension) {\r\n inValidFileName.push(value.name);\r\n filesValidity.push(false);\r\n } else {\r\n filesValidity.push(true);\r\n }\r\n }\r\n });\r\n return filesValidity.every((v: boolean) => v) ? null : {\r\n fileType: {\r\n validFileExtensions: validFileExtensions.join(\", \"),\r\n inValidFileName: inValidFileName.join(\", \")\r\n }\r\n };\r\n };\r\n }\r\n\r\n static maxCount(maxCount: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData)) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n let fileCount = 0;\r\n formData.forEach((value) => {\r\n if (value instanceof File) {\r\n fileCount++;\r\n }\r\n });\r\n\r\n return fileCount <= maxCount ? null : {maxFileCount: {maxCount, fileCount}};\r\n };\r\n }\r\n\r\n static minCount(minCount: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData)) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n let fileCount = 0;\r\n formData.forEach((value) => {\r\n if (value instanceof File) {\r\n fileCount++;\r\n }\r\n });\r\n return fileCount >= minCount ? null : {minFileCount: {minCount, fileCount}};\r\n };\r\n }\r\n}\r\n","import { inject } from \"@angular/core\";\nimport { AbstractControl, ControlContainer, FormGroup, ValidationErrors, ValidatorFn } from \"@angular/forms\";\nimport { format } from \"date-fns\";\nimport { DATETIME_FORMAT } from \"iss-ctrl/base\";\n\nexport abstract class TimeValidator {\n // The rule's value is the name of the field this one must not run past, so it arrives here\n // rather than being read back off the field.\n static beforeDate(otherFieldName: string): ValidatorFn {\n const controlContainer = inject(ControlContainer);\n const parentForm = controlContainer.control as FormGroup;\n return (control: AbstractControl): ValidationErrors | null => {\n const anotherControl = parentForm.get(otherFieldName);\n if (anotherControl) {\n const anotherControlValue = anotherControl.getRawValue();\n const controlValue = control.getRawValue();\n if (new Date(anotherControlValue) < new Date(controlValue)) {\n return {\n relativeTimeValidation_before: format(anotherControlValue.replace(\"Z\", \"\"), DATETIME_FORMAT)\n };\n }\n }\n return null;\n };\n }\n\n static afterDate(otherFieldName: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n return null;\n };\n }\n}\n","// The form engine: the outlet, the field/viewer indexes it resolves through, and everything\n// a host application needs to drive a form.\n//\n// Controls are NOT exported from here. Each one is its own entry point — `iss-ctrl/input`,\n// `iss-ctrl/select`, `iss-ctrl/mobile`, … — because re-exporting a control statically makes\n// the bundler inline it, and with it every control, back into whatever loads this file. The\n// fields below reach their control through that entry point, so an app downloads only the\n// controls it renders. `iss-ctrl/base` and `iss-ctrl/tokens` are re-exported for convenience;\n// an app configuring the tokens in its root providers should still import them directly from\n// `iss-ctrl/tokens` so the engine stays out of its initial bundle.\n\nexport * from \"iss-ctrl/base\";\nexport * from \"iss-ctrl/tokens\";\n\n// outlet\nexport * from \"./components/outlet/outlet\";\nexport * from \"./components/outlet/component-outlet\";\nexport * from \"./components/outlet/field-data-injector\";\n\n// fields\nexport * from \"./components/controls/base/field-base\";\n\n// constants\nexport * from \"./shared/constants/view-provider.const\";\nexport * from \"./shared/constants/placeholder-regex.const\";\nexport * from \"./shared/constants/validation.const\";\n\n// indexes\nexport * from \"./shared/indexes/components.index\";\nexport * from \"./shared/indexes/services.index\";\nexport * from \"./shared/indexes/validators.index\";\n\n// interfaces\nexport * from \"./shared/interfaces/event-trigger-fn\";\nexport * from \"./shared/interfaces/event-strategy\";\nexport * from \"./shared/interfaces/i18n\";\nexport * from \"./shared/interfaces/import\";\nexport * from \"./shared/interfaces/validation\";\n\n// tokens\nexport * from \"./shared/tokens/field.token\";\n\n// types\nexport * from \"./shared/types/validation.type\";\n\n// components\nexport * from \"./components/shared/validation-message\";\nexport * from \"./components/shared/field-viewer\";\n\n// pipes\nexport * from \"./shared/pipes/arabic-number.pipe\";\nexport * from \"./shared/pipes/translate.pipe\";\nexport * from \"./components/controls/plate/plate-letter.pipe\";\n\n// services\nexport * from \"./components/controls/user-picker/employee\";\nexport * from \"./components/controls/file-picker/file-handler\";\nexport * from \"./shared/services/form-engine\";\nexport * from \"./shared/services/loader\";\n\n// utilities\nexport * from \"./shared/utilities/array-from.util\";\nexport * from \"./shared/utilities/get-property-by-path.util\";\nexport * from \"./shared/utilities/replace-placeholder.util\";\nexport * from \"./components/controls/file-picker/format-file-size.util\";\n\n// validators\nexport * from \"./validators/core.validator\";\nexport * from \"./validators/file.validator\";\nexport * from \"./validators/time.validator\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import { HttpClient } from '@angular/common/http';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { InjectionToken, inject, Injectable } from '@angular/core';
|
|
4
4
|
import { map, EMPTY } from 'rxjs';
|
|
5
|
-
import { P as PLACEHOLDER_REGEX
|
|
6
|
-
import {
|
|
5
|
+
import { P as PLACEHOLDER_REGEX } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
|
|
6
|
+
import { HOST } from 'iss-ctrl/tokens';
|
|
7
|
+
import { ReplaceApiKeys } from './iss-ctrl-replace-api-keys-DLnagkOr.mjs';
|
|
7
8
|
|
|
8
9
|
const API_RESPONSE_MAPPER = new InjectionToken("Map backend response to required response interface.");
|
|
9
10
|
|
|
@@ -57,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
57
58
|
}] });
|
|
58
59
|
|
|
59
60
|
export { IssHttp as I, LoadEvent as L };
|
|
60
|
-
//# sourceMappingURL=iss-ctrl-load-event-
|
|
61
|
+
//# sourceMappingURL=iss-ctrl-load-event-CuZ7pMjk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss-ctrl-load-event-CuZ7pMjk.mjs","sources":["../../../projects/iss/src/shared/tokens/api-response-mapper.token.ts","../../../projects/iss/src/shared/utilities/is-valid-api.util.ts","../../../projects/iss/src/shared/utilities/http.util.service.ts","../../../projects/iss/src/events/load/load-event.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\nimport { Dto } from \"../interfaces/dto\";\r\n\r\nexport const API_RESPONSE_MAPPER: InjectionToken<(res: any) => Dto> = new InjectionToken(\"Map backend response to required response interface.\");\r\n","import { PLACEHOLDER_REGEX } from \"../constants/placeholder-regex.const\";\r\n\r\nexport function isValidEndpoint(api: string): boolean {\r\n if (api.includes(\"undefined\") || api.includes(\"null\")) {\r\n return false;\r\n }\r\n return !api.match(PLACEHOLDER_REGEX)?.length && ![\"undefined\", \"null\"].includes(api);\r\n}\r\n","import { HttpClient } from \"@angular/common/http\";\r\nimport { inject, Injectable } from \"@angular/core\";\r\nimport { EMPTY, map, Observable } from \"rxjs\";\r\nimport { Dto } from \"../interfaces/dto\";\r\nimport { API_RESPONSE_MAPPER } from \"../tokens/api-response-mapper.token\";\r\nimport { isValidEndpoint } from \"./is-valid-api.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class IssHttp {\r\n #http: HttpClient = inject(HttpClient);\r\n #apiResponseMapper = inject(API_RESPONSE_MAPPER);\r\n\r\n get<T>(url: string): Observable<Dto> {\r\n if (isValidEndpoint(url)) {\r\n return this.#http.get<T>(url).pipe(map((res: any): Dto => this.#apiResponseMapper(res)));\r\n }\r\n return EMPTY;\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\nimport { EventArgument } from \"../../shared/interfaces/event-strategy\";\nimport { HOST } from \"iss-ctrl/tokens\";\nimport { ReplaceApiKeys } from \"./replace-api-keys\";\n\n@Injectable({providedIn: \"root\"})\nexport class LoadEvent {\n #replaceApiKeysService = inject(ReplaceApiKeys);\n #host: string = inject(HOST);\n\n getApi(args: EventArgument) {\n let api;\n if (args.action.config.fn) {\n api = args.action.config.fn.execute(args);\n } else {\n api = this.#replaceApiKeysService.execute(args);\n }\n\n return `${this.#host}${api}`;\n }\n\n fetchErrorHandler(args: EventArgument, err: any) {\n console.error(err);\n args.field.loading.set(false);\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAGO,MAAM,mBAAmB,GAAsC,IAAI,cAAc,CAAC,sDAAsD,CAAC;;ACD1I,SAAU,eAAe,CAAC,GAAW,EAAA;AACzC,IAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACrD,QAAA,OAAO,KAAK;IACd;IACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtF;;MCCa,OAAO,CAAA;AAClB,IAAA,KAAK,GAAe,MAAM,CAAC,UAAU,CAAC;AACtC,IAAA,kBAAkB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEhD,IAAA,GAAG,CAAI,GAAW,EAAA;AAChB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAU,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F;AACA,QAAA,OAAO,KAAK;IACd;uGATW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAP,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAO,cADK,MAAM,EAAA,CAAA;;2FAClB,OAAO,EAAA,UAAA,EAAA,CAAA;kBADnB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCDnB,SAAS,CAAA;AACpB,IAAA,sBAAsB,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/C,IAAA,KAAK,GAAW,MAAM,CAAC,IAAI,CAAC;AAE5B,IAAA,MAAM,CAAC,IAAmB,EAAA;AACxB,QAAA,IAAI,GAAG;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;AACzB,YAAA,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3C;aAAO;YACL,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;QACjD;AAEA,QAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAA,EAAG,GAAG,EAAE;IAC9B;IAEA,iBAAiB,CAAC,IAAmB,EAAE,GAAQ,EAAA;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;uGAlBW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAT,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cADG,MAAM,EAAA,CAAA;;2FAClB,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injectable } from '@angular/core';
|
|
3
|
-
import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-
|
|
4
|
-
import { L as LoadEvent, I as IssHttp } from './iss-ctrl-load-event-
|
|
3
|
+
import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
|
|
4
|
+
import { L as LoadEvent, I as IssHttp } from './iss-ctrl-load-event-CuZ7pMjk.mjs';
|
|
5
5
|
|
|
6
6
|
class LoadOptionsEvent {
|
|
7
7
|
loadEvent = inject(LoadEvent);
|
|
@@ -47,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
47
47
|
}] });
|
|
48
48
|
|
|
49
49
|
export { LoadOptionsEvent };
|
|
50
|
-
//# sourceMappingURL=iss-ctrl-load-options-event-
|
|
50
|
+
//# sourceMappingURL=iss-ctrl-load-options-event-B10rhdqh.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-load-options-event-
|
|
1
|
+
{"version":3,"file":"iss-ctrl-load-options-event-B10rhdqh.mjs","sources":["../../../projects/iss/src/events/load/load-options-event.ts"],"sourcesContent":["import { inject, Injectable } from \"@angular/core\";\r\nimport { Dto } from \"../../shared/interfaces/dto\";\r\nimport { EventArgument, EventStrategy } from \"../../shared/interfaces/event-strategy\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\nimport { IssHttp } from \"../../shared/utilities/http.util.service\";\r\nimport { LoadEvent } from \"./load-event\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class LoadOptionsEvent implements EventStrategy {\r\n loadEvent = inject(LoadEvent);\r\n #http: IssHttp = inject(IssHttp);\r\n\r\n fire(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Load Event Fired\", \"color: green\");\r\n const api = this.loadEvent.getApi(args);\r\n\r\n args.field.loading.set(true);\r\n this.#http.get(api).subscribe({\r\n next: (response: Dto) => {\r\n args.field.response.set(response.data);\r\n args.field.apiResponse.next(response.data);\r\n\r\n if (args.action.config.afterFetchFn) {\r\n args.action.config.afterFetchFn?.execute(args);\r\n } else {\r\n args.field.options.set(args.field.response());\r\n\r\n if (args.action.config.setValueFromApiResponse) {\r\n args.control.setValue(getPropertyByPath(args.field.response(), args.action.config.setValueFromApiResponse));\r\n }\r\n\r\n if (args.action.config.disableAfterFetching) {\r\n args.control.disable();\r\n }\r\n }\r\n args.field.loading.set(false);\r\n },\r\n error: (err) => {\r\n // todo handle errors\r\n this.loadEvent.fetchErrorHandler(args, err);\r\n },\r\n });\r\n args.action.triggered = true;\r\n }\r\n\r\n revert(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Load Event Reverted\", \"color: red\");\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;MAQa,gBAAgB,CAAA;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,KAAK,GAAY,MAAM,CAAC,OAAO,CAAC;AAEhC,IAAA,IAAI,CAAC,IAAmB,EAAA;QACtB,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAA,GAAA,CAAK,GAAG,qBAAqB,EAAE,cAAc,CAAC;QACvH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAE1C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;oBACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;gBAChD;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE;wBAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBAC7G;oBAEA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE;AAC3C,wBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;oBACxB;gBACF;gBACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;;gBAEb,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC;YAC7C,CAAC;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI;IAC9B;AAEA,IAAA,MAAM,CAAC,IAAmB,EAAA;QACxB,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAA,GAAA,CAAK,GAAG,wBAAwB,EAAE,YAAY,CAAC;IAC1H;uGAvCW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA;;2FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}
|
package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs → iss-ctrl-load-value-event-C-aRgKLx.mjs}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injectable } from '@angular/core';
|
|
3
|
-
import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-
|
|
4
|
-
import { L as LoadEvent, I as IssHttp } from './iss-ctrl-load-event-
|
|
3
|
+
import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
|
|
4
|
+
import { L as LoadEvent, I as IssHttp } from './iss-ctrl-load-event-CuZ7pMjk.mjs';
|
|
5
5
|
|
|
6
6
|
class LoadValueEvent {
|
|
7
7
|
loadEvent = inject(LoadEvent);
|
|
@@ -49,4 +49,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
49
49
|
}] });
|
|
50
50
|
|
|
51
51
|
export { LoadValueEvent };
|
|
52
|
-
//# sourceMappingURL=iss-ctrl-load-value-event-
|
|
52
|
+
//# sourceMappingURL=iss-ctrl-load-value-event-C-aRgKLx.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-load-value-event-
|
|
1
|
+
{"version":3,"file":"iss-ctrl-load-value-event-C-aRgKLx.mjs","sources":["../../../projects/iss/src/events/load/load-value-event.ts"],"sourcesContent":["import { inject, Injectable } from \"@angular/core\";\r\nimport { Dto } from \"../../shared/interfaces/dto\";\r\nimport { EventArgument, EventStrategy } from \"../../shared/interfaces/event-strategy\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\nimport { IssHttp } from \"../../shared/utilities/http.util.service\";\r\nimport { LoadEvent } from \"./load-event\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class LoadValueEvent implements EventStrategy {\r\n loadEvent = inject(LoadEvent);\r\n #http: IssHttp = inject(IssHttp);\r\n\r\n fire(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Load Event Fired\", \"color: green\");\r\n const api = this.loadEvent.getApi(args);\r\n\r\n args.field.loading.set(true);\r\n this.#http.get(api).subscribe({\r\n next: (response: Dto) => {\r\n args.field.response.set(response.data);\r\n args.field.apiResponse.next(response.data);\r\n\r\n if (args.action.config.afterFetchFn) {\r\n args.action.config.afterFetchFn?.execute(args);\r\n } else {\r\n if (args.action?.config?.setValueFromApiResponse) {\r\n args.control.setValue(getPropertyByPath(args.field.response(), args.action.config.setValueFromApiResponse));\r\n } else {\r\n args.control.setValue(args.field.response());\r\n }\r\n\r\n if (args.action.config.disableAfterFetching) {\r\n args.control.disable();\r\n }\r\n }\r\n\r\n args.field.loading.set(false);\r\n },\r\n error: (err) => {\r\n // todo handle errors\r\n this.loadEvent.fetchErrorHandler(args, err);\r\n },\r\n });\r\n args.action.triggered = true;\r\n }\r\n\r\n revert(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Load Event Reverted\", \"color: red\");\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;MAQa,cAAc,CAAA;AACzB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,KAAK,GAAY,MAAM,CAAC,OAAO,CAAC;AAEhC,IAAA,IAAI,CAAC,IAAmB,EAAA;QACtB,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAA,GAAA,CAAK,GAAG,qBAAqB,EAAE,cAAc,CAAC;QACvH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAE1C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;oBACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;gBAChD;qBAAO;oBACL,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE;wBAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBAC7G;yBAAO;AACL,wBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC9C;oBAEA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE;AAC3C,wBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;oBACxB;gBACF;gBAEA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;;gBAEb,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC;YAC7C,CAAC;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI;IAC9B;AAEA,IAAA,MAAM,CAAC,IAAmB,EAAA;QACxB,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAA,GAAA,CAAK,GAAG,wBAAwB,EAAE,YAAY,CAAC;IAC1H;uGAxCW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADF,MAAM,EAAA,CAAA;;2FAClB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/forms';
|
|
4
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { F as FieldBase, V as VIEW_PROVIDER, b as FieldViewer } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
|
|
6
|
+
import { MobileViewer } from './iss-ctrl-mobile.viewer-DQgxAcR-.mjs';
|
|
7
|
+
import { MobileControl } from 'iss-ctrl/mobile';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `<iss-field-mobile>` — an international phone number with a country selector.
|
|
11
|
+
*
|
|
12
|
+
* Rendered by the outlet for fields of the type `mobile`. In `edit` mode it renders
|
|
13
|
+
* {@link MobileControl} plus the validation message; in `view` mode the matching viewer.
|
|
14
|
+
*
|
|
15
|
+
* ### Supported `config` keys
|
|
16
|
+
* | Key | Type | Description |
|
|
17
|
+
* | --- | --- | --- |
|
|
18
|
+
* | `readonly` | `boolean` | Shows the value but blocks interaction. |
|
|
19
|
+
*
|
|
20
|
+
* ### Other field members used
|
|
21
|
+
* `label()`
|
|
22
|
+
*
|
|
23
|
+
* Every field also honors `visible`, `mode`, `validation`, `asyncValidation` and
|
|
24
|
+
* `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```json
|
|
28
|
+
* { "name": "mobile", "type": "mobile", "label": "Mobile" }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
class MobileField extends FieldBase {
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MobileField, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: MobileField, isStandalone: true, selector: "iss-field-mobile", usesInheritance: true, ngImport: i0, template: `
|
|
34
|
+
@if (field.visible()) {
|
|
35
|
+
@if (field.mode() === "edit") {
|
|
36
|
+
<iss-ctrl-mobile [formControlName]="field.name" [readonly]="field.config.readonly() ?? false">
|
|
37
|
+
<label>{{ field.label() }}</label>
|
|
38
|
+
</iss-ctrl-mobile>
|
|
39
|
+
} @else {
|
|
40
|
+
<iss-field-viewer>
|
|
41
|
+
<label>{{ field.label() }}</label>
|
|
42
|
+
<iss-viewer-mobile [field]="field"/>
|
|
43
|
+
</iss-field-viewer>
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MobileControl, selector: "iss-ctrl-mobile", inputs: ["preferredCountries"] }, { kind: "component", type: MobileViewer, selector: "iss-viewer-mobile" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MobileField, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{
|
|
51
|
+
selector: "iss-field-mobile",
|
|
52
|
+
viewProviders: [VIEW_PROVIDER],
|
|
53
|
+
imports: [
|
|
54
|
+
ReactiveFormsModule,
|
|
55
|
+
MobileControl,
|
|
56
|
+
MobileViewer,
|
|
57
|
+
FieldViewer
|
|
58
|
+
],
|
|
59
|
+
template: `
|
|
60
|
+
@if (field.visible()) {
|
|
61
|
+
@if (field.mode() === "edit") {
|
|
62
|
+
<iss-ctrl-mobile [formControlName]="field.name" [readonly]="field.config.readonly() ?? false">
|
|
63
|
+
<label>{{ field.label() }}</label>
|
|
64
|
+
</iss-ctrl-mobile>
|
|
65
|
+
} @else {
|
|
66
|
+
<iss-field-viewer>
|
|
67
|
+
<label>{{ field.label() }}</label>
|
|
68
|
+
<iss-viewer-mobile [field]="field"/>
|
|
69
|
+
</iss-field-viewer>
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
`
|
|
73
|
+
}]
|
|
74
|
+
}] });
|
|
75
|
+
|
|
76
|
+
export { MobileField };
|
|
77
|
+
//# sourceMappingURL=iss-ctrl-mobile.field-DXVYT3q-.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss-ctrl-mobile.field-DXVYT3q-.mjs","sources":["../../../projects/iss/src/components/controls/mobile/mobile.field.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\nimport { FieldBase } from \"../base/field-base\";\nimport { MobileViewer } from \"./mobile.viewer\";\nimport { MobileControl } from \"iss-ctrl/mobile\";\n\n/**\n * `<iss-field-mobile>` — an international phone number with a country selector.\n *\n * Rendered by the outlet for fields of the type `mobile`. In `edit` mode it renders\n * {@link MobileControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()`\n *\n * Every field also honors `visible`, `mode`, `validation`, `asyncValidation` and\n * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.\n *\n * @example\n * ```json\n * { \"name\": \"mobile\", \"type\": \"mobile\", \"label\": \"Mobile\" }\n * ```\n */\n@Component({\n selector: \"iss-field-mobile\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n ReactiveFormsModule,\n MobileControl,\n MobileViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n <iss-ctrl-mobile [formControlName]=\"field.name\" [readonly]=\"field.config.readonly() ?? false\">\n <label>{{ field.label() }}</label>\n </iss-ctrl-mobile>\n } @else {\n <iss-field-viewer>\n <label>{{ field.label() }}</label>\n <iss-viewer-mobile [field]=\"field\"/>\n </iss-field-viewer>\n }\n }\n `\n})\nexport class MobileField extends FieldBase {}\n"],"names":[],"mappings":";;;;;;;;AAQA;;;;;;;;;;;;;;;;;;;;;AAqBG;AAyBG,MAAO,WAAY,SAAQ,SAAS,CAAA;uGAA7B,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfZ;;;;;;;;;;;;;GAaT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,YAAY,8DACZ,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EALE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAsBnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAxBvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,aAAa;wBACb,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA;AACF,iBAAA;;;;;"}
|