ngx-material-entity 16.1.4 → 18.0.0
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/components/create-page/create-page.component.d.ts +2 -2
- package/components/edit-page/edit-page.component.d.ts +4 -4
- package/components/form/form.component.d.ts +7 -2
- package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +1 -2
- package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +1 -1
- package/components/input/base-input.component.d.ts +2 -2
- package/components/input/date/date-time-input/date-time-input.component.d.ts +1 -2
- package/components/input/file/file-input/file-input.component.d.ts +3 -3
- package/components/input/input.component.d.ts +70 -38
- package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +1 -1
- package/components/input/relations/references-many-input/references-many-input.component.d.ts +1 -1
- package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +1 -1
- package/components/input/string/string-dropdown-input/string-dropdown-input.component.d.ts +1 -1
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +1 -1
- package/components/table/display-column-value/base-display-column-value.component.d.ts +2 -5
- package/components/table/display-column-value/display-column-value.component.d.ts +1 -1
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +4 -4
- package/components/table/table.component.d.ts +3 -3
- package/components/tooltip/tooltip.component.d.ts +1 -1
- package/decorators/array/array-decorator-internal.data.d.ts +1 -1
- package/decorators/array/array-decorator.data.d.ts +1 -1
- package/decorators/date/date-decorator-internal.data.d.ts +1 -1
- package/decorators/date/date-decorator.data.d.ts +1 -1
- package/directives/drag-drop.directive.d.ts +1 -1
- package/directives/tooltip.directive.d.ts +1 -1
- package/esm2022/classes/base.builder.mjs +2 -2
- package/esm2022/classes/entity.model.mjs +1 -1
- package/esm2022/components/confirm-dialog/confirm-dialog-data.builder.mjs +2 -2
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +7 -7
- package/esm2022/components/create-page/create-data.route.mjs +2 -1
- package/esm2022/components/create-page/create-page.component.mjs +26 -23
- package/esm2022/components/create-page/page-create-data.builder.mjs +2 -1
- package/esm2022/components/edit-page/edit-data.route.mjs +2 -1
- package/esm2022/components/edit-page/edit-page.component.mjs +55 -54
- package/esm2022/components/edit-page/page-edit-data.builder.mjs +2 -1
- package/esm2022/components/form/form.component.mjs +14 -6
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +7 -7
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +7 -7
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +8 -8
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +8 -8
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +5 -5
- package/esm2022/components/input/array/array-table.class.mjs +21 -20
- package/esm2022/components/input/base-input.component.mjs +14 -9
- package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +5 -5
- package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +6 -6
- package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +5 -5
- package/esm2022/components/input/custom/custom.component.mjs +4 -4
- package/esm2022/components/input/date/date-input/date-input.component.mjs +3 -3
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +7 -7
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +9 -12
- package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +5 -7
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +6 -6
- package/esm2022/components/input/file/file-input/file-input.component.mjs +22 -24
- package/esm2022/components/input/input.component.mjs +199 -147
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +10 -10
- package/esm2022/components/input/number/number-input/number-input.component.mjs +3 -3
- package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +3 -3
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +21 -21
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +10 -11
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +9 -9
- package/esm2022/components/input/string/string-input/string-input.component.mjs +3 -3
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +8 -11
- package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +3 -3
- package/esm2022/components/table/create-dialog/create-data.builder.mjs +3 -1
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +9 -7
- package/esm2022/components/table/default.actions.mjs +4 -3
- package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +8 -13
- package/esm2022/components/table/display-column-value/display-column-value.component.mjs +9 -13
- package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +9 -3
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +37 -34
- package/esm2022/components/table/table-data.builder.mjs +12 -5
- package/esm2022/components/table/table-data.mjs +1 -1
- package/esm2022/components/table/table.component.mjs +25 -24
- package/esm2022/components/tooltip/tooltip.component.mjs +7 -8
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/array/array-decorator.data.mjs +1 -1
- package/esm2022/decorators/array/array.decorator.mjs +1 -1
- package/esm2022/decorators/base/base-property.decorator.mjs +1 -1
- package/esm2022/decorators/base/decorator-types.enum.mjs +1 -1
- package/esm2022/decorators/base/property-decorator-internal.data.mjs +6 -6
- package/esm2022/decorators/boolean/boolean-decorator-internal.data.mjs +2 -1
- package/esm2022/decorators/boolean/boolean.decorator.mjs +1 -1
- package/esm2022/decorators/custom/custom-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/custom/custom-decorator.data.mjs +1 -1
- package/esm2022/decorators/date/date-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/date/date-decorator.data.mjs +1 -1
- package/esm2022/decorators/date/date.decorator.mjs +1 -1
- package/esm2022/decorators/file/file-decorator-internal.data.mjs +8 -4
- package/esm2022/decorators/file/file.decorator.mjs +1 -1
- package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +2 -1
- package/esm2022/decorators/number/number-decorator.data.mjs +1 -1
- package/esm2022/decorators/number/number.decorator.mjs +1 -1
- package/esm2022/decorators/object/object-decorator.data.mjs +1 -1
- package/esm2022/decorators/object/object.decorator.mjs +2 -1
- package/esm2022/decorators/string/string-decorator-internal.data.mjs +1 -1
- package/esm2022/decorators/string/string-decorator.data.mjs +1 -1
- package/esm2022/decorators/string/string.decorator.mjs +1 -1
- package/esm2022/directives/drag-drop.directive.mjs +5 -5
- package/esm2022/directives/dynamic-style-class.directive.mjs +5 -5
- package/esm2022/directives/included-in.directive.mjs +6 -5
- package/esm2022/directives/number.directive.mjs +6 -6
- package/esm2022/directives/password-match.directive.mjs +5 -5
- package/esm2022/directives/tooltip.directive.mjs +22 -20
- package/esm2022/encapsulation/reflect.utilities.mjs +2 -2
- package/esm2022/functions/dropdown-values-to-function.function.mjs +1 -1
- package/esm2022/functions/get-config-value.function.mjs +2 -2
- package/esm2022/functions/get-validation-error-message.function.mjs +1 -1
- package/esm2022/functions/get-validation-errors-tooltip-content.function.ts.mjs +1 -1
- package/esm2022/global-configuration-values.mjs +2 -1
- package/esm2022/mocks/placeholder-data.png.mjs +2 -2
- package/esm2022/services/entity.service.mjs +10 -11
- package/esm2022/services/unsaved-changes.guard.mjs +1 -1
- package/esm2022/utilities/date.utilities.mjs +10 -25
- package/esm2022/utilities/entity.utilities.mjs +15 -19
- package/esm2022/utilities/file.utilities.mjs +8 -10
- package/esm2022/utilities/selection.utilities.mjs +6 -4
- package/esm2022/utilities/validation.utilities.mjs +35 -38
- package/fesm2022/ngx-material-entity.mjs +728 -671
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/package.json +8 -8
- package/utilities/date.utilities.d.ts +29 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-material-entity.mjs","sources":["../../../projects/ngx-material-entity/src/functions/dropdown-values-to-function.function.ts","../../../projects/ngx-material-entity/src/functions/default-false.function.ts","../../../projects/ngx-material-entity/src/functions/default-true.function.ts","../../../projects/ngx-material-entity/src/decorators/base/property-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/string/string-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/encapsulation/lodash.utilities.ts","../../../projects/ngx-material-entity/src/utilities/date.utilities.ts","../../../projects/ngx-material-entity/src/encapsulation/jszip.utilities.ts","../../../projects/ngx-material-entity/src/utilities/file.utilities.ts","../../../projects/ngx-material-entity/src/decorators/base/decorator-types.enum.ts","../../../projects/ngx-material-entity/src/encapsulation/reflect.utilities.ts","../../../projects/ngx-material-entity/src/utilities/entity.utilities.ts","../../../projects/ngx-material-entity/src/decorators/base/base-property.decorator.ts","../../../projects/ngx-material-entity/src/decorators/string/string.decorator.ts","../../../projects/ngx-material-entity/src/classes/entity.model.ts","../../../projects/ngx-material-entity/src/default-global-configuration-values.ts","../../../projects/ngx-material-entity/src/classes/base.builder.ts","../../../projects/ngx-material-entity/src/functions/get-config-value.function.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/global-configuration-values.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog.component.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog.component.html","../../../projects/ngx-material-entity/src/services/unsaved-changes.guard.ts","../../../projects/ngx-material-entity/src/components/create-page/create-data.route.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-data.builder.ts","../../../projects/ngx-material-entity/src/components/create-page/page-create-data.builder.ts","../../../projects/ngx-material-entity/src/functions/get-validation-errors-tooltip-content.function.ts.ts","../../../projects/ngx-material-entity/src/services/entity.service.ts","../../../projects/ngx-material-entity/src/utilities/validation.utilities.ts","../../../projects/ngx-material-entity/src/decorators/array/array-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/utilities/selection.utilities.ts","../../../projects/ngx-material-entity/src/encapsulation/uuid.utilities.ts","../../../projects/ngx-material-entity/src/components/input/base-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-table.class.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-input/array-date-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-input/array-date-input.component.html","../../../projects/ngx-material-entity/src/components/input/array/array-date-range-input/array-date-range-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-range-input/array-date-range-input.component.html","../../../projects/ngx-material-entity/src/components/input/array/array-date-time-input/array-date-time-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-time-input/array-date-time-input.component.html","../../../projects/ngx-material-entity/src/directives/included-in.directive.ts","../../../projects/ngx-material-entity/src/components/input/array/array-string-chips-input/array-string-chips-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-string-chips-input/array-string-chips-input.component.html","../../../projects/ngx-material-entity/src/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.html","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.html","../../../projects/ngx-material-entity/src/decorators/boolean/boolean-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.html","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.html","../../../projects/ngx-material-entity/src/components/input/custom/custom.component.ts","../../../projects/ngx-material-entity/src/components/input/custom/custom.component.html","../../../projects/ngx-material-entity/src/components/input/date/date-input/date-input.component.ts","../../../projects/ngx-material-entity/src/components/input/date/date-input/date-input.component.html","../../../projects/ngx-material-entity/src/decorators/date/date-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/date/date-range-input/date-range-input.component.ts","../../../projects/ngx-material-entity/src/components/input/date/date-range-input/date-range-input.component.html","../../../projects/ngx-material-entity/src/components/input/date/date-time-input/date-time-input.component.ts","../../../projects/ngx-material-entity/src/components/input/date/date-time-input/date-time-input.component.html","../../../projects/ngx-material-entity/src/directives/drag-drop.directive.ts","../../../projects/ngx-material-entity/src/components/input/file/file-input/file-input.component.ts","../../../projects/ngx-material-entity/src/components/input/file/file-input/file-input.component.html","../../../projects/ngx-material-entity/src/components/input/file/file-default-input/file-default-input.component.ts","../../../projects/ngx-material-entity/src/components/input/file/file-default-input/file-default-input.component.html","../../../projects/ngx-material-entity/src/mocks/placeholder-data.png.ts","../../../projects/ngx-material-entity/src/components/input/file/file-image-input/file-image-input.component.ts","../../../projects/ngx-material-entity/src/components/input/file/file-image-input/file-image-input.component.html","../../../projects/ngx-material-entity/src/components/input/number/number-dropdown-input/number-dropdown-input.component.ts","../../../projects/ngx-material-entity/src/components/input/number/number-dropdown-input/number-dropdown-input.component.html","../../../projects/ngx-material-entity/src/components/input/number/number-input/number-input.component.ts","../../../projects/ngx-material-entity/src/components/input/number/number-input/number-input.component.html","../../../projects/ngx-material-entity/src/components/input/number/number-slider-input/number-slider-input.component.ts","../../../projects/ngx-material-entity/src/components/input/number/number-slider-input/number-slider-input.component.html","../../../projects/ngx-material-entity/src/decorators/references-many/references-many-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/relations/references-many-input/references-many-input.component.ts","../../../projects/ngx-material-entity/src/components/input/relations/references-many-input/references-many-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-autocomplete-input/string-autocomplete-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-autocomplete-input/string-autocomplete-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-dropdown-input/string-dropdown-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-dropdown-input/string-dropdown-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-input/string-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-input/string-input.component.html","../../../projects/ngx-material-entity/src/directives/password-match.directive.ts","../../../projects/ngx-material-entity/src/components/input/string/string-password-input/string-password-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-password-input/string-password-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-textbox-input/string-textbox-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-textbox-input/string-textbox-input.component.html","../../../projects/ngx-material-entity/src/functions/is-async-function.function.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-data.builder.ts","../../../projects/ngx-material-entity/src/functions/default-style-classes.function.ts","../../../projects/ngx-material-entity/src/components/table/table-data.builder.ts","../../../projects/ngx-material-entity/src/decorators/has-many/has-many-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/functions/get-validation-error-message.function.ts","../../../projects/ngx-material-entity/src/components/table/display-column-value/display-column-value.component.ts","../../../projects/ngx-material-entity/src/components/table/display-column-value/display-column-value.component.html","../../../projects/ngx-material-entity/src/directives/tooltip.directive.ts","../../../projects/ngx-material-entity/src/components/tooltip/tooltip.component.ts","../../../projects/ngx-material-entity/src/components/tooltip/tooltip.component.html","../../../projects/ngx-material-entity/src/components/input/input.component.ts","../../../projects/ngx-material-entity/src/components/input/input.component.html","../../../projects/ngx-material-entity/src/components/form/form.component.ts","../../../projects/ngx-material-entity/src/components/form/form.component.html","../../../projects/ngx-material-entity/src/components/create-page/create-page.component.ts","../../../projects/ngx-material-entity/src/components/create-page/create-page.component.html","../../../projects/ngx-material-entity/src/components/edit-page/edit-data.route.ts","../../../projects/ngx-material-entity/src/components/edit-page/page-edit-data.builder.ts","../../../projects/ngx-material-entity/src/components/edit-page/edit-page.component.ts","../../../projects/ngx-material-entity/src/components/edit-page/edit-page.component.html","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-data.builder.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-dialog.component.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-dialog.component.html","../../../projects/ngx-material-entity/src/encapsulation/js-2-xml.utilities.ts","../../../projects/ngx-material-entity/src/components/table/default.actions.ts","../../../projects/ngx-material-entity/src/components/table/display-column-value/base-display-column-value.component.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity.builder.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.component.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.component.html","../../../projects/ngx-material-entity/src/directives/dynamic-style-class.directive.ts","../../../projects/ngx-material-entity/src/components/table/table.component.ts","../../../projects/ngx-material-entity/src/components/table/table.component.html","../../../projects/ngx-material-entity/src/decorators/base/property-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/array/array-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/array/array.decorator.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean.decorator.ts","../../../projects/ngx-material-entity/src/decorators/custom/custom-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/custom/custom.decorator.ts","../../../projects/ngx-material-entity/src/decorators/date/date-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/date/date.decorator.ts","../../../projects/ngx-material-entity/src/decorators/file/file-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/file/file-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/file/file.decorator.ts","../../../projects/ngx-material-entity/src/decorators/has-many/has-many.decorator.ts","../../../projects/ngx-material-entity/src/decorators/number/number-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/number/number-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/number/number.decorator.ts","../../../projects/ngx-material-entity/src/decorators/object/object-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/object/object-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/object/object.decorator.ts","../../../projects/ngx-material-entity/src/decorators/references-many/references-many.decorator.ts","../../../projects/ngx-material-entity/src/decorators/references-one/references-one-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/references-one/references-one.decorator.ts","../../../projects/ngx-material-entity/src/decorators/string/string-decorator.data.ts","../../../projects/ngx-material-entity/src/directives/number.directive.ts","../../../projects/ngx-material-entity/src/public-api.ts","../../../projects/ngx-material-entity/src/ngx-material-entity.ts"],"sourcesContent":["import { DropdownValue } from '../decorators/base/dropdown-value.interface';\n\n/**\n * Generic Type for all possible values that can be provided as dropdown values.\n */\nexport type DropdownValues<T> = DropdownValue<T | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<T | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<T | undefined>[]>)\n\n/**\n * Transforms the given dropdown values to an async function.\n * @param dropdownValues - The dropdown values to transform.\n * @returns An abstract function.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport function dropdownValuesToFunction<T>(dropdownValues: DropdownValues<T>): (entity: any) => Promise<DropdownValue<T | undefined>[]> {\n if (Array.isArray(dropdownValues)) {\n return async () => dropdownValues;\n }\n // eslint-disable-next-line typescript/no-explicit-any\n return async (e: any) => await dropdownValues(e);\n}","/**\n * The default false function.\n * A boolean false is resolved to this.\n * @returns False.\n */\nexport function defaultFalse(): boolean {\n return false;\n}","/**\n * The default true function.\n * A boolean true is resolved to this.\n * @returns True.\n */\nexport function defaultTrue(): boolean {\n return true;\n}","import { Col, Position, PropertyDecoratorConfig } from './property-decorator.data';\nimport { defaultFalse } from '../../functions/default-false.function';\nimport { defaultTrue } from '../../functions/default-true.function';\n\n/**\n * The internal Position. Sets default values and validates user input.\n */\nclass PositionInternal implements Position {\n // eslint-disable-next-line jsdoc/require-jsdoc\n row: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n order: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tab: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tabName?: string;\n\n constructor(data?: Position) {\n this.validateInput(data);\n this.row = data?.row ?? -1;\n this.order = data?.order ?? -1;\n this.tab = data?.tab ?? -1;\n this.tabName = data?.tabName;\n }\n\n private validateInput(data?: Position): void {\n if (data?.order != null) {\n if (data.order < 1 && data.order != -1) {\n throw new Error('order must be at least 1');\n }\n if (data.order > 12) {\n throw new Error('order cannot be bigger than 12 (the maximum value for a bootstrap column)');\n }\n }\n if (data?.row != null && data.row != -1 && data.row < 1) {\n throw new Error('row must be at least 1');\n }\n if (data?.tab != null && data.tab != -1 && data.tab < 2) {\n throw new Error('tab must be either -1 for the first tab or at least 2');\n }\n }\n}\n\n/**\n * The internal PropertyDecoratorConfig. Sets default values.\n */\nexport abstract class PropertyDecoratorConfigInternal<ValueType> implements PropertyDecoratorConfig<ValueType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n display: (entity: unknown) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n required: ((entity: unknown) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n omitForCreate: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n omitForUpdate: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n defaultWidths: [Col, Col, Col];\n // eslint-disable-next-line jsdoc/require-jsdoc\n position: PositionInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n isReadOnly: (entity: unknown) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n default?: () => ValueType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n change?: (entity: unknown) => void;\n\n constructor(data: PropertyDecoratorConfig<ValueType>) {\n this.display = this.booleanToFunction(data.display ?? true);\n this.displayName = data.displayName;\n this.required = this.booleanToFunction(data.required ?? true);\n this.omitForCreate = data.omitForCreate ?? false;\n this.omitForUpdate = data.omitForUpdate ?? false;\n this.defaultWidths = data.defaultWidths ?? [6, 6, 12];\n this.position = new PositionInternal(data.position);\n this.isReadOnly = this.booleanToFunction(data.isReadOnly ?? false);\n this.default = this.defaultToFunction(data.default);\n this.change = data.change;\n }\n\n /**\n * Converts the default value to a function or undefined.\n * @param value - The default value provided by the metadata.\n * @returns A function that returns a default value or undefined.\n */\n protected defaultToFunction(value?: ValueType | (() => ValueType)): (() => ValueType) | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value == 'function') {\n return value as (() => ValueType);\n }\n return (() => value);\n }\n\n /**\n * Converts the given boolean or boolean function to a boolean function.\n * @param value - The value to convert.\n * @returns A function that resolves to a boolean.\n */\n protected booleanToFunction(value: boolean | ((entity: unknown) => boolean)): (entity: unknown) => boolean {\n if (typeof value !== 'boolean') {\n return value;\n }\n return value ? defaultTrue : defaultFalse;\n }\n}","import { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, StringAutocompleteValues, TextboxStringDecoratorConfig } from './string-decorator.data';\nimport { dropdownValuesToFunction } from '../../functions/dropdown-values-to-function.function';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DropdownStringDecoratorConfig. Sets default values.\n */\nexport class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string>\n implements DropdownStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n dropdownValues: ((entity: any) => Promise<DropdownValue<string | undefined>[]>);\n\n constructor(data: DropdownStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = dropdownValuesToFunction(data.dropdownValues);\n }\n}\n\n/**\n * The internal DefaultStringDecoratorConfig. Sets default values.\n */\nexport class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string> implements DefaultStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n\n constructor(data: DefaultStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n }\n}\n\n/**\n * The internal TextboxStringDecoratorConfig. Sets default values.\n */\nexport class TextboxStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string> implements TextboxStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'textbox';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n\n constructor(data: TextboxStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n }\n}\n\n/**\n * The internal AutocompleteStringDecoratorConfig. Sets default values.\n */\nexport class AutocompleteStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal<string> implements AutocompleteStringDecoratorConfig {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'autocomplete';\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n autocompleteValues: (entity: any) => Promise<string[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n // eslint-disable-next-line jsdoc/require-jsdoc\n restrictToOptions?: boolean;\n\n constructor(data: AutocompleteStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.autocompleteValues = this.autocompleteValuesToFunction(data.autocompleteValues);\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n this.restrictToOptions = data.restrictToOptions;\n }\n\n // eslint-disable-next-line typescript/no-explicit-any\n private autocompleteValuesToFunction(autocompleteValues: StringAutocompleteValues): (entity: any) => Promise<string[]> {\n if (Array.isArray(autocompleteValues)) {\n return async () => autocompleteValues;\n }\n // eslint-disable-next-line typescript/no-explicit-any\n return async (e: any) => await autocompleteValues(e);\n }\n}\n\n/**\n * The internal PasswordStringDecoratorConfig. Sets default values.\n */\nexport class PasswordStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal<string> implements PasswordStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'password';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n // eslint-disable-next-line jsdoc/require-jsdoc\n needsConfirmation: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmationDisplayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayPasswordStrength: boolean;\n\n constructor(data: PasswordStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n this.needsConfirmation = data.needsConfirmation ?? true;\n this.confirmationDisplayName = data.confirmationDisplayName ?? 'Confirm Password';\n this.displayPasswordStrength = data.displayPasswordStrength ?? true;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n }\n}","import _ from 'lodash';\n\n/**\n * Encapsulates all functionality of lodash.\n */\nexport abstract class LodashUtilities {\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexps,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n * @param value - The value to compare.\n * @param other - The other value to compare.\n * @returns Returns `true` if the values are equivalent, else `false`.\n */\n static isEqual(value: unknown, other: unknown): boolean {\n return _.isEqual(value, other);\n }\n\n /**\n * This method is like _.clone except that it recursively clones value.\n * @param value - The value to recursively clone.\n * @returns Returns the deep cloned value.\n */\n static cloneDeep<T>(value: T): T {\n return _.cloneDeep(value);\n }\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable properties of `object` that are not omitted.\n * @param object - The source object.\n * @param paths - The property names to omit, specified\n * individually or in arrays.\n * @returns Returns the new object.\n */\n static omit<T extends object, K extends keyof T>(object: T | null | undefined, ...paths: _.Many<K>[]): Omit<T, K> {\n return _.omit(object, ...paths);\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n * @param value - The value to check.\n * @returns Returns `true` if `value` is nullish, else `false`.\n */\n // static isNil(value: unknown): value is null | undefined {\n // return isNil(value);\n // }\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of the\n * own and inherited enumerable properties of `object` that `predicate`\n * doesn't return truthy for.\n * @param object - The source object.\n * @param predicate - The function invoked per property.\n * @returns Returns the new object.\n */\n // static omitBy<T extends object>(object: T | null | undefined, predicate: ValueKeyIteratee<T[keyof T]>): PartialObject<T> {\n // return omitBy(object, predicate);\n // }\n\n /**\n * Checks if value is classified as an Array object.\n * @param value - The value to check.\n * @returns Returns true if value is correctly classified, else false.\n */\n static isArray(value?: unknown): value is unknown[] {\n return _.isArray(value);\n }\n\n /* istanbul ignore next */\n /**\n * Checks if value is classified as an object that is not an array.\n * @param value - The value to check.\n * @returns Returns true if value is correctly classified, else false.\n */\n static isObject(value?: unknown): value is object {\n return value !== null\n && typeof value === 'object'\n && !LodashUtilities.isArray(value);\n }\n}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DropdownValue } from '../decorators/base/dropdown-value.interface';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { defaultTrue } from '../functions/default-true.function';\n\n\nconst DAY_IN_MS: number = 1000 * 60 * 60 * 24;\n\n/**\n * Valid steps from one time value to the next. Needs to be able to divide 60 minutes without remainder.\n */\ntype MinuteSteps = 1 | 2 | 3 | 4 | 5 | 6 | 10 | 12 | 15 | 20 | 30 | 60;\n\n/**\n * Contains Helper Functions for handling date properties.\n */\nexport abstract class DateUtilities {\n\n /**\n * The default filter function to user when none was provided by the user.\n */\n static defaultDateFilter: DateFilterFn<Date | null | undefined> = defaultTrue;\n\n /**\n * Gets the given value as a date value.\n * @param value - The value to get as a date.\n * @returns The given value as a date.\n */\n static asDate(value: unknown): Date {\n return value as Date;\n }\n\n /**\n * Gets the default times used by the DateTime picker when nothing is specified by the user.\n * @param format - The time format. Defaults to 24.\n * @param minuteSteps - The steps from one time value to the next. Defaults to 30.\n * @returns Times in the 24 hour format from 0:00 until 23:30 in 30 minute steps.\n */\n static getDefaultTimes(format: 12 | 24 = 24, minuteSteps: MinuteSteps = 30): DropdownValue<Time>[] {\n const res: DropdownValue<Time>[] = [{ displayName: '-', value: undefined as unknown as Time }];\n for (let hour: number = 0; hour < 24; hour++) {\n for (let minute: number = 0; minute < 60; minute += minuteSteps) {\n res.push(DateUtilities.getTimeDropdownValue(format, hour, minute));\n }\n }\n return res;\n }\n\n private static getTimeDropdownValue(format: 12 | 24, hour: number, minute: number): DropdownValue<Time> {\n const displayHour: number = DateUtilities.getFormattedHour(format, LodashUtilities.cloneDeep(hour));\n const displayMinute: string = DateUtilities.getFormattedMinute(format, hour, minute);\n return {\n displayName: `${displayHour}:${displayMinute}`,\n value: {\n hours: hour,\n minutes: minute\n }\n };\n }\n\n private static getFormattedHour(format: 12 | 24, hour: number): number {\n if (format === 12 && hour > 12) {\n hour -= 12;\n }\n return hour;\n }\n\n private static getFormattedMinute(format: 12 | 24, hour: number, minute: number): string {\n let res: string = `${minute}`;\n if (format === 12) {\n if (hour > 12) {\n res = `${minute} PM`;\n }\n else {\n res = `${minute} AM`;\n }\n }\n if (minute.toString().length === 1) {\n res = '0'.concat(res);\n }\n return res;\n }\n\n /**\n * Gets the Time object from the given date.\n * @param value - The date to get the time object from.\n * @returns The Time object build from the date value.\n */\n static getTimeFromDate(value?: Date): Time | undefined {\n if (!value) {\n return undefined;\n }\n else {\n return {\n hours: new Date(value).getHours(),\n minutes: new Date(value).getMinutes()\n };\n }\n }\n\n /**\n * Gets the dates between the two given gates. Does additional filtering based on the provided DateRange metadata.\n * @param startDate - The start date.\n * @param endDate - The end date.\n * @param filter - The custom filter from the metadata.\n * @returns All dates between the two provided dates. Includes start and end date.\n */\n static getDatesBetween(\n startDate: Date,\n endDate: Date,\n filter?: DateFilterFn<Date>\n ): Date[] {\n const res: Date[] = [];\n while (\n startDate.getFullYear() < endDate.getFullYear()\n || startDate.getMonth() < endDate.getMonth()\n || startDate.getDate() <= endDate.getDate()\n ) {\n res.push(new Date(startDate));\n startDate.setTime(startDate.getTime() + DAY_IN_MS);\n }\n if (filter) {\n return res.filter(d => filter(d));\n }\n else {\n return res;\n }\n }\n\n /**\n * Get all valid times for the dropdown of a datetime property.\n * @param times - All given times to filter.\n * @param date - The date of the datetime.\n * @param min - The function that defines the minimum time.\n * @param max - The function that defines the maximum time.\n * @param filter - A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.\n * @returns All valid dropdown values for the datetime property.\n */\n static getValidTimesForDropdown(\n times: DropdownValue<Time | undefined>[],\n date?: Date,\n min?: (date?: Date) => Time,\n max?: (date?: Date) => Time,\n filter?: ((time: Time) => boolean) | (() => boolean)\n ): DropdownValue<Time | undefined>[] {\n if (min) {\n const minTime: Time = min(date);\n times = times.filter(t =>\n !t.value\n || t.value.hours > minTime.hours\n || (\n t.value.hours === minTime.hours\n && t.value.minutes >= minTime.minutes\n )\n );\n }\n if (max) {\n const maxTime: Time = max(date);\n times = times.filter(t =>\n !t.value\n || t.value.hours < maxTime.hours\n || (\n t.value.hours === maxTime.hours\n && t.value.minutes <= maxTime.minutes\n )\n );\n }\n if (filter) {\n times = times.filter(t => !t.value || filter(t.value));\n }\n\n return times;\n }\n\n /**\n * Checks if the time object has processable hours and minutes properties.\n * Doesn't check custom validators like min/max from the metadata configuration.\n * @param time - The time to check.\n * @returns Whether or not the time object is unprocessable.\n */\n static timeIsUnprocessable(time?: Time): boolean {\n if (\n time?.hours == null\n || typeof time.hours !== 'number'\n || Number.isNaN(time.hours)\n || time.minutes == null\n || typeof time.minutes !== 'number'\n || Number.isNaN(time.minutes)\n ) {\n return true;\n }\n return false;\n }\n}","import JSZip from 'jszip';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type Zip = JSZip;\n\n// TODO: Find a way to use blobs with jest\n/* istanbul ignore next */\n/**\n * Encapsulates JSZip functionality.\n */\nexport abstract class JSZipUtilities {\n /**\n * Generates a new JSZip object that is correctly typed.\n * @returns A new JSZip object.\n */\n static new(): Zip {\n return new JSZip();\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\n\nimport { FileDataWithFile } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { JSZipUtilities, Zip } from '../encapsulation/jszip.utilities';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\n\n/**\n * Provides functionality regarding files.\n */\nexport abstract class FileUtilities {\n /**\n * Gets the accept value for the html input.\n * @param mimeTypes - The mimeTypes to get the accept string from.\n * @returns A comma separated string of all the provided mime types.\n */\n static getAcceptString(mimeTypes?: string[]): string {\n if (!mimeTypes?.length) {\n return '*';\n }\n return mimeTypes.join(', ');\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Reads a url to display the given file.\n * @param file - The file to get the url from.\n * @returns A promise of the url. Undefined if no file was provided.\n */\n static async getDataURLFromFile(file?: Blob): Promise<string | undefined> {\n if (!file) {\n return undefined;\n }\n return new Promise<string>((resolve, reject) => {\n const reader: FileReader = new FileReader();\n reader.onload = e => resolve(e.target?.result as string);\n reader.onerror = e => reject(e);\n reader.readAsDataURL(file);\n });\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Gets a file from the given url.\n * @param url - The url to get the file from.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns A promise of the File.\n */\n private static async getFileFromUrl(url: string, http: HttpClient): Promise<Blob> {\n try {\n return await firstValueFrom(http.get(url, { responseType: 'blob' }));\n }\n catch (error) {\n throw new Error(`Error fetching the file from the url ${url}:\\n ${error}`);\n }\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Gets the file data with the blob from the given File Data.\n * @param data - The File Data to get the file data with blob from.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns FileDataWithFile.\n */\n static async getFileData(data: FileData, http: HttpClient): Promise<FileDataWithFile> {\n if (data.file) {\n return {\n file: data.file,\n name: data.name,\n url: data.url,\n type: data.type,\n size: data.size\n };\n }\n else {\n return {\n file: await FileUtilities.getFileFromUrl(data.url as string, http),\n name: data.name,\n url: data.url,\n type: data.type,\n size: data.size\n };\n }\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Downloads a single file from the given File Data.\n * @param fileData - The file data. Needs to contain a blob.\n */\n static downloadSingleFile(fileData: FileDataWithFile): void {\n this.downLoadBlob(fileData.file, fileData.name);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Downloads a blob.\n * @param blob - The blob to download.\n * @param name - The name of the downloaded file.\n */\n static downLoadBlob(blob: Blob, name?: string): void {\n const a: HTMLAnchorElement = document.createElement('a');\n const objectUrl: string = URL.createObjectURL(blob);\n a.href = objectUrl;\n if (name) {\n a.download = name;\n }\n a.click();\n URL.revokeObjectURL(objectUrl);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Downloads multiple files as a zip with the given name.\n * @param name - The name of the zip file to generate.\n * @param multiFileData - The file data array to put in the zip.\n * @param http - The angular HttpClient. Used to fetch files.\n */\n static async downloadMultipleFiles(name: string, multiFileData: FileData[], http: HttpClient): Promise<void> {\n const zip: Zip = JSZipUtilities.new();\n for (let i: number = 0; i < multiFileData.length; i++) {\n multiFileData[i] = await FileUtilities.getFileData(multiFileData[i], http);\n zip.file(multiFileData[i].name, (multiFileData[i] as FileDataWithFile).file);\n }\n const zipBlob: Blob = await zip.generateAsync({ type: 'blob' });\n const fileData: FileDataWithFile = {\n name: name,\n file: zipBlob,\n type: 'application/zip',\n size: zipBlob.size\n };\n FileUtilities.downloadSingleFile(fileData);\n }\n\n /**\n * Checks if the given file has a valid mime type.\n * @param type - The type of the file to check.\n * @param allowedMimeTypes - The allowed mime types.\n * @returns Whether or not the given file has a valid mime type.\n */\n static isMimeTypeValid(type: string, allowedMimeTypes: string[]): boolean {\n if (allowedMimeTypes.includes('*')) {\n return true;\n }\n for (const t of allowedMimeTypes) {\n if (t === type) {\n return true;\n }\n if (t.endsWith('*') && type.startsWith(t.split('*')[0])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Transform the given value to Megabytes.\n * @param value - The original value.\n * @param unit - If the value is B, KB or GB.\n * @returns The given value as bytes.\n */\n static transformToMegaBytes(value: number, unit: 'B' | 'KB' | 'GB'): number {\n const bytes: number = this.transformToBytes(LodashUtilities.cloneDeep(value), unit);\n return bytes / 1000000;\n }\n\n private static transformToBytes(value: number, unit: 'B' | 'KB' | 'GB'): number {\n switch (unit) {\n case 'B':\n return value;\n case 'KB':\n return value * 1000;\n case 'GB':\n return value * 1000000000;\n }\n }\n}","import { AutocompleteStringChipsArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from '../array/array-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from '../boolean/boolean-decorator-internal.data';\nimport { CustomDecoratorConfigInternal } from '../custom/custom-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from '../date/date-decorator-internal.data';\nimport { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from '../file/file-decorator-internal.data';\nimport { HasManyDecoratorConfigInternal } from '../has-many/has-many-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from '../number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal, DropdownObjectDecoratorConfigInternal } from '../object/object-decorator-internal.data';\nimport { ReferencesManyDecoratorConfigInternal } from '../references-many/references-many-decorator-internal.data';\nimport { ReferencesOneDecoratorConfigInternal } from '../references-one/references-one-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../string/string-decorator-internal.data';\n\n/**\n * The enum Values for all the different DecoratorTypes.\n */\nexport enum DecoratorTypes {\n STRING = 'string',\n STRING_DROPDOWN = 'stringDropdown',\n STRING_AUTOCOMPLETE = 'stringAutocomplete',\n STRING_TEXTBOX = 'stringTextbox',\n STRING_PASSWORD = 'stringPassword',\n NUMBER = 'number',\n NUMBER_DROPDOWN = 'numberDropdown',\n NUMBER_SLIDER = 'numberSlider',\n BOOLEAN_CHECKBOX = 'boolean',\n BOOLEAN_TOGGLE = 'booleanToggle',\n BOOLEAN_DROPDOWN = 'booleanDropdown',\n OBJECT = 'object',\n OBJECT_DROPDOWN = 'objectDropdown',\n ARRAY = 'array',\n ARRAY_DATE = 'arrayDate',\n ARRAY_DATE_TIME = 'arrayDateTime',\n ARRAY_DATE_RANGE = 'arrayDateRange',\n ARRAY_STRING_CHIPS = 'arrayStringChips',\n ARRAY_STRING_AUTOCOMPLETE_CHIPS = 'arrayStringAutocompleteChips',\n DATE = 'date',\n DATE_RANGE = 'dateRange',\n DATE_TIME = 'dateTime',\n FILE_DEFAULT = 'fileDefault',\n FILE_IMAGE = 'fileImage',\n REFERENCES_MANY = 'referencesMany',\n REFERENCES_ONE = 'referencesOne',\n HAS_MANY = 'hasMany',\n CUSTOM = 'custom'\n}\n\n/**\n * Gives the metadata-config Type based on the DecoratorTypes enum.\n */\nexport type DecoratorType<T, CustomMetadataType extends Record<string, unknown>> =\n T extends DecoratorTypes.STRING ? DefaultStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_TEXTBOX ? TextboxStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_DROPDOWN ? DropdownStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_AUTOCOMPLETE ? AutocompleteStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_PASSWORD ? PasswordStringDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER ? DefaultNumberDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER_DROPDOWN ? DropdownNumberDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER_SLIDER ? SliderNumberDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_CHECKBOX ? CheckboxBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_TOGGLE ? ToggleBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_DROPDOWN ? DropdownBooleanDecoratorConfigInternal\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.OBJECT ? DefaultObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.OBJECT_DROPDOWN ? DropdownObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.ARRAY ? EntityArrayDecoratorConfigInternal<any>\n : T extends DecoratorTypes.ARRAY_DATE ? DateArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_DATE_TIME ? DateTimeArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_DATE_RANGE ? DateRangeArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_STRING_CHIPS ? StringChipsArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS ? AutocompleteStringChipsArrayDecoratorConfigInternal\n : T extends DecoratorTypes.DATE ? DefaultDateDecoratorConfigInternal\n : T extends DecoratorTypes.DATE_RANGE ? DateRangeDateDecoratorConfigInternal\n : T extends DecoratorTypes.DATE_TIME ? DateTimeDateDecoratorConfigInternal\n : T extends DecoratorTypes.FILE_DEFAULT ? DefaultFileDecoratorConfigInternal\n : T extends DecoratorTypes.FILE_IMAGE ? ImageFileDecoratorConfigInternal\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.REFERENCES_MANY ? ReferencesManyDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.REFERENCES_ONE ? ReferencesOneDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.HAS_MANY ? HasManyDecoratorConfigInternal<any, any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.CUSTOM ? CustomDecoratorConfigInternal<any, any, CustomMetadataType, any>\n : never;","// eslint-disable-next-line eslintImport/no-unassigned-import\nimport 'reflect-metadata';\n\n/**\n * Encapsulates all functionality of Reflect.\n */\nexport abstract class ReflectUtilities {\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey - A key used to store and retrieve metadata.\n * @param target - The target object on which the metadata is defined.\n * @param propertyKey - The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, undefined.\n */\n static getMetadata<T extends object>(metadataKey: string, target: T, propertyKey: keyof T): unknown {\n return Reflect.getMetadata(metadataKey, target, propertyKey as string);\n }\n\n /**\n * Returns the string and symbol keys of the own properties of an object. The own properties of an object\n * are those that are defined directly on that object, and are not inherited from the object's prototype.\n * @param target - Object that contains the own properties.\n * @returns The keys of the given object.\n */\n static ownKeys<T extends object>(target: T): (keyof T)[] {\n const res: (keyof T)[] = [];\n for (const key in target) {\n res.push(key);\n }\n return res;\n }\n\n /**\n * Gets the property of target, equivalent to `target[propertyKey]`.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - The property name.\n * @returns The property of the target of the given key.\n */\n static get<T extends object>(target: T, propertyKey: keyof T): unknown {\n return Reflect.get(target, propertyKey);\n }\n\n /**\n * Sets the property of target, equivalent to `target[propertyKey] = value`.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - The property name.\n * @param value - The value to set the property to.\n * @returns If setting the value was successful.\n */\n static set<T extends object>(target: T, propertyKey: keyof T, value: unknown): boolean {\n return Reflect.set(target, propertyKey, value);\n }\n\n /**\n * Equivalent to `propertyKey in target`.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - Name of the property.\n * @returns Whether or not the given target has the key.\n */\n static has<T extends object>(target: T, propertyKey: keyof T): boolean {\n return Reflect.has(target, propertyKey);\n }\n\n /**\n * Checks if the targets key entry has a metadata value for the given metadata key.\n * @returns Whether the metadata is null or not.\n * @param metadataKey - The key of the metadata on the property.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - The key of the target.\n */\n static hasMetadata<T extends object>(metadataKey: string, target: T, propertyKey: keyof T): boolean {\n return this.getMetadata(metadataKey, target, propertyKey) != null;\n }\n\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey - A key used to store and retrieve metadata.\n * @param metadataValue - A value that contains attached metadata.\n * @param target - The target object on which to define metadata.\n * @param propertyKey - The property key for the target.\n */\n static defineMetadata<T extends object>(\n metadataKey: unknown,\n metadataValue: unknown,\n target: T,\n propertyKey: keyof T\n ): void {\n Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey as string);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentInjector, runInInjectionContext } from '@angular/core';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DateUtilities } from './date.utilities';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from '../classes/entity.model';\nimport { DateRangeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { DecoratorType, DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { CustomDecoratorConfigInternal } from '../decorators/custom/custom-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal } from '../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../decorators/date/date-decorator.data';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../decorators/object/object-decorator-internal.data';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../encapsulation/reflect.utilities';\n\n/**\n * Shows information about differences between two entities.\n */\nexport interface Difference<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The key where the two entities have different values.\n */\n key: keyof EntityType,\n /**\n * The value before any changes.\n */\n before: unknown,\n /**\n * The current value after changes.\n */\n after: unknown\n}\n\n/**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\nexport abstract class EntityUtilities {\n\n /**\n * The key for all keys of metadata that should be set to undefined when the entity gets reset.\n */\n static readonly METADATA_KEYS_TO_RESET_KEY: string = 'metadataKeysToReset';\n\n /**\n * The key for the metadata that saves the single preview image value on image properties.\n */\n static readonly SINGLE_PREVIEW_IMAGE_KEY: string = 'singlePreviewImage';\n\n /**\n * The key for the metadata that saves the multi preview images value on image properties.\n */\n static readonly MULTI_PREVIEW_IMAGES_KEY: string = 'multiPreviewImages';\n\n /**\n * The key for the metadata that saves the filenames value on file properties.\n */\n static readonly FILENAMES_KEY: string = 'fileNames';\n\n /**\n * The key for the metadata that saves the confirm password value on password properties.\n */\n static readonly CONFIRM_PASSWORD_KEY: string = 'confirmPassword';\n\n /**\n * The key for the metadata that saves the time value on date time properties.\n */\n static readonly TIME_KEY: string = 'time';\n\n /**\n * Gets the properties to omit when updating the entity.\n * @param entity - The entity to get the properties which should be left out for updating from.\n * @returns The properties which should be left out for updating an Entity.\n */\n static getOmitForUpdate<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!metadata || metadata.omitForUpdate) {\n res.push(key);\n }\n }\n return res;\n }\n\n /**\n * Gets the properties to omit when creating new entities.\n * @param entity - The entity to get the properties which should be left out for creating from.\n * @returns The properties which should be left out for creating a new Entity.\n */\n static getOmitForCreate<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!metadata || metadata.omitForCreate) {\n res.push(key);\n }\n }\n return res;\n }\n\n /**\n * Returns the given entity without the values that should be omitted for creation.\n * @param entity - The entity with all its values.\n * @returns The reduced entity object.\n */\n static getWithoutOmitCreateValues<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): Partial<EntityType> {\n return LodashUtilities.omit(entity, this.getOmitForCreate(entity)) as Partial<EntityType>;\n }\n\n /**\n * Returns the given entity without the values that should be omitted for updating.\n * This also handles omitting keys for @object or @array values and removes values that haven't been changed by default.\n * @param entity - The entity with all its values.\n * @param entityPriorChanges - The entity before any changes were applied.\n * @param http - The angular HttpClient. Used to fetch files.\n * @param injector - An angular environment injector.\n * @returns The reduced entity object.\n */\n static async getWithoutOmitUpdateValues<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType,\n http: HttpClient,\n injector: EnvironmentInjector\n ): Promise<Partial<EntityType>> {\n const res: Partial<EntityType> = {};\n for (const key of this.keysOf(entity, injector, false, true)) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n const type: DecoratorTypes | undefined = this.getPropertyType(entity, key);\n if (!(await this.isEqual(entity[key], entityPriorChanges[key], metadata, type, http))) {\n switch (type) {\n case DecoratorTypes.OBJECT:\n // eslint-disable-next-line typescript/no-explicit-any\n (res[key] as object) = LodashUtilities.omit(entity[key] as any, this.getOmitForCreate(entity[key]));\n break;\n case DecoratorTypes.ARRAY:\n (res[key] as object[]) = (entity[key] as object[])\n .map(value => LodashUtilities.omit(value, this.getOmitForCreate(value)));\n break;\n default:\n res[key] = entity[key];\n break;\n }\n }\n }\n return res;\n }\n\n /**\n * Sets all default values on the given entity.\n * @param entity - The entity to set the default values on.\n */\n static setDefaultValues<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): void {\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (metadata?.default) {\n // eslint-disable-next-line typescript/no-unsafe-assignment, typescript/no-explicit-any\n entity[key] = metadata.default() as any;\n }\n }\n }\n\n /**\n * Gets all properties on the given entity which are files.\n * @param entity - The entity to check for file properties.\n * @param omit - Whether to leave out values that are omitted for create or delete.\n * @returns The keys of all file properties on the given entity.\n */\n static getFileProperties<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n omit?: 'create' | 'update'\n ): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const type: DecoratorTypes | undefined = this.getPropertyType(entity, key);\n if (type === DecoratorTypes.FILE_DEFAULT || type === DecoratorTypes.FILE_IMAGE) {\n const metadata: PropertyDecoratorConfigInternal<unknown> = this.getPropertyMetadata(entity, key) as PropertyDecoratorConfigInternal<unknown>;\n if (!(metadata.omitForCreate && omit === 'create') && !(metadata.omitForUpdate && omit === 'update')) {\n res.push(key);\n }\n }\n }\n return res;\n }\n\n /**\n * Gets the metadata included in an property.\n * @param entity - The entity with the property to get the metadata from.\n * @param propertyKey - The property on the given Entity to get the metadata from.\n * @param type - For secure Typing, defines the returned PropertyConfig.\n * @returns The metadata of the property.\n * @throws When no metadata can be found for the given property.\n */\n static getPropertyMetadata<\n EntityType extends BaseEntityType<EntityType>,\n T extends DecoratorTypes,\n CustomMetadataType extends Record<string, unknown>\n >(\n entity: EntityType,\n propertyKey: keyof EntityType,\n // eslint-disable-next-line unusedImports/no-unused-vars\n type?: T\n ): DecoratorType<T, CustomMetadataType> | undefined {\n const metadata: unknown = ReflectUtilities.getMetadata('metadata', entity, propertyKey);\n // if (metadata == null) {\n // throw new Error(`Could not find metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`);\n // }\n return metadata as DecoratorType<T, CustomMetadataType> | undefined;\n }\n\n /**\n * Gets the type of the property-metadata.\n * @param entity - The entity with the property to get the type from.\n * @param propertyKey - The property on the given Entity to get the type from.\n * @returns The type of the metadata.\n * @throws Will throw an error if no metadata can be found for the given property.\n */\n static getPropertyType<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType, propertyKey: keyof EntityType\n ): DecoratorTypes | undefined {\n return ReflectUtilities.getMetadata('type', entity, propertyKey) as DecoratorTypes | undefined;\n }\n\n /**\n * Sets all property values based on a given entity data-object.\n * @param target - The target object that needs to be constructed (if called inside an Entity constructor its usually this).\n * @param entity - The data object to get the property values from.\n * @alias new\n * @alias build\n * @alias construct\n */\n static new<EntityType extends BaseEntityType<EntityType>>(target: EntityType, entity?: EntityType): void {\n for (const key in target) {\n const type: DecoratorTypes | undefined = this.getPropertyType(target, key);\n let value: unknown = entity ? ReflectUtilities.get(entity, key) : undefined;\n switch (type) {\n case DecoratorTypes.OBJECT:\n // eslint-disable-next-line typescript/no-explicit-any\n const objectMetadata: DefaultObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n = this.getPropertyMetadata(target, key, DecoratorTypes.OBJECT) as DefaultObjectDecoratorConfigInternal<any>;\n value = new objectMetadata.EntityClass(value as object | undefined);\n break;\n case DecoratorTypes.ARRAY:\n const inputArray: EntityType[] | undefined = value as EntityType[] | undefined;\n const resArray: EntityType[] = [];\n if (inputArray) {\n // eslint-disable-next-line typescript/no-explicit-any\n const arrayMetadata: EntityArrayDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n = this.getPropertyMetadata(target, key, DecoratorTypes.ARRAY) as EntityArrayDecoratorConfigInternal<any>;\n for (const item of inputArray) {\n const itemWithMetadata: EntityType = new arrayMetadata.EntityClass(item) as EntityType;\n resArray.push(itemWithMetadata);\n }\n }\n value = resArray;\n break;\n default:\n break;\n }\n ReflectUtilities.set(target, key, value);\n }\n }\n // eslint-disable-next-line typescript/member-ordering, jsdoc/require-jsdoc, typescript/typedef\n static construct = this.new;\n // eslint-disable-next-line typescript/member-ordering, jsdoc/require-jsdoc, typescript/typedef\n static build = this.new;\n\n /**\n * Checks if an entity is \"dirty\" (if its values have changed).\n * @param entity - The entity after all changes.\n * @param entityPriorChanges - The entity before the changes.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns Whether or not the entity is dirty.\n */\n static async isDirty<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType,\n http: HttpClient\n ): Promise<boolean> {\n if (!(entityPriorChanges as EntityType | undefined)) {\n return false;\n }\n const differences: Difference<EntityType>[] = await this.getDifferencesBetweenEntities(entity, entityPriorChanges, http);\n return differences.length ? true : false;\n }\n\n /**\n * Gets the differences between the two given entities.\n * @param entity - The entity as is.\n * @param entityPriorChanges - The entity before any changes have been made.\n * @param http - The angular http client, is needed to check if files are equal.\n * @returns The differences as an array consisting of key, before and after.\n */\n static async getDifferencesBetweenEntities<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType,\n http: HttpClient\n ): Promise<Difference<EntityType>[]> {\n const res: Difference<EntityType>[] = [];\n for (const key in entity) {\n const type: DecoratorTypes | undefined = this.getPropertyType(entity, key);\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!(await this.isEqual(entity[key], entityPriorChanges[key], metadata, type, http))) {\n res.push({\n key: key,\n before: entityPriorChanges[key],\n after: entity[key]\n });\n }\n else {\n // This is needed to set blob file data so that it is only requested once.\n entityPriorChanges[key] = LodashUtilities.cloneDeep(entity[key]);\n }\n }\n return res;\n }\n\n /**\n * Checks if two given values are equal.\n * It uses the isEqual method from LodashUtilities and extends it with functionality regarding Dates.\n * @param value - The updated value.\n * @param valuePriorChanges - The value before any changes.\n * @param metadata - The metadata of the property.\n * @param type - The type of the property.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns Whether or not the given values are equal.\n */\n static async isEqual(\n value: unknown,\n valuePriorChanges: unknown,\n metadata: PropertyDecoratorConfigInternal<unknown> | undefined,\n type: DecoratorTypes | undefined,\n http: HttpClient\n ): Promise<boolean> {\n switch (type) {\n case DecoratorTypes.DATE_RANGE:\n return this.isEqualDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeDateDecoratorConfigInternal).filter\n );\n case DecoratorTypes.DATE:\n return this.isEqualDate(value, valuePriorChanges);\n case DecoratorTypes.DATE_TIME:\n return this.isEqualDateTime(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE:\n case DecoratorTypes.ARRAY_DATE_TIME:\n return this.isEqualArrayDate(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE_RANGE:\n return this.isEqualArrayDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeArrayDecoratorConfigInternal).filter\n );\n case DecoratorTypes.ARRAY_STRING_CHIPS:\n case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS:\n return this.isEqualArrayString(value, valuePriorChanges);\n case DecoratorTypes.FILE_IMAGE:\n case DecoratorTypes.FILE_DEFAULT:\n return this.isEqualFile(value, valuePriorChanges, (metadata as DefaultFileDecoratorConfigInternal).multiple, http);\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line typescript/no-explicit-any\n return this.isEqualCustom(value, valuePriorChanges, metadata as CustomDecoratorConfigInternal<any, any, any, any>);\n default:\n return LodashUtilities.isEqual(value, valuePriorChanges);\n }\n }\n\n private static isEqualArrayString(value: unknown, valuePriorChanges: unknown): boolean | PromiseLike<boolean> {\n let stringArray: string[] | undefined = LodashUtilities.cloneDeep(value as string[] | undefined);\n if (stringArray) {\n stringArray = stringArray.sort();\n }\n let stringArrayPriorChanges: string[] | undefined = LodashUtilities.cloneDeep(valuePriorChanges as string[] | undefined);\n if (stringArrayPriorChanges) {\n stringArrayPriorChanges = stringArrayPriorChanges.sort();\n }\n return LodashUtilities.isEqual(stringArray, stringArrayPriorChanges);\n }\n\n private static isEqualArrayDate(value: unknown, valuePriorChanges: unknown): boolean {\n let newValue: Date[] | undefined = LodashUtilities.cloneDeep(value as Date[] | undefined);\n if (newValue) {\n newValue = newValue.map(v => new Date(v)).sort();\n }\n let newValuePriorChanges: Date[] | undefined = LodashUtilities.cloneDeep(valuePriorChanges as Date[] | undefined);\n if (newValuePriorChanges) {\n newValuePriorChanges = newValuePriorChanges.map(v => new Date(v)).sort();\n }\n return LodashUtilities.isEqual(newValue, newValuePriorChanges);\n }\n\n private static isEqualArrayDateRange(value: unknown, valuePriorChanges: unknown, filter?: DateFilterFn<Date>): boolean {\n let dateRanges: DateRange[] | undefined = LodashUtilities.cloneDeep(value as DateRange[] | undefined);\n if (dateRanges) {\n dateRanges = dateRanges.sort();\n }\n let dateRangesPriorChanges: DateRange[] | undefined = LodashUtilities.cloneDeep(valuePriorChanges as DateRange[] | undefined);\n if (dateRangesPriorChanges) {\n dateRangesPriorChanges = dateRangesPriorChanges.sort();\n }\n if (dateRanges?.length !== dateRangesPriorChanges?.length) {\n return false;\n }\n if (dateRanges?.length) {\n for (let i: number = 0; i < dateRanges?.length; i++) {\n if (!this.isEqualDateRange(dateRanges?.[i], dateRangesPriorChanges?.[i], filter)) {\n return false;\n }\n }\n }\n return true;\n }\n\n private static isEqualDateTime(value: unknown, valuePriorChanges: unknown): boolean {\n const date: Date = new Date(value as Date);\n const datePriorChanges: Date = new Date(valuePriorChanges as Date);\n return LodashUtilities.isEqual(date, datePriorChanges);\n }\n\n private static isEqualDate(value: unknown, valuePriorChanges: unknown): boolean {\n const date: Date = new Date(value as Date);\n const datePriorChanges: Date = new Date(valuePriorChanges as Date);\n date.setHours(0, 0, 0, 0);\n datePriorChanges.setHours(0, 0, 0, 0);\n return LodashUtilities.isEqual(date, datePriorChanges);\n }\n\n private static isEqualDateRange(value: unknown, valuePriorChanges: unknown, filter?: DateFilterFn<Date>): boolean {\n const dateRange: Partial<DateRange> | undefined = LodashUtilities.cloneDeep(value) as Partial<DateRange> | undefined;\n if (dateRange?.start) {\n dateRange.start = new Date(dateRange.start);\n }\n if (dateRange?.end) {\n dateRange.end = new Date(dateRange.end);\n }\n if (dateRange?.start && dateRange.end) {\n dateRange.values = DateUtilities.getDatesBetween(\n dateRange.start,\n dateRange.end,\n filter\n );\n }\n const dateRangePriorChanges: Partial<DateRange> | undefined = LodashUtilities.cloneDeep(valuePriorChanges) as Partial<DateRange> | undefined;\n if (dateRangePriorChanges?.start) {\n dateRangePriorChanges.start = new Date(dateRangePriorChanges.start);\n }\n if (dateRangePriorChanges?.end) {\n dateRangePriorChanges.end = new Date(dateRangePriorChanges.end);\n }\n if (dateRangePriorChanges?.start && dateRangePriorChanges.end) {\n dateRangePriorChanges.values = DateUtilities.getDatesBetween(\n dateRangePriorChanges.start,\n dateRangePriorChanges.end,\n filter\n );\n }\n return LodashUtilities.isEqual(dateRange, dateRangePriorChanges);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n private static async isEqualFile(value: unknown, valuePriorChanges: unknown, multiple: boolean, http: HttpClient): Promise<boolean> {\n if (value == null) {\n if (valuePriorChanges == null) {\n return true;\n }\n else {\n return false;\n }\n }\n if (valuePriorChanges == null) {\n return false;\n }\n const files: FileData[] = multiple ? (value as FileData[]).sort() : [value as FileData].sort();\n const filesPriorChanges: FileData[] = multiple ? (valuePriorChanges as FileData[]).sort() : [valuePriorChanges as FileData].sort();\n if (files.length !== filesPriorChanges.length) {\n return false;\n }\n for (let i: number = 0; i < files.length; i++) {\n // checks this before actually getting any files due to performance reasons.\n if (!LodashUtilities.isEqual(LodashUtilities.omit(files[i], 'file'), LodashUtilities.omit(filesPriorChanges[i], 'file'))) {\n return false;\n }\n if (filesPriorChanges[i].file && !files[i].file) {\n files[i] = await FileUtilities.getFileData(files[i], http);\n value = files[i];\n }\n if (files[i].file && !filesPriorChanges[i].file) {\n filesPriorChanges[i] = await FileUtilities.getFileData(filesPriorChanges[i], http);\n valuePriorChanges = filesPriorChanges[i];\n }\n if (!LodashUtilities.isEqual(await files[i].file?.text(), await filesPriorChanges[i].file?.text())) {\n return false;\n }\n }\n return true;\n }\n\n private static isEqualCustom(\n value: unknown,\n valuePriorChanges: unknown,\n // eslint-disable-next-line typescript/no-explicit-any\n metadata: CustomDecoratorConfigInternal<any, any, any, any>\n ): boolean {\n if (!metadata.isEqual(value, valuePriorChanges, metadata)) {\n return false;\n }\n return true;\n }\n\n /**\n * Compare function for sorting entity keys by their order value.\n * @param a - First key of entity.\n * @param b - Second key of entity.\n * @param entity - Current entity (used to get metadata of entity keys).\n * @returns 0 if both values have the same order, a negative value if 'a' comes before 'b', a positive value if 'a' comes behind 'b'.\n */\n static compareOrder<EntityType extends BaseEntityType<EntityType>>(\n a: keyof EntityType,\n b: keyof EntityType,\n entity: EntityType\n ): number {\n const metadataA: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, a);\n const metadataB: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, b);\n\n if (!metadataA || !metadataB) {\n return 0;\n }\n\n if (metadataA.position.order === -1) {\n if (metadataB.position.order === -1) {\n return 0;\n }\n return 1;\n }\n else if (metadataB.position.order === -1) {\n return -1;\n }\n return metadataA.position.order - metadataB.position.order;\n }\n\n /**\n * Gets the bootstrap column classes for \"lg\", \"md\" and \"sm\".\n * @param entity - Entity to get the bootstrap column values of the key.\n * @param key - Key of the property to get bootstrap column values from.\n * @returns Bootstrap column classes.\n * @throws When no metadata for the given key was found.\n */\n static getWidthClasses<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, key: keyof EntityType): string {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!metadata) {\n throw new Error(`Could not get metadata for property \"${key.toString()}\"`);\n }\n return `col-lg-${metadata.defaultWidths[0]} col-md-${metadata.defaultWidths[1]} col-sm-${metadata.defaultWidths[2]}`;\n }\n\n /**\n * Resets all changes on an entity.\n * @param entity - The entity to reset.\n * @param entityPriorChanges - The entity before any changes.\n */\n static resetChangesOnEntity<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, entityPriorChanges: EntityType): void {\n for (const key in entityPriorChanges) {\n ReflectUtilities.set(entity, key, ReflectUtilities.get(entityPriorChanges, key));\n if (ReflectUtilities.hasMetadata(this.METADATA_KEYS_TO_RESET_KEY, entity, key)) {\n for (const k of (ReflectUtilities.getMetadata(this.METADATA_KEYS_TO_RESET_KEY, entity, key) as string[])) {\n if (ReflectUtilities.hasMetadata(k, entity, key)) {\n ReflectUtilities.defineMetadata(k, undefined, entity, key);\n }\n }\n }\n }\n }\n\n private static getEntityRows<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n tab: number,\n hideOmitForCreate: boolean,\n hideOmitForEdit: boolean,\n additionalOmitValues: (keyof EntityType)[],\n injector: EnvironmentInjector\n ): EntityRow<EntityType>[] {\n const res: EntityRow<EntityType>[] = [];\n\n const keys: (keyof EntityType)[] = this.keysOf(entity, injector, hideOmitForCreate, hideOmitForEdit)\n .filter(k => !additionalOmitValues.includes(k));\n const numberOfRows: number = this.getNumberOfRows<EntityType>(keys, entity, tab);\n for (let i: number = 1; i <= numberOfRows; i++) {\n const row: EntityRow<EntityType> = {\n row: i,\n keys: this.getKeysForRow<EntityType>(keys, entity, i, tab)\n };\n res.push(row);\n }\n\n if (this.getKeysForRow<EntityType>(keys, entity, -1, tab).length) {\n const lastRow: EntityRow<EntityType> = {\n row: numberOfRows + 1,\n keys: this.getKeysForRow<EntityType>(keys, entity, -1, tab)\n };\n res.push(lastRow);\n }\n\n return res;\n }\n\n /**\n * Gets the tabs that are used to display the given entity.\n * @param entity - The entity to get the rows from.\n * @param injector - An angular environment injector.\n * @param hideOmitForCreate - Whether or not keys with the metadata omitForCreate should be filtered out.\n * @param hideOmitForEdit - Whether or not keys with the metadata omitForUpdate should be filtered out.\n * @param additionalOmitKeys - Additional omit values.\n * @returns The sorted Tabs containing the rows and the keys to display in that row.\n */\n static getEntityTabs<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false,\n additionalOmitKeys: (keyof EntityType)[] = []\n ): EntityTab<EntityType>[] {\n const res: EntityTab<EntityType>[] = [];\n const keys: (keyof EntityType)[] = this.keysOf(entity, injector, hideOmitForCreate, hideOmitForEdit)\n .filter(k => !additionalOmitKeys.includes(k));\n const numberOfTabs: number = this.getNumberOfTabs<EntityType>(keys, entity);\n\n const firstTabRows: EntityRow<EntityType>[] = this.getEntityRows<EntityType>(entity, -1, hideOmitForCreate, hideOmitForEdit, additionalOmitKeys, injector);\n if (firstTabRows.length) {\n const firstTab: EntityTab<EntityType> = {\n tabName: this.getFirstTabName(entity),\n tab: -1,\n rows: firstTabRows\n };\n res.push(firstTab);\n }\n\n for (let i: number = 2; i <= numberOfTabs; i++) {\n const rows: EntityRow<EntityType>[] = this.getEntityRows<EntityType>(\n entity, i, hideOmitForCreate, hideOmitForEdit, additionalOmitKeys, injector\n );\n if (rows.length) {\n const tab: EntityTab<EntityType> = {\n tabName: this.getTabName(entity, i),\n tab: i,\n rows: rows\n };\n res.push(tab);\n }\n }\n\n return res;\n }\n\n private static getKeysForRow<EntityType extends BaseEntityType<EntityType>>(\n keys: (keyof EntityType)[],\n entity: EntityType,\n row: number,\n tab: number\n ): (keyof EntityType)[] {\n return keys\n .filter(k => this.getPropertyMetadata(entity, k)?.position.row === row)\n .filter(k => this.getPropertyMetadata(entity, k)?.position.tab === tab)\n .sort((a, b) => this.compareOrder(a, b, entity));\n }\n\n private static getNumberOfRows<EntityType extends BaseEntityType<EntityType>>(\n keys: (keyof EntityType)[],\n entity: EntityType,\n tab: number\n ): number {\n return (keys\n .filter(k => this.getPropertyMetadata(entity, k)?.position.tab === tab)\n .map(k => this.getPropertyMetadata(entity, k)?.position.row) as number[])\n .sort((a, b) => (a > b ? -1 : 1))[0];\n }\n\n private static getNumberOfTabs<EntityType extends BaseEntityType<EntityType>>(keys: (keyof EntityType)[], entity: EntityType): number {\n return (keys\n .filter(k => this.getPropertyMetadata(entity, k) != null)\n .map(k => this.getPropertyMetadata(entity, k)?.position.tab) as number[])\n .sort((a, b) => (a > b ? -1 : 1))[0];\n }\n\n private static getTabName<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, tab: number): string {\n const providedTabName: string | undefined = ReflectUtilities.ownKeys(entity)\n .map(k => this.getPropertyMetadata(entity, k))\n .find(m => m?.position.tab === tab && m.position.tabName)?.position.tabName;\n return providedTabName ?? `Tab ${tab}`;\n }\n\n private static getFirstTabName<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): string {\n const providedTabName: string | undefined = ReflectUtilities.ownKeys(entity)\n .map(k => this.getPropertyMetadata(entity, k))\n .find(m => m?.position.tabName && m.position.tab === -1)?.position.tabName;\n return providedTabName ?? 'Tab 1';\n }\n\n /**\n * Gets the keys of the provided entity correctly typed.\n * @param entity - The entity to get the keys of.\n * @param injector - An angular environment injector.\n * @param hideOmitForCreate - Whether or not keys with the metadata omitForCreate should be filtered out.\n * @param hideOmitForEdit - Whether or not keys with the metadata omitForUpdate should be filtered out.\n * @returns An array of keys of the entity.\n */\n static keysOf<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false\n ): (keyof EntityType)[] {\n let keys: (keyof EntityType)[] = ReflectUtilities.ownKeys(entity);\n const dontDisplayKeys: (keyof EntityType)[] = this.getDontDisplayKeys(entity, injector);\n keys = keys.filter(k => !dontDisplayKeys.includes(k));\n if (hideOmitForCreate) {\n const omitForCreateKeys: (keyof EntityType)[] = this.getOmitForCreate(entity);\n keys = keys.filter(k => !omitForCreateKeys.includes(k));\n }\n if (hideOmitForEdit) {\n const omitForUpdateKeys: (keyof EntityType)[] = this.getOmitForUpdate(entity);\n keys = keys.filter(k => !omitForUpdateKeys.includes(k));\n }\n return keys;\n }\n\n private static getDontDisplayKeys<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector\n ): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (runInInjectionContext(injector, () => !metadata || !metadata.display(entity))) {\n res.push(key);\n }\n }\n return res;\n }\n}\n\n/**\n * A row that contains information about how to display an entity.\n */\nexport interface EntityRow<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The row in which this should be displayed.\n */\n row: number,\n /**\n * The keys of the values that should be displayed in that row.\n */\n keys: (keyof EntityType)[]\n}\n\n/**\n * A tab that contains all the information about how to display an entity.\n */\nexport interface EntityTab<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The tab in which the rows should be displayed.\n */\n tab: number,\n /**\n * The name to display inside the tab.\n */\n tabName: string,\n /**\n * The rows that should be displayed inside this tab,.\n */\n rows: EntityRow<EntityType>[]\n}","import { DecoratorType, DecoratorTypes } from './decorator-types.enum';\nimport { ReflectUtilities } from '../../encapsulation/reflect.utilities';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\n\n/**\n * The base decorator for setting metadata on properties.\n * @param metadata - The metadata to define.\n * @param type - The type of metadata.\n * @param metadataKeysToReset - Any metadata keys which values should be set to undefined on reset.\n * @returns The method that sets the metadata.\n */\nexport function baseProperty<\n T extends DecoratorTypes,\n CustomMetadataType extends Record<string, unknown>\n>(metadata: DecoratorType<T, CustomMetadataType>, type: T, metadataKeysToReset?: string[]) {\n return function (target: object, propertyKey: string) {\n ReflectUtilities.defineMetadata('metadata', metadata, target, propertyKey as keyof object);\n ReflectUtilities.defineMetadata('type', type, target, propertyKey as keyof object);\n\n ReflectUtilities.defineMetadata(EntityUtilities.METADATA_KEYS_TO_RESET_KEY, metadataKeysToReset, target, propertyKey as keyof object);\n };\n}","import { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from './string-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting string Property metadata.\n * @param metadata - The metadata of the string property.\n * @returns The method that defines the metadata.\n */\nexport function string(\n metadata: DropdownStringDecoratorConfig | AutocompleteStringDecoratorConfig\n | DefaultStringDecoratorConfig | TextboxStringDecoratorConfig | PasswordStringDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.displayStyle) {\n case 'dropdown':\n return baseProperty(new DropdownStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_DROPDOWN);\n case 'autocomplete':\n return baseProperty(new AutocompleteStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_AUTOCOMPLETE);\n case 'textbox':\n return baseProperty(new TextboxStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_TEXTBOX);\n case 'password':\n return baseProperty(\n new PasswordStringDecoratorConfigInternal(metadata),\n DecoratorTypes.STRING_PASSWORD,\n [EntityUtilities.CONFIRM_PASSWORD_KEY]\n );\n default:\n return baseProperty(new DefaultStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentInjector } from '@angular/core';\n\nimport { string } from '../decorators/string/string.decorator';\nimport { EntityService } from '../services/entity.service';\n\n/**\n * The newable type used whenever an entity class is passed to create an entity and initialize its metadata.\n */\nexport type EntityClassNewable<EntityType extends BaseEntityType<EntityType>> = new(data?: EntityType) => EntityType;\n\n/**\n * The newable type used whenever an entity service class is passed.\n */\nexport type EntityServiceClassNewable<EntityType extends BaseEntityType<EntityType>> = new (http: HttpClient, injector: EnvironmentInjector) => EntityService<EntityType>;\n\n/**\n * The Generic Base EntityType.\n */\nexport type BaseEntityType<T> = { [K in keyof T]: unknown };\n\n/**\n * A base Entity class with a builtin id.\n */\nexport abstract class Entity {\n /**\n * A unique identifier for the Entity.\n */\n @string({\n omitForCreate: true,\n omitForUpdate: true,\n display: false,\n displayStyle: 'line',\n displayName: 'ID',\n required: true\n })\n readonly id!: string;\n\n constructor(entity?: Entity) {\n this.id = entity?.id as string;\n }\n}","/* istanbul ignore file */\nimport { NgxGlobalDefaultValues } from './global-configuration-values';\n\n/**\n * The default configuration values of the library.\n */\nexport const defaultGlobalDefaults: NgxGlobalDefaultValues = {\n createLabel: 'Create',\n editLabel: 'Edit',\n cancelLabel: 'Cancel',\n addLabel: 'Add',\n deleteLabel: 'Delete',\n backLabel: 'Back',\n actionsLabel: 'Actions',\n searchLabel: 'Search',\n dropdownTrue: 'Yes',\n dropdownFalse: 'No',\n confirmLabel: 'Confirm',\n defaultConfirmDialogText: ['Do you really want to do this?'],\n defaultConfirmDialogTitle: 'Confirmation',\n confirmSaveText: ['Do you really want to save all changes?'],\n saveLabel: 'Save',\n confirmDeleteText: ['Do you really want to delete this entity?'],\n confirmUnsavedChangesLabel: 'Leave',\n confirmUnsavedChangesDialogLabel: 'Close',\n confirmUnsavedChangesTitle: 'Unsaved Changes',\n confirmUnsavedChangesText: ['You have unsaved changes that will be deleted when you leave this page.', 'Continue?'],\n confirmUnsavedChangesDialogText: ['You have unsaved changes that will be deleted when you close this dialog.', 'Continue?'],\n addArrayItemTitle: 'Add to array',\n confirmCreateText: ['Do you really want to create this entity?'],\n confirmMultiSelectActionText: selectedEntries => [`Do you really want to run this action on ${selectedEntries.length} entries?`],\n confirmBaseActionText: ['Do you really want to run this action?'],\n confirmImportJsonText: ['Do you really want to import entities from the provided file?'],\n defaultEditMethod: 'dialog',\n defaultCreateMethod: 'dialog',\n emptyArrayErrorMessage: 'Needs to contain at least one value',\n removeLabel: 'Remove',\n timeLabel: 'Time',\n startLabel: 'Start',\n endLabel: 'End',\n duplicateErrorText: ['Adding duplicate entries to the array is not allowed.'],\n duplicateErrorTitle: 'Error adding duplicate item',\n editTitle: () => 'Edit',\n selectLabel: 'Select',\n addAllLabel: 'Add all'\n};\n\n/**\n * The key for a config value that still needs an update.\n */\nexport const CONFIG_NEEDS_UPDATE_KEY: string = 'NEEDS_UPDATE';\n\n/**\n * The global defaults for a configuration that needs update.\n */\nexport const needsUpdateGlobalDefaults: NgxGlobalDefaultValues = {\n createLabel: CONFIG_NEEDS_UPDATE_KEY,\n editLabel: CONFIG_NEEDS_UPDATE_KEY,\n cancelLabel: CONFIG_NEEDS_UPDATE_KEY,\n addLabel: CONFIG_NEEDS_UPDATE_KEY,\n deleteLabel: CONFIG_NEEDS_UPDATE_KEY,\n backLabel: CONFIG_NEEDS_UPDATE_KEY,\n actionsLabel: CONFIG_NEEDS_UPDATE_KEY,\n searchLabel: CONFIG_NEEDS_UPDATE_KEY,\n dropdownTrue: CONFIG_NEEDS_UPDATE_KEY,\n dropdownFalse: CONFIG_NEEDS_UPDATE_KEY,\n confirmLabel: CONFIG_NEEDS_UPDATE_KEY,\n defaultConfirmDialogText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n defaultConfirmDialogTitle: CONFIG_NEEDS_UPDATE_KEY,\n saveLabel: CONFIG_NEEDS_UPDATE_KEY,\n confirmSaveText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmDeleteText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmUnsavedChangesLabel: CONFIG_NEEDS_UPDATE_KEY,\n confirmUnsavedChangesDialogLabel: CONFIG_NEEDS_UPDATE_KEY,\n confirmUnsavedChangesTitle: CONFIG_NEEDS_UPDATE_KEY,\n confirmUnsavedChangesText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmUnsavedChangesDialogText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n addArrayItemTitle: CONFIG_NEEDS_UPDATE_KEY,\n confirmCreateText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmMultiSelectActionText: () => CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmBaseActionText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmImportJsonText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n defaultEditMethod: CONFIG_NEEDS_UPDATE_KEY as 'dialog' | 'page',\n defaultCreateMethod: CONFIG_NEEDS_UPDATE_KEY as 'dialog' | 'page',\n emptyArrayErrorMessage: CONFIG_NEEDS_UPDATE_KEY,\n removeLabel: CONFIG_NEEDS_UPDATE_KEY,\n timeLabel: CONFIG_NEEDS_UPDATE_KEY,\n startLabel: CONFIG_NEEDS_UPDATE_KEY,\n endLabel: CONFIG_NEEDS_UPDATE_KEY,\n duplicateErrorText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n duplicateErrorTitle: CONFIG_NEEDS_UPDATE_KEY,\n editTitle: CONFIG_NEEDS_UPDATE_KEY as unknown as () => string,\n selectLabel: CONFIG_NEEDS_UPDATE_KEY,\n addAllLabel: CONFIG_NEEDS_UPDATE_KEY\n};","import { BaseEntityType } from './entity.model';\nimport { CONFIG_NEEDS_UPDATE_KEY } from '../default-global-configuration-values';\nimport { NgxGlobalDefaultValues } from '../global-configuration-values';\n\n/**\n * The abstract BaseBuilder class.\n */\nexport abstract class BaseBuilder<InternalType extends InputType, InputType extends BaseEntityType<InputType>> {\n\n private readonly data: InternalType;\n private readonly inputData?: InputType;\n /**\n * The global configuration, is used for providing default values to fallback to.\n */\n protected readonly globalConfig: NgxGlobalDefaultValues;\n\n protected constructor(globalConfig: NgxGlobalDefaultValues, data?: InputType) {\n this.globalConfig = globalConfig;\n this.validateInput(data);\n this.inputData = data;\n this.data = this.generateBaseData(data);\n return this;\n }\n\n /**\n * Generates the internal data from the given user inputs.\n * @param data - The input from the user.\n * @returns The internal data.\n */\n protected abstract generateBaseData(data?: InputType): InternalType;\n\n /**\n * Used to validate the user input in the constructor.\n * @param data - The user input.\n */\n // eslint-disable-next-line unusedImports/no-unused-vars\n protected validateInput(data?: InputType): void {\n // By default, no validation is done\n }\n\n /**\n * Sets the value for the given key if no user value was provided.\n * @param key - The key to set the default value for.\n * @param value - The value to set when nothing was provided.\n * @returns The Builder.\n */\n withDefault(key: keyof InputType, value: Omit<InternalType[keyof InputType], 'undefined'>): BaseBuilder<InternalType, InputType> {\n if (this.inputData?.[key] == null || this.inputData[key] === CONFIG_NEEDS_UPDATE_KEY) {\n this.data[key] = value as InternalType[keyof InputType];\n }\n return this;\n }\n\n /**\n * Method used to get the final build value after applying all chaining.\n * @returns The build value.\n */\n getResult(): InternalType {\n return this.data;\n }\n}","import { CONFIG_NEEDS_UPDATE_KEY } from '../default-global-configuration-values';\n\n/**\n * Gets either the provided value or the default value, depending on if and what has been provided.\n * @param defaultValue - The default value to fallback when nothing has been provided.\n * @param value - The specific value configured by the user.\n * @returns Value if it is not null and not the CONFIG_NEEDS_UPDATE_KEY, defaultValue otherwise.\n */\nexport function getConfigValue<ValueType>(defaultValue: ValueType, value?: ValueType): ValueType {\n if (value != null && value !== CONFIG_NEEDS_UPDATE_KEY) {\n return value;\n }\n return defaultValue;\n}","import { ConfirmDialogData, ConfirmDialogTypes } from './confirm-dialog-data';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { CONFIG_NEEDS_UPDATE_KEY } from '../../default-global-configuration-values';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\n\n/**\n * The internal ConfirmDialogData. Requires all default values the user can leave out.\n */\nexport class ConfirmDialogDataInternal implements ConfirmDialogData {\n // eslint-disable-next-line jsdoc/require-jsdoc\n text: string[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: ConfirmDialogTypes;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmation: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmationText?: string;\n\n constructor(\n text: string[],\n type: ConfirmDialogTypes,\n confirmButtonLabel: string,\n cancelButtonLabel: string,\n title: string,\n requireConfirmation: boolean,\n confirmationText?: string\n ) {\n this.text = text;\n this.type = type;\n this.confirmButtonLabel = confirmButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.title = title;\n this.requireConfirmation = requireConfirmation;\n this.confirmationText = confirmationText;\n }\n}\n\n/**\n * The Builder for the ConfirmDialogData. Sets default values.\n */\nexport class ConfirmDialogDataBuilder extends BaseBuilder<ConfirmDialogDataInternal, ConfirmDialogData> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: ConfirmDialogData) {\n super(globalConfig, data);\n }\n\n\n protected override generateBaseData(data?: ConfirmDialogData): ConfirmDialogDataInternal {\n return new ConfirmDialogDataInternal(\n getConfigValue(this.globalConfig.defaultConfirmDialogText, data?.text),\n data?.type ?? 'default',\n getConfigValue(this.globalConfig.confirmLabel, data?.confirmButtonLabel),\n getConfigValue(this.globalConfig.cancelLabel, data?.cancelButtonLabel),\n getConfigValue(this.globalConfig.defaultConfirmDialogTitle, data?.title),\n data?.requireConfirmation ?? false,\n data?.confirmationText\n );\n }\n\n\n protected override validateInput(data?: ConfirmDialogData): void {\n if (!data) {\n return;\n }\n if (data.requireConfirmation === true && !data.confirmationText) {\n\n throw new Error('Missing required Input data \"confirmationText\". You can only omit this value when \"requireConfirmation\" is false.');\n }\n if (data.requireConfirmation !== true && data.confirmationText) {\n throw new Error('The \"confirmationText\" will never be shown because \"requireConfirmation\" is not set to true');\n }\n if (data.type === 'info-only' && data.cancelButtonLabel && data.cancelButtonLabel !== CONFIG_NEEDS_UPDATE_KEY) {\n throw new Error('The \"cancelButtonLabel\" will never be shown because \"type\" is set to \"info-only\"');\n }\n }\n}","/* istanbul ignore file */\nimport { InjectionToken, inject } from '@angular/core';\n\nimport { defaultGlobalDefaults } from './default-global-configuration-values';\n\n/**\n * All configurable default values.\n */\nexport interface NgxGlobalDefaultValues {\n /**\n * The label for create buttons.\n * @default 'Create'\n */\n createLabel: string,\n /**\n * The label for edit buttons.\n * @default 'Edit'\n */\n editLabel: string,\n /**\n * The label for save buttons.\n * @default 'Save'\n */\n saveLabel: string,\n /**\n * The label for cancel buttons.\n * @default 'Cancel'\n */\n cancelLabel: string,\n /**\n * The label for add buttons.\n * @default 'Add'\n */\n addLabel: string,\n /**\n * The label for delete buttons.\n * @default 'Delete'\n */\n deleteLabel: string,\n /**\n * The label for back buttons.\n * @default 'Back'\n */\n backLabel: string,\n /**\n * The label for actions.\n * @default 'Actions'\n */\n actionsLabel: string,\n /**\n * The label for searches.\n * @default 'Search'\n */\n searchLabel: string,\n /**\n * The display value for the \"true\" value in dropdowns.\n * @default 'Yes'\n */\n dropdownTrue: string,\n /**\n * The display value for the \"false\" value in dropdowns.\n * @default 'No'\n */\n dropdownFalse: string,\n /**\n * The label for confirm buttons.\n * @default 'Confirm'\n */\n confirmLabel: string,\n /**\n * The title for a confirm dialog.\n * @default 'Confirmation'\n */\n defaultConfirmDialogTitle: string,\n /**\n * The text for a confirm dialog.\n * @default ['Do you really want to do this?']\n */\n defaultConfirmDialogText: string[],\n /**\n * The text for confirming a save action.\n * @default ['Do you really want to save all changes?']\n */\n confirmSaveText: string[],\n /**\n * The text for confirming a delete action.\n * @default ['Do you really want to delete this entity?']\n */\n confirmDeleteText: string[],\n /**\n * The label for the button to leave without changes.\n * @default 'Leave'\n */\n confirmUnsavedChangesLabel: string,\n /**\n * The label for the button to close a dialog without changes.\n * @default 'Close'\n */\n confirmUnsavedChangesDialogLabel: string,\n /**\n * The title for confirming to leave without changes.\n * @default 'Unsaved Changes'\n */\n confirmUnsavedChangesTitle: string,\n /**\n * The text for confirming to leave a page without changes.\n * @default ['You have unsaved changes that will be deleted when you leave this page.', 'Continue?']\n */\n confirmUnsavedChangesText: string[],\n /**\n * The text for confirming to leave a dialog without changes.\n * @default ['You have unsaved changes that will be deleted when you close this dialog.', 'Continue?']\n */\n confirmUnsavedChangesDialogText: string[],\n /**\n * The title for the add array item dialog.\n * @default 'Add to array'\n */\n addArrayItemTitle: string,\n /**\n * The text for confirming a create action.\n * @default ['Do you really want to create this entity?']\n */\n confirmCreateText: string[],\n /**\n * The text for confirming a multi select action.\n * @default selectedEntries => [`Do you really want to run this action on ${selectedEntries.length} entries?`]\n */\n confirmMultiSelectActionText: (selectedEntries: unknown[]) => string[],\n /**\n * The text for confirming a base action.\n * @default ['Do you really want to run this action?']\n */\n confirmBaseActionText: string[],\n /**\n * The text for confirming the json import.\n * @default ['Do you really want to import entities from the provided file?']\n */\n confirmImportJsonText: string[],\n /**\n * How table entities are edited by default.\n * @default 'dialog'\n */\n defaultEditMethod: 'dialog' | 'page',\n /**\n * How table entities are created by default.\n * @default 'dialog'\n */\n defaultCreateMethod: 'dialog' | 'page',\n /**\n * The error message to display when an array property is required and empty.\n * @default 'Needs to contain at least one value'\n */\n emptyArrayErrorMessage: string,\n /**\n * The label for remove actions.\n * @default 'Remove'\n */\n removeLabel: string,\n /**\n * The label for time values.\n * Mainly used inside date properties.\n * @default 'Time'\n */\n timeLabel: string,\n /**\n * The label for the date range start.\n * @default 'Start'\n */\n startLabel: string,\n /**\n * The label for the date range end.\n * @default 'End'\n */\n endLabel: string,\n /**\n * The error text for duplicate entries inside an array.\n * @default ['Adding duplicate entries to the array is not allowed.']\n */\n duplicateErrorText: string[],\n /**\n * The error title for duplicate entries inside an array.\n * @default 'Error adding duplicate item'\n */\n duplicateErrorTitle: string,\n /**\n * The title for editing an entities.\n * @default () => 'Edit'\n */\n editTitle: (entity: unknown) => string,\n /**\n * The label for an select action, eg. Dropdowns.\n * @default 'Select'\n */\n selectLabel: string,\n /**\n * The label for an \"Add all\" button.\n * @default 'Add all'\n */\n addAllLabel: string\n\n}\n\n\n/**\n * The provider for global configuration values.\n */\nexport const NGX_GLOBAL_DEFAULT_VALUES: InjectionToken<Partial<NgxGlobalDefaultValues>> = new InjectionToken<Partial<NgxGlobalDefaultValues>>(\n 'NGX_GLOBAL_DEFAULT_VALUES',\n {\n providedIn: 'root',\n factory: () => {\n return {};\n }\n }\n);\n\n/**\n * The internal values consisting of default ones and values provided by the user in NGX_GLOBAL_DEFAULT_VALUES.\n */\nexport const NGX_COMPLETE_GLOBAL_DEFAULT_VALUES: InjectionToken<NgxGlobalDefaultValues> = new InjectionToken<NgxGlobalDefaultValues>(\n 'NGX_COMPLETE_GLOBAL_DEFAULT_VALUES',\n {\n providedIn: 'root',\n factory: () => {\n const userValues: Partial<NgxGlobalDefaultValues> = inject(NGX_GLOBAL_DEFAULT_VALUES);\n return {\n ...defaultGlobalDefaults,\n ...userValues\n };\n }\n }\n);","import { NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { ConfirmDialogData } from './confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from './confirm-dialog-data.builder';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\n\n/**\n * The Dialog used whenever confirmation by the user is required (e.g. When the user tries to delete an entity).\n *\n * Can be customized with the MAT_DIALOG_DATA \"inputData\". Customization options are defined in \"ConfirmDialogData\".\n */\n@Component({\n selector: 'ngx-mat-entity-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatDialogModule,\n FormsModule,\n MatCheckboxModule,\n MatButtonModule\n ]\n})\nexport class NgxMatEntityConfirmDialogComponent implements OnInit {\n\n /**\n * Whether or not the user needs to tick a checkbox to enable the confirm button.\n */\n confirm: boolean = false;\n\n /**\n * The configuration data of the dialog.\n */\n data!: ConfirmDialogDataInternal;\n\n constructor(\n private readonly dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: ConfirmDialogData,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n ngOnInit(): void {\n this.data = new ConfirmDialogDataBuilder(this.globalConfig, this.inputData).getResult();\n this.dialogRef.disableClose = true;\n }\n\n /**\n * Closes the dialog with true to signal that the action should be run.\n */\n confirmAction(): void {\n this.dialogRef.close(true);\n }\n\n /**\n * Closes the dialog.\n */\n cancel(): void {\n this.dialogRef.close(false);\n }\n}","<!-- eslint-disable angular/cyclomatic-complexity -->\n<h2 *ngIf=\"data.title\" mat-dialog-title>{{data.title}}</h2>\n\n<mat-dialog-content>\n <p *ngFor=\"let paragraph of data.text\">{{paragraph}}</p>\n <div *ngIf=\"data.requireConfirmation\" class=\"checkbox-wrapper\">\n <mat-checkbox name=\"confirm\" [(ngModel)]=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button *ngIf=\"data.type === 'delete'\" type=\"button\" mat-raised-button color=\"warn\" class=\"confirm-button\" [disabled]=\"data.requireConfirmation && !confirm\" (click)=\"confirmAction()\">\n {{data.confirmButtonLabel}}\n </button>\n <button *ngIf=\"data.type !== 'delete'\" type=\"button\" mat-raised-button class=\"confirm-button\" [disabled]=\"data.requireConfirmation && !confirm\" (click)=\"confirmAction()\">\n {{data.confirmButtonLabel}}\n </button>\n <button *ngIf=\"data.type !== 'info-only'\" type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>","import { CanDeactivateFn } from '@angular/router';\n\n/**\n * Interface definition for a page that can work with the UnsavedChangesGuard.\n */\nexport interface UnsavedChangesPage {\n /**\n * Whether the page can be left without confirmation of unsaved changes.\n * @returns Whether or not the page can be left without confirmation.\n */\n canDeactivate: () => boolean,\n /**\n * Opens the confirm dialog for navigating with unsaved changes.\n * @returns The the promise boolean result of the confirm dialog.\n */\n openConfirmNavigationDialog: () => Promise<boolean>\n}\n\n/**\n * A guard that checks if the user has unsaved changes and then prompts a confirmation from him.\n * Is used by the ngx-material-entity edit and create pages.\n * @param component - The component, can be either an edit or create page.\n * @returns An observable containing whether or not the user can continue.\n */\nexport const UnsavedChangesGuard: CanDeactivateFn<UnsavedChangesPage> = async (component: UnsavedChangesPage) => {\n if (component.canDeactivate()) {\n return true;\n }\n return await component.openConfirmNavigationDialog();\n};","import { EnvironmentProviders, Provider, Type } from '@angular/core';\nimport { DefaultExport, Route } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { UnsavedChangesGuard } from '../../services/unsaved-changes.guard';\n\n/**\n * The definition for a route to use with the \"NgxMatEntityCreatePageComponent\".\n */\nexport interface CreateDataRoute extends Route {\n // eslint-disable-next-line jsdoc/require-jsdoc\n loadComponent: () => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>,\n // eslint-disable-next-line jsdoc/require-jsdoc\n providers: (Provider | EnvironmentProviders)[],\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string,\n // eslint-disable-next-line jsdoc/require-jsdoc\n path: string\n}\n\n/**\n * The default data for a create route.\n */\nexport const defaultCreateDataRoute: Omit<CreateDataRoute, 'providers'> = {\n loadComponent: () => import('./create-page.component').then(m => m.NgxMatEntityCreatePageComponent),\n title: 'Create',\n path: 'entities/create',\n canDeactivate: [UnsavedChangesGuard]\n};","import { BaseBuilder } from '../../../classes/base.builder';\nimport { getConfigValue } from '../../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateData } from '../table-data';\n\n/**\n * The internal CreateData. Requires all default values the user can leave out.\n */\nexport class CreateDataInternal implements CreateData {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createRequiresConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmCreateDialogData: ConfirmDialogDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogData;\n\n constructor(\n title: string,\n createButtonLabel: string,\n cancelButtonLabel: string,\n createRequiresConfirmDialog: boolean,\n confirmCreateDialogData: ConfirmDialogDataInternal,\n unsavedChangesRequireConfirmDialog: boolean,\n confirmUnsavedChangesDialogData: ConfirmDialogDataInternal\n ) {\n this.title = title;\n this.createButtonLabel = createButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.createRequiresConfirmDialog = createRequiresConfirmDialog;\n this.confirmCreateDialogData = confirmCreateDialogData;\n this.unsavedChangesRequireConfirmDialog = unsavedChangesRequireConfirmDialog;\n this.confirmUnsavedChangesDialogData = confirmUnsavedChangesDialogData;\n }\n}\n\n/**\n * The Builder for the CreateData. Sets default values.\n */\nexport class CreateDataBuilder extends BaseBuilder<CreateDataInternal, CreateData> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: CreateData) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: CreateData): CreateDataInternal {\n const confirmCreateDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmCreateDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmUnsavedChangesDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n return new CreateDataInternal(\n getConfigValue(this.globalConfig.createLabel, data?.title),\n getConfigValue(this.globalConfig.createLabel, data?.createButtonLabel),\n getConfigValue(this.globalConfig.cancelLabel, data?.cancelButtonLabel),\n data?.createRequiresConfirmDialog ?? false,\n confirmCreateDialogData,\n data?.unsavedChangesRequireConfirmDialog ?? true,\n confirmUnsavedChangesDialogData\n );\n }\n}","import { PageCreateData } from './create-page.component';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateDataBuilder, CreateDataInternal } from '../table/create-dialog/create-data.builder';\nimport { CreateEntityDataInternal } from '../table/create-dialog/create-entity-data.builder';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type PageCreateDataInternal<EntityType extends BaseEntityType<EntityType>> = Omit<CreateEntityDataInternal<EntityType>, 'entity' | 'EntityServiceClass'> & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayLoadingSpinner: boolean,\n // eslint-disable-next-line jsdoc/require-jsdoc\n createData: CreateDataInternal & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogDataInternal,\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean\n }\n};\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport class PageCreateDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<PageCreateDataInternal<EntityType>, PageCreateData<EntityType>> {\n\n constructor(data: PageCreateData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: PageCreateData<EntityType>): PageCreateDataInternal<EntityType> {\n const createData: CreateDataInternal = new CreateDataBuilder(this.globalConfig, data.createData)\n .withDefault('cancelButtonLabel', this.globalConfig.backLabel)\n .getResult();\n\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data.createData?.confirmUnsavedChangesDialogData)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesLabel)\n .getResult();\n\n return {\n createData: {\n ...createData,\n confirmUnsavedChangesDialogData: confirmUnsavedChangesDialogData,\n unsavedChangesRequireConfirmDialog: data.createData?.unsavedChangesRequireConfirmDialog ?? true\n },\n displayLoadingSpinner: data.displayLoadingSpinner ?? true\n };\n }\n}","import { InjectionToken, inject } from '@angular/core';\n\nimport { ValidationError } from '../utilities/validation.utilities';\n\n/**\n * Provider for the validation errors tooltip title.\n */\nexport const NgxValidationErrorsTooltipTitle: InjectionToken<string> = new InjectionToken(\n 'Provider for the validation errors tooltip title.',\n {\n providedIn: 'root',\n factory: () => 'Validation Errors:'\n }\n);\n\n/**\n * The default function that gets the validation errors tooltip content.\n * @param validationErrors - All validation errors for which the tooltip content should be generated.\n * @returns A html string, containing a list of the name of each invalid property.\n */\nexport function getValidationErrorsTooltipContent(validationErrors: ValidationError[]): string {\n const title: string = inject(NgxValidationErrorsTooltipTitle);\n let res: string = `${title}\\n<br>\\n<ul style=\"margin-bottom: 0px; padding-left: 16px;\">`;\n for (const error of validationErrors) {\n res = res.concat(`\\n\\t<li>${error.property}</li>`);\n }\n res = res.concat('\\n</ul>');\n return res;\n}","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentInjector } from '@angular/core';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\n\nimport { BaseEntityType } from '../classes/entity.model';\nimport { DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { EntityUtilities } from '../utilities/entity.utilities';\nimport { FileUtilities } from '../utilities/file.utilities';\n\n/**\n * A generic EntityService class.\n * Offers basic CRUD-functionality.\n * You should create a service for every Entity you have.\n * If you extend from this you need to make sure that the extended Service can be injected.\n */\nexport abstract class EntityService<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The base url used for api requests. If u want to have more control over this,\n * you can override the create, read, update and delete methods.\n *\n * Create Sends a POST-Request to baseUrl.\n *\n * Read Sends a GET-Request to baseUrl.\n *\n * Update Sends a PATCH-Request to baseUrl/{id}.\n *\n * Delete Sends a DEL-Request to baseUrl/{id}.\n */\n abstract readonly baseUrl: string;\n\n /**\n * The default route segment that comes before the id when editing an entity in a separate page, if no extra route has been provided.\n */\n readonly editBaseRoute: string = 'entities';\n\n /**\n * The complete route that is used to create an entity in a separate page, if no extra route has been provided.\n */\n readonly createBaseRoute: string = 'entities/create';\n\n /**\n * The key which holds the id value.\n * @default 'id'\n */\n readonly idKey: keyof EntityType = 'id' as keyof EntityType;\n\n /**\n * A subject of all the entity values.\n * Can be subscribed to when you want to do a specific thing whenever the entities change.\n */\n readonly entitiesSubject: BehaviorSubject<EntityType[]> = new BehaviorSubject<EntityType[]>([]);\n\n\n /**\n * When frequently trying to find a single entity by an id (eg. When nesting relations)\n * you might send a lot of unnecessary requests.\n * Therefore the findById method tries to look in the already existing entities first,\n * IF the entities have been requested in the last READ_EXPIRATION_IN_MS milliseconds.\n * @default 900000 (5 minutes)\n */\n protected readonly READ_EXPIRATION_IN_MS: number = 900000;\n\n /**\n * Gets the entities in an array from the internal entitiesSubject.\n * @returns The current entities in form of an array.\n */\n get entities(): EntityType[] {\n return this.entitiesSubject.value;\n }\n\n /**\n * The last time that the entities have been requested from the api.\n */\n lastRead?: Date;\n\n constructor(protected readonly http: HttpClient, protected readonly injector: EnvironmentInjector) {}\n\n /**\n * Creates a new Entity and pushes it to the entities array.\n * @param entity - The data of the entity to create.\n * All values that should be omitted will be removed from it inside this method.\n * @param baseUrl - The base url to send the post request to.\n * This can be used if you want to create an entity belonging to another, like \"customers/{id}/invoices\".\n * @returns A Promise of the created entity.\n */\n async create(entity: EntityType, baseUrl: string = this.baseUrl): Promise<EntityType> {\n const body: Partial<EntityType> = EntityUtilities.getWithoutOmitCreateValues(entity);\n const filePropertyKeys: (keyof EntityType)[] = EntityUtilities.getFileProperties(entity);\n if (!filePropertyKeys.length) {\n return await this.createWithJson(body, baseUrl);\n }\n else {\n return await this.createWithFormData(body, filePropertyKeys, entity, baseUrl);\n }\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Imports everything from the provided json file.\n * @param file - The json file to import from.\n * @returns All entities that have been imported.\n */\n async import(file: File): Promise<EntityType[]> {\n const formData: FormData = new FormData();\n formData.append('import', file);\n const result: EntityType[] = await firstValueFrom(this.http.post<EntityType[]>(`${this.baseUrl}/import`, formData));\n this.entities.push(...result);\n this.entitiesSubject.next(this.entities);\n return result;\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Creates the entity with form data when the entity contains files in contrast to creating it with a normal json body.\n * All file values are stored inside their respective property key and their name.\n * Form data is able to handle setting multiple files to the same key.\n * @param body - The body Of the request.\n * @param filePropertyKeys - All property keys that are files and need to be added to the form data.\n * @param entity - The entity to create. This is needed in addition to the body because the body doesn't contain any metadata.\n * @param baseUrl - The base url to send the post request to.\n * This can be used if you want to create an entity belonging to another, like \"customers/{id}/invoices\".\n * @returns The created entity from the server.\n */\n protected async createWithFormData(\n body: Partial<EntityType>,\n filePropertyKeys: (keyof EntityType)[],\n entity: EntityType,\n baseUrl: string = this.baseUrl\n ): Promise<EntityType> {\n const formData: FormData = new FormData();\n formData.append('body', JSON.stringify(LodashUtilities.omit(body, filePropertyKeys)));\n for (const key of filePropertyKeys) {\n if ((EntityUtilities.getPropertyMetadata(entity, key, DecoratorTypes.FILE_DEFAULT) as DefaultFileDecoratorConfigInternal).multiple) {\n const fileDataValues: FileData[] = body[key] as FileData[];\n for (const value of fileDataValues) {\n formData.append(key as string, (await FileUtilities.getFileData(value, this.http)).file, value.name);\n }\n }\n else {\n const fileData: FileData = body[key] as FileData;\n formData.append(key as string, (await FileUtilities.getFileData(fileData, this.http)).file, fileData.name);\n }\n }\n const e: EntityType | undefined = await firstValueFrom(this.http.post<EntityType | undefined>(baseUrl, formData));\n if (!e) {\n throw new Error(`\n The created entity was not returned in the response.\n If you want to provide a logic that allows that\n you need to override the create methods of this class.\n `);\n }\n this.entities.push(e);\n this.entitiesSubject.next(this.entities);\n return e;\n }\n\n /**\n * Creates the entity with a normal json body in contrast to creating it with form data when the entity contains files.\n * @param body - The body Of the request.\n * @param baseUrl - The base url to send the post request to.\n * This can be used if you want to create an entity belonging to another, like \"customers/{id}/invoices\".\n * @returns The created entity from the server.\n */\n protected async createWithJson(body: Partial<EntityType>, baseUrl: string = this.baseUrl): Promise<EntityType> {\n const e: EntityType | undefined = await firstValueFrom(this.http.post<EntityType | undefined>(baseUrl, body));\n if (!e) {\n throw new Error(`\n The created entity was not returned in the response.\n If you want to provide a logic that allows that\n you need to override the create methods of this class.\n `);\n }\n this.entities.push(e);\n this.entitiesSubject.next(this.entities);\n return e;\n }\n\n /**\n * Gets all existing entities and pushes them to the entities array.\n * @param baseUrl - The base url for the request. Defaults to the baseUrl on the service.\n * @returns A Promise of all received Entities.\n */\n async read(baseUrl = this.baseUrl): Promise<EntityType[]> {\n const e: EntityType[] = await firstValueFrom(this.http.get<EntityType[]>(baseUrl));\n this.entitiesSubject.next(e);\n this.lastRead = new Date();\n return e;\n }\n\n /**\n * Tries to find an entity with the given id.\n * @param id - The id of the entity to find.\n * @returns The found entity.\n */\n async findById(id: EntityType[keyof EntityType]): Promise<EntityType> {\n if (\n this.lastRead == null\n || (new Date().getTime() - this.lastRead.getTime()) > this.READ_EXPIRATION_IN_MS\n ) {\n return firstValueFrom(this.http.get<EntityType>(`${this.baseUrl}/${id}`));\n }\n return this.entities.find(e => e[this.idKey] === id) ?? firstValueFrom(this.http.get<EntityType>(`${this.baseUrl}/${id}`));\n }\n\n /**\n * Updates a specific Entity.\n * @param entity - The updated Entity\n * All values that should be omitted will be removed from it inside this method.\n * @param entityPriorChanges - The current Entity.\n * It Is used to get changed values and only update them instead of sending the whole entity data.\n */\n async update(entity: EntityType, entityPriorChanges: EntityType): Promise<void> {\n const filePropertyKeys: (keyof EntityType)[] = EntityUtilities.getFileProperties(entityPriorChanges);\n const body: Partial<EntityType> = await this.entityToUpdateRequestBody(entity, entityPriorChanges);\n if (!filePropertyKeys.length) {\n await this.updateWithJson(body, entityPriorChanges[this.idKey]);\n }\n else {\n await this.updateWithFormData(body, filePropertyKeys, entity, entityPriorChanges[this.idKey]);\n }\n }\n\n /**\n * Builds the update request body from the given entity before and after its changes.\n * @param entity - The entity with changed values.\n * @param entityPriorChanges - The entity before any changes.\n * @returns A partial of only the changed values.\n */\n protected async entityToUpdateRequestBody(entity: EntityType, entityPriorChanges: EntityType): Promise<Partial<EntityType>> {\n return await EntityUtilities.getWithoutOmitUpdateValues(entity, entityPriorChanges, this.http, this.injector);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Updates the entity with form data when the entity contains files in contrast to creating it with a normal json body.\n * All file values are stored inside their respective property key and their name.\n * Form data is able to handle setting multiple files to the same key.\n * @param body - The request body. Already contains only properties that have changed.\n * @param filePropertyKeys - The keys of all properties which are files and need to separately be appended to the form data.\n * @param entity - The original entity. Is needed to get the metadata of all the files.\n * @param id - The id of the entity to update.\n */\n protected async updateWithFormData(\n body: Partial<EntityType>,\n filePropertyKeys: (keyof EntityType)[],\n entity: EntityType,\n id: EntityType[keyof EntityType]\n ): Promise<void> {\n const formData: FormData = new FormData();\n formData.append('body', JSON.stringify(LodashUtilities.omit(body, filePropertyKeys)));\n for (const key of filePropertyKeys) {\n\n if ((EntityUtilities.getPropertyMetadata(entity, key, DecoratorTypes.FILE_DEFAULT) as DefaultFileDecoratorConfigInternal).multiple) {\n const fileDataValues: FileData[] = body[key] as FileData[];\n for (const value of fileDataValues) {\n formData.append(key as string, (await FileUtilities.getFileData(value, this.http)).file, value.name);\n }\n }\n else {\n const fileData: FileData = body[key] as FileData;\n formData.append(key as string, (await FileUtilities.getFileData(fileData, this.http)).file, fileData.name);\n }\n }\n const updatedEntity: EntityType | undefined = await firstValueFrom(\n this.http.patch<EntityType | undefined>(`${this.baseUrl}/${id}`, formData)\n );\n if (!updatedEntity) {\n // eslint-disable-next-line no-console\n console.warn('The updated entity was not returned in the response. Applying the changes from the request body.');\n for (const key in body) {\n this.entities[this.entities.findIndex(e => e[this.idKey] === id)][key]\n = body[key] as EntityType[Extract<keyof EntityType, string>];\n }\n this.entitiesSubject.next(this.entities);\n return;\n }\n this.entities[this.entities.findIndex(e => e[this.idKey] === id)] = updatedEntity;\n this.entitiesSubject.next(this.entities);\n }\n\n /**\n * Updates the entity with a normal json body in contrast to updating it with form data when the entity contains files.\n * @param body - The body of the Request. Has already removed all unnecessary values.\n * @param id - The id of the entity to update.\n */\n protected async updateWithJson(body: Partial<EntityType>, id: EntityType[keyof EntityType]): Promise<void> {\n const updatedEntity: EntityType | undefined = await firstValueFrom(\n this.http.patch<EntityType | undefined>(`${this.baseUrl}/${id}`, body)\n );\n if (!updatedEntity) {\n // eslint-disable-next-line no-console\n console.warn('The updated entity was not returned in the response. Applying the changes from the request body.');\n const foundEntity: EntityType = this.entities[this.entities.findIndex(e => e[this.idKey] === id)];\n for (const key in body) {\n foundEntity[key]\n = body[key] as EntityType[Extract<keyof EntityType, string>];\n }\n this.entitiesSubject.next(this.entities);\n return;\n }\n this.entities[this.entities.findIndex(e => e[this.idKey] === id)] = updatedEntity;\n this.entitiesSubject.next(this.entities);\n }\n\n /**\n * Deletes a specific Entity.\n * @param entity - The entity to delete.\n */\n async delete(entity: EntityType): Promise<void> {\n await firstValueFrom(this.http.delete<void>(`${this.baseUrl}/${entity[this.idKey]}`));\n // the == comparison instead of === is to catch ids that are numbers.\n this.entities.splice(this.entities.findIndex(e => e[this.idKey] === entity[this.idKey]), 1);\n this.entitiesSubject.next(this.entities);\n }\n}","import { Time } from '@angular/common';\nimport { EnvironmentInjector } from '@angular/core';\n\nimport { DateUtilities } from './date.utilities';\nimport { EntityUtilities } from './entity.utilities';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from '../classes/entity.model';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { ToggleBooleanDecoratorConfigInternal } from '../decorators/boolean/boolean-decorator-internal.data';\nimport { CustomDecoratorConfigInternal } from '../decorators/custom/custom-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from '../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../decorators/date/date-decorator.data';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { DefaultNumberDecoratorConfigInternal } from '../decorators/number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../decorators/object/object-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../decorators/string/string-decorator-internal.data';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../encapsulation/reflect.utilities';\n\n/**\n * A validation error reported by the validation utilities.\n * Consists of the property name where the error originated from and a message.\n */\nexport interface ValidationError {\n /**\n * The property name on which the error occurred. This is the displayName value.\n */\n property: string,\n /**\n * The validation error message.\n */\n message: string\n}\n\n/**\n * Contains HelperMethods around handling Validation of entities and properties.\n */\nexport abstract class ValidationUtilities {\n /**\n * Checks if the values on an entity are valid.\n * Also checks all the validators given by the metadata (\"required\", \"maxLength\" etc.).\n * @param entity - The entity to validate.\n * @param injector - An angular environment injector.\n * @param omit - Whether to check for creating or editing validity.\n * @returns Whether or not the entity is valid.\n */\n static async isEntityValid<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n omit?: 'create' | 'update'\n ): Promise<boolean> {\n return (await this.getEntityValidationErrors(entity, injector, omit)).length === 0;\n }\n\n /**\n * Gets all validation errors on the given entity.\n * @param entity - The entity to validate.\n * @param injector - An angular environment injector.\n * @param omit - What keys not to check. An empty value means no keys are omitted.\n * @returns An array of validation errors on the provided entity.\n */\n static async getEntityValidationErrors<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n omit?: 'create' | 'update'\n ): Promise<ValidationError[]> {\n const res: ValidationError[] = [];\n for (const key of EntityUtilities.keysOf(entity, injector)) {\n const err: ValidationError | undefined = await this.getPropertyValidationError(entity, key, omit);\n if (err) {\n res.push(err);\n }\n }\n return res;\n }\n\n // /**\n // * Checks if a single property value is valid.\n // *\n // * @param entity - The entity where the property is from.\n // * @param key - The name of the property.\n // * @param omit - Whether to check if the given entity is valid for creation or updating.\n // * @returns Whether or not the property value is valid.\n // * @throws Throws when it extracts an unknown metadata type.\n // */\n // static isPropertyValid<EntityType extends BaseEntityType<EntityType>>(\n // entity: EntityType,\n // key: keyof EntityType,\n // omit?: 'create' | 'update'\n // ): boolean {\n // return this.getPropertyValidationError(entity, key, omit) == null;\n // }\n\n /**\n * Validates the property on the given entity with the given key.\n * @param entity - The entity on which the property to check is.\n * @param key - The key of the property to validate.\n * @param omit - What keys not to check. An empty value means no keys are omitted.\n * @returns A validation error when the property is not valid, undefined otherwise.\n * @throws When the type of the property is not known.\n */\n static async getPropertyValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n key: keyof EntityType,\n omit?: 'create' | 'update'\n ): Promise<ValidationError | undefined> {\n const type: DecoratorTypes | undefined = EntityUtilities.getPropertyType(entity, key);\n if (type == null) {\n return undefined;\n }\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(entity, key, type);\n\n // istanbul ignore next\n if (metadata == null) {\n return undefined;\n }\n\n if (metadata.omitForCreate && omit === 'create') {\n return undefined;\n }\n if (metadata.omitForUpdate && omit === 'update') {\n return undefined;\n }\n if (metadata.required(entity) && type !== DecoratorTypes.HAS_MANY) {\n if (entity[key] == null || entity[key] === '') {\n return {\n property: metadata.displayName,\n message: 'required'\n };\n }\n }\n if (!metadata.required(entity)) {\n if (entity[key] == null || entity[key] === '') {\n return undefined;\n }\n }\n switch (type) {\n case DecoratorTypes.BOOLEAN_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.BOOLEAN_CHECKBOX:\n case DecoratorTypes.BOOLEAN_TOGGLE:\n const entityBoolean: boolean = entity[key] as boolean;\n const booleanMetadata: ToggleBooleanDecoratorConfigInternal = metadata as ToggleBooleanDecoratorConfigInternal;\n return this.getBooleanValidationError(entity, entityBoolean, booleanMetadata);\n case DecoratorTypes.STRING_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.STRING:\n const entityString: string = entity[key] as string;\n const stringMetadata: DefaultStringDecoratorConfigInternal = metadata as DefaultStringDecoratorConfigInternal;\n return this.getStringValidationError(entityString, stringMetadata);\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n const entityAutocompleteString: string = entity[key] as string;\n const stringAutocompleteMetadata: AutocompleteStringDecoratorConfigInternal = metadata as AutocompleteStringDecoratorConfigInternal;\n return this.getAutocompleteStringValidationError(entity, entityAutocompleteString, stringAutocompleteMetadata);\n case DecoratorTypes.STRING_TEXTBOX:\n const entityTextbox: string = entity[key] as string;\n const textboxMetadata: TextboxStringDecoratorConfigInternal = metadata as TextboxStringDecoratorConfigInternal;\n return this.getTextboxValidationError(entityTextbox, textboxMetadata);\n case DecoratorTypes.STRING_PASSWORD:\n const entityPassword: string = entity[key] as string;\n const passwordMetadata: PasswordStringDecoratorConfigInternal = metadata as PasswordStringDecoratorConfigInternal;\n const confirmPassword: string = ReflectUtilities.getMetadata(EntityUtilities.CONFIRM_PASSWORD_KEY, entity, key) as string;\n return this.getPasswordValidationError(entityPassword, passwordMetadata, confirmPassword);\n case DecoratorTypes.NUMBER_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.NUMBER:\n case DecoratorTypes.NUMBER_SLIDER:\n const entityNumber: number = entity[key] as number;\n const numberMetadata: DefaultNumberDecoratorConfigInternal = metadata as DefaultNumberDecoratorConfigInternal;\n return this.getNumberValidationError(entityNumber, numberMetadata);\n case DecoratorTypes.OBJECT:\n const entityObject: EntityType = entity[key] as EntityType;\n for (const parameterKey in entityObject) {\n const value: unknown = entityObject[parameterKey];\n if (\n !(metadata as DefaultObjectDecoratorConfigInternal<EntityType>).omit.includes(parameterKey)\n && !(!metadata.required(entity) && (value == null || value == ''))\n ) {\n const err: ValidationError | undefined = await this.getPropertyValidationError(entityObject, parameterKey, omit);\n if (err) {\n return {\n property: metadata.displayName,\n message: `${err.property} is invalid: ${err.message}`\n };\n }\n }\n }\n break;\n case DecoratorTypes.OBJECT_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS:\n const stringAutocompleteArray: string[] = entity[key] as string[];\n const stringAutocompleteArrayMetadata: AutocompleteStringChipsArrayDecoratorConfigInternal = metadata as AutocompleteStringChipsArrayDecoratorConfigInternal;\n return await this.getArrayStringAutocompleteChipsValidationError(entity, stringAutocompleteArrayMetadata, stringAutocompleteArray);\n case DecoratorTypes.ARRAY_STRING_CHIPS:\n case DecoratorTypes.ARRAY_DATE:\n case DecoratorTypes.ARRAY_DATE_TIME:\n case DecoratorTypes.ARRAY_DATE_RANGE:\n case DecoratorTypes.ARRAY:\n const entityArray: unknown[] = entity[key] as unknown[];\n const arrayMetadata: EntityArrayDecoratorConfigInternal<EntityType> = metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (arrayMetadata.required(entity) && !entityArray.length) {\n return {\n property: metadata.displayName,\n message: 'no items in array'\n };\n }\n break;\n case DecoratorTypes.DATE:\n const entityDate: Date = new Date(entity[key] as Date);\n const dateMetadata: DefaultDateDecoratorConfigInternal = metadata as DefaultDateDecoratorConfigInternal;\n return this.getDateValidationError(entityDate, dateMetadata);\n case DecoratorTypes.DATE_RANGE:\n const entityDateRange: DateRange = LodashUtilities.cloneDeep(entity[key] as DateRange);\n const dateRangeMetadata: DateRangeDateDecoratorConfigInternal = metadata as DateRangeDateDecoratorConfigInternal;\n return this.getDateRangeValidationError(entity, entityDateRange, dateRangeMetadata);\n case DecoratorTypes.DATE_TIME:\n const entityDateTime: Date = new Date(entity[key] as Date);\n const dateTimeMetadata: DateTimeDateDecoratorConfigInternal = metadata as DateTimeDateDecoratorConfigInternal;\n const hasTime: boolean = ReflectUtilities.hasMetadata(EntityUtilities.TIME_KEY, entity, key);\n return this.getDateTimeValidationError(entityDateTime, dateTimeMetadata, hasTime);\n case DecoratorTypes.FILE_DEFAULT:\n case DecoratorTypes.FILE_IMAGE:\n const entityFile: FileData | FileData[] = entity[key] as FileData | FileData[];\n const entityFileMetadata: DefaultFileDecoratorConfigInternal = metadata as DefaultFileDecoratorConfigInternal;\n return this.getFileDataValidationError(entityFile, entityFileMetadata);\n case DecoratorTypes.REFERENCES_MANY:\n case DecoratorTypes.REFERENCES_ONE:\n case DecoratorTypes.HAS_MANY:\n break;\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line typescript/no-explicit-any\n const customMetadata: CustomDecoratorConfigInternal<EntityType, any, any, any> = metadata as CustomDecoratorConfigInternal<EntityType, any, any, any>;\n if (!customMetadata.isValid(entity[key], omit)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n break;\n default:\n throw new Error(`Could not validate the input because the DecoratorType ${type} is not known`);\n }\n return undefined;\n }\n\n private static async getArrayStringAutocompleteChipsValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n metadata: AutocompleteStringChipsArrayDecoratorConfigInternal,\n stringAutocompleteArray: string[]\n ): Promise<ValidationError | undefined> {\n if (metadata.required(entity) && !stringAutocompleteArray.length) {\n return {\n property: metadata.displayName,\n message: 'no items in array'\n };\n }\n if (metadata.restrictToOptions == true) {\n const autocompleteValues: string[] = await metadata.autocompleteValues(entity);\n for (const value of stringAutocompleteArray) {\n if (!autocompleteValues.includes(value)) {\n return {\n property: metadata.displayName,\n message: `The value \"${value}\" needs to be one of the provided values`\n };\n }\n }\n }\n return undefined;\n }\n\n private static getBooleanValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n value: boolean,\n metadata: ToggleBooleanDecoratorConfigInternal\n ): ValidationError | undefined {\n if (metadata.required(entity) && !value) {\n return {\n property: metadata.displayName,\n message: 'not selected'\n };\n }\n return undefined;\n }\n\n private static getStringValidationError(value: string, metadata: DefaultStringDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n return undefined;\n }\n\n private static async getAutocompleteStringValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n value: string,\n metadata: AutocompleteStringDecoratorConfigInternal\n ): Promise<ValidationError | undefined> {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n if (metadata.restrictToOptions == true && !(await metadata.autocompleteValues(entity)).includes(value)) {\n return {\n property: metadata.displayName,\n message: 'Needs to be one of the provided values'\n };\n }\n return undefined;\n }\n\n private static getTextboxValidationError(value: string, metadata: TextboxStringDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n return undefined;\n }\n\n private static getPasswordValidationError(\n value: string,\n metadata: PasswordStringDecoratorConfigInternal,\n confirmPassword: string\n ): ValidationError | undefined {\n if (value !== confirmPassword) {\n return {\n property: metadata.displayName,\n message: 'passwords need to match'\n };\n }\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n return undefined;\n }\n\n private static getNumberValidationError(value: number, metadata: DefaultNumberDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.max && value > metadata.max) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.max}`\n };\n }\n if (metadata.min && value < metadata.min) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.min}`\n };\n }\n return undefined;\n }\n\n private static getDateValidationError(value: Date, metadata: DefaultDateDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.min && value.getTime() < metadata.min(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `needs to be after ${formatDate(metadata.min(value))}`\n };\n }\n if (metadata.max && value.getTime() > metadata.max(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `needs to be before ${formatDate(metadata.max(value))}`\n };\n }\n if (metadata.filter && !metadata.filter(value)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n return undefined;\n }\n\n private static getDateRangeValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n value: Partial<DateRange>,\n metadata: DateRangeDateDecoratorConfigInternal\n ): ValidationError | undefined {\n if (metadata.required(entity)) {\n if (value.start == null || value.end == null || value.values == null) {\n return {\n property: metadata.displayName,\n message: 'required'\n };\n }\n }\n if (value.start) {\n value.start = new Date(value.start);\n if (metadata.minStart && value.start.getTime() < metadata.minStart(value.start).getTime()) {\n return {\n property: metadata.displayName,\n message: `start date needs to be after ${formatDate(metadata.minStart(value.start))}`\n };\n }\n if (metadata.maxStart && value.start.getTime() > metadata.maxStart(value.start).getTime()) {\n return {\n property: metadata.displayName,\n message: `start date needs to be before ${formatDate(metadata.maxStart(value.start))}`\n };\n }\n if (metadata.filter) {\n if (!metadata.filter(value.start)) {\n return {\n property: metadata.displayName,\n message: 'start date invalid'\n };\n }\n }\n }\n\n if (value.end) {\n value.end = new Date(value.end);\n if (metadata.minEnd && value.end.getTime() < metadata.minEnd(value.end).getTime()) {\n return {\n property: metadata.displayName,\n message: `end date needs to be after ${formatDate(metadata.minEnd(value.end))}`\n };\n }\n if (metadata.maxEnd && value.end.getTime() > metadata.maxEnd(value.end).getTime()) {\n return {\n property: metadata.displayName,\n message: `end date needs to be before ${formatDate(metadata.maxEnd(value.end))}`\n };\n }\n if (metadata.filter) {\n if (!metadata.filter(value.end)) {\n return {\n property: metadata.displayName,\n message: 'end date invalid'\n };\n }\n }\n }\n\n\n if (metadata.filter && value.values) {\n for (const date of value.values) {\n if (!metadata.filter(date)) {\n return {\n property: metadata.displayName,\n message: `value ${formatDate(date)} invalid`\n };\n }\n }\n }\n return undefined;\n }\n\n private static getDateTimeValidationError(\n value: Date,\n metadata: DateTimeDateDecoratorConfigInternal,\n hasTime: boolean\n ): ValidationError | undefined {\n if (!hasTime) {\n return {\n property: metadata.displayName,\n message: 'no time'\n };\n }\n if (metadata.minDate && value.getTime() < metadata.minDate(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `date needs to be after ${formatDate(metadata.minDate(value))}`\n };\n }\n if (metadata.maxDate && value.getTime() > metadata.maxDate(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `date needs to be before ${formatDate(metadata.maxDate(value))}`\n };\n }\n if (metadata.filterDate && !metadata.filterDate(value)) {\n return {\n property: metadata.displayName,\n message: 'invalid date'\n };\n }\n const time: Time = DateUtilities.getTimeFromDate(value) as Time;\n if (metadata.minTime) {\n const minTime: Time = metadata.minTime(value);\n if (\n !(\n time.hours > minTime.hours\n || (\n time.hours === minTime.hours\n && time.minutes >= minTime.minutes\n )\n )\n ) {\n return {\n property: metadata.displayName,\n message: `time needs to be after ${minTime.hours}:${minTime.minutes}`\n };\n }\n }\n if (metadata.maxTime) {\n const maxTime: Time = metadata.maxTime(value);\n if (\n !(\n time.hours < maxTime.hours\n || (\n time.hours === maxTime.hours\n && time.minutes <= maxTime.minutes\n )\n )\n ) {\n return {\n property: metadata.displayName,\n message: `time needs to be before ${maxTime.hours}:${maxTime.minutes}`\n };\n }\n }\n if (metadata.filterTime && !metadata.filterTime(time)) {\n return {\n property: metadata.displayName,\n message: 'invalid time'\n };\n }\n return undefined;\n }\n\n private static getFileDataValidationError(\n value: FileData | FileData[],\n metadata: DefaultFileDecoratorConfigInternal\n ): ValidationError | undefined {\n const files: FileData[] = metadata.multiple ? value as FileData[] : [value as FileData];\n let fileSizeTotal: number = 0;\n for (const file of files) {\n if (!file.name || !file.file && !file.url) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n if (!FileUtilities.isMimeTypeValid(file.type, metadata.allowedMimeTypes)) {\n return {\n property: metadata.displayName,\n message: `mimetype needs to be one of ${metadata.allowedMimeTypes}`\n };\n }\n if (FileUtilities.transformToMegaBytes(file.size, 'B') > metadata.maxSize) {\n return {\n property: metadata.displayName,\n message: `file needs to be smaller than ${metadata.maxSize} MB`\n };\n }\n fileSizeTotal += file.size;\n if (FileUtilities.transformToMegaBytes(fileSizeTotal, 'B') > metadata.maxSizeTotal) {\n return {\n property: metadata.displayName,\n message: `The size of all files combined needs to be smaller than ${metadata.maxSizeTotal}`\n };\n }\n }\n return undefined;\n }\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction padTo2Digits(num: number): string {\n return num.toString().padStart(2, '0');\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction formatDate(date: Date): string {\n return [\n padTo2Digits(date.getDate()),\n padTo2Digits(date.getMonth() + 1),\n date.getFullYear()\n ].join('/');\n}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { ArrayDecoratorConfig, AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EditArrayItemDialogData, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder } from '../../components/confirm-dialog/confirm-dialog-data.builder';\nimport { CreateData, DisplayColumn } from '../../components/table/table-data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { DateUtilities } from '../../utilities/date.utilities';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DateRange } from '../date/date-decorator.data';\nimport { StringAutocompleteValues } from '../string/string-decorator.data';\n\n/**\n * The internal dialog data for the entities array edit dialog.\n * Sets default values.\n */\nexport class EditArrayItemDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditArrayItemDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: (entity: EntityType) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: EditArrayItemDialogData<EntityType>) {\n this.title = getConfigValue(globalConfig.editTitle, data?.title);\n this.confirmButtonLabel = getConfigValue(globalConfig.saveLabel, data?.confirmButtonLabel);\n this.cancelButtonLabel = getConfigValue(globalConfig.cancelLabel, data?.cancelButtonLabel);\n }\n}\n\n/**\n * The internal EntityArrayDecoratorConfig. Sets default values.\n */\nexport class EntityArrayDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType[]> implements EntityArrayDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.OBJECT;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData?: CreateData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editDialogData: EditArrayItemDialogDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createInline: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n\n constructor(data: EntityArrayDecoratorConfig<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.createInline = data.createInline ?? true;\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.EntityClass = data.EntityClass;\n this.displayColumns = data.displayColumns;\n this.createInline = data.createInline ?? true;\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.editDialogData = new EditArrayItemDialogDataInternal(globalConfig, data.editDialogData);\n }\n}\n\n/**\n * The internal DateArrayDecoratorConfig. Sets default values.\n */\nexport class DateArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date[]> implements DateArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<Date>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date | null | undefined>;\n\n constructor(data: DateArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.min = data.min;\n this.max = data.max;\n this.filter = data.filter;\n }\n}\n\n/**\n * The internal DateTimeArrayDecoratorConfig. Sets default values.\n */\nexport class DateTimeArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date[]> implements DateTimeArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_TIME;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<Date>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n times: DropdownValue<Time>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n timeDisplayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterDate?: DateFilterFn<Date | null | undefined>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterTime?: ((time: Time) => boolean) | (() => boolean);\n\n constructor(data: DateTimeArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = getConfigValue(globalConfig.timeLabel, data.timeDisplayName);\n this.minDate = data.minDate;\n this.maxDate = data.maxDate;\n this.filterDate = data.filterDate;\n this.minTime = data.minTime;\n this.maxTime = data.maxTime;\n this.filterTime = data.filterTime;\n }\n}\n\n/**\n * The internal DateRangeArrayDecoratorConfig. Sets default values.\n */\nexport class DateRangeArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<DateRange[]>\n implements DateRangeArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_RANGE;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<DateRange>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderStart: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderEnd: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date>;\n\n constructor(data: DateRangeArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.placeholderStart = getConfigValue(globalConfig.startLabel, data.placeholderStart);\n this.placeholderEnd = getConfigValue(globalConfig.endLabel, data.placeholderEnd);\n this.minStart = data.minStart;\n this.maxStart = data.maxStart;\n this.minEnd = data.minEnd;\n this.maxEnd = data.maxEnd;\n this.filter = data.filter;\n }\n}\n\n/**\n * The internal StringChipsArrayDecoratorConfig. Sets default values.\n */\nexport class StringChipsArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string[]>\n implements StringChipsArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n\n constructor(data: StringChipsArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.maxLength = data.maxLength;\n this.minLength = data.minLength;\n this.regex = data.regex;\n this.defaultWidths = data.defaultWidths ?? [6, 12, 12];\n }\n}\n\n/**\n * The internal AutocompleteStringChipsArrayDecoratorConfig. Sets default values.\n */\nexport class AutocompleteStringChipsArrayDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal<string[]> implements AutocompleteStringChipsArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n autocompleteValues: (entity: any) => Promise<string[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING_AUTOCOMPLETE;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n // eslint-disable-next-line jsdoc/require-jsdoc\n restrictToOptions?: boolean;\n\n constructor(data: AutocompleteStringChipsArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.autocompleteValues = this.autocompleteValuesToFunction(data.autocompleteValues);\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.maxLength = data.maxLength;\n this.minLength = data.minLength;\n this.regex = data.regex;\n this.restrictToOptions = data.restrictToOptions;\n this.defaultWidths = data.defaultWidths ?? [6, 12, 12];\n }\n\n // eslint-disable-next-line typescript/no-explicit-any\n private autocompleteValuesToFunction(autocompleteValues: StringAutocompleteValues): (entity: any) => Promise<string[]> {\n if (Array.isArray(autocompleteValues)) {\n return async () => autocompleteValues;\n }\n // eslint-disable-next-line typescript/no-explicit-any\n return async (e: any) => await autocompleteValues(e);\n }\n}\n\n/**\n * Gets the default dialog data for the error dialog to display when the user tries to add a duplicate value.\n * @param data - The Array Decorator data.\n * @param globalConfig - The global configuration of default values.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultDuplicateErrorDialogData(\n data: ArrayDecoratorConfig<unknown[]>,\n globalConfig: NgxGlobalDefaultValues\n): ConfirmDialogData {\n return new ConfirmDialogDataBuilder(globalConfig, data.duplicatesErrorDialog)\n .withDefault('type', 'info-only')\n .withDefault('text', globalConfig.duplicateErrorText)\n .withDefault('title', globalConfig.duplicateErrorTitle)\n .getResult();\n}","import { SelectionModel } from '@angular/cdk/collections';\nimport { MatTableDataSource } from '@angular/material/table';\n\n/**\n * Provides functionality around material selections inside of tables.\n */\nexport abstract class SelectionUtilities {\n\n /**\n * Checks if all items in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n * @param selection - The selection to check.\n * @param dataSource - The dataSource of the selection.\n * @returns Whether or not all items in the table have been selected.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n static isAllSelected(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): boolean {\n const numSelected: number = selection.selected.length;\n const numRows: number = dataSource.data.length;\n return numSelected === numRows;\n }\n\n /**\n * Toggles all items in the table.\n * @param selection - The selection to toggle.\n * @param dataSource - The dataSource of the selection.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n static masterToggle(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): void {\n if (SelectionUtilities.isAllSelected(selection, dataSource)) {\n selection.clear();\n }\n else {\n dataSource.data.forEach(row => selection.select(row));\n }\n }\n\n /**\n * Removes all selected entries from the array.\n * @param selection - The selection containing the items to remove.\n * @param values - The values of the dataSource.\n * @param dataSource - The dataSource.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n static remove(selection: SelectionModel<any>, values: any[], dataSource: MatTableDataSource<any>): void {\n selection.selected.forEach(s => {\n values.splice(values.indexOf(s), 1);\n });\n dataSource.data = values;\n selection.clear();\n }\n}","import * as uuid from 'uuid';\n\n/**\n * Encapsulates functionality of the uuid package.\n */\nexport abstract class UUIDUtilities {\n /**\n * Creates a new v4 uuid.\n * @returns The created uuid.\n */\n static create(): string {\n return uuid.v4();\n }\n}","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { DecoratorType, DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { UUIDUtilities } from '../../encapsulation/uuid.utilities';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\n\n/**\n * The abstract base class of any ngx-mat-entity input.\n * Extend from this when implementing your own custom decorator.\n *\n * It already provides:\n *\n * - entity: The entity which the property is on. (type-safe due to the Generic \"EntityType\")\n * - key: The key of the property. (type-safe due to the Generic \"EntityType\")\n * - getValidationErrorMessage: The function that generates the error message when the input is invalid.\n * - isReadOnly: Whether or not the input is read only. Can be used to disable elements.\n * - propertyValue: Just the typed version of the property, its the same as entity[key].\n * - metadata: The metadata of the property. (type-safe due to the Generic \"CustomMetadataType\")\n * - ngOnInit: Gets the metadata for the property, be aware of this when overriding this method.\n * - emitChange: Should be called when the input has changed. This is needed to trigger validation and dirty checks.\n */\n// eslint-disable-next-line angular/prefer-standalone-component\n@Component({\n selector: 'ngx-mat-entity-base-input',\n template: ''\n})\nexport abstract class NgxMatEntityBaseInputComponent<\n EntityType extends BaseEntityType<EntityType>,\n Type extends DecoratorTypes,\n ValueType,\n CustomMetadataType extends BaseEntityType<CustomMetadataType> = {}\n> implements OnInit {\n /**\n * The entity that the property to display as an input comes from.\n */\n @Input()\n entity!: EntityType;\n\n /**\n * The key of the property to build the input for.\n */\n @Input()\n key!: keyof EntityType;\n\n /**\n * The function that generates the error message when the input is invalid.\n */\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n /**\n * Whether or not the input should be readonly.\n * In that case it is disabled, but most of the disabled-styling is overridden.\n */\n @Input()\n isReadOnly!: boolean;\n\n /**\n * Emits when the property value has changed.\n */\n @Output()\n inputChangeEvent: EventEmitter<void> = new EventEmitter<void>();\n\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * The property value of entity[key] correctly typed.\n * Uses getters and setters so that inputs are always linked to the original value.\n */\n get propertyValue(): ValueType | undefined {\n return this.entity[this.key] as ValueType | undefined;\n }\n\n set propertyValue(value: ValueType | undefined) {\n (this.entity[this.key] as ValueType | undefined) = value;\n this.metadata.change?.(this.entity);\n }\n\n /**\n * The metadata of the property.\n */\n metadata!: DecoratorType<Type, CustomMetadataType>;\n\n /**\n * A unique name for inputs. Includes a uuid.\n */\n name!: string;\n\n ngOnInit(): void {\n\n const foundMetadata: DecoratorType<Type, CustomMetadataType> | undefined = EntityUtilities.getPropertyMetadata(this.entity, this.key);\n if (!foundMetadata) {\n throw new Error(`No metadata was found for the key \"${String(this.key)}\"`);\n }\n this.metadata = foundMetadata;\n this.name = this.key.toString() + UUIDUtilities.create();\n }\n\n /**\n * Should emit when the input has changed. This is needed to trigger validation and dirty checks.\n */\n emitChange(): void {\n this.inputChangeEvent.emit();\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { LodashUtilities } from '../../../encapsulation/lodash.utilities';\nimport { EntityUtilities } from '../../../utilities/entity.utilities';\nimport { SelectionUtilities } from '../../../utilities/selection.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { DisplayColumn } from '../../table/table-data';\nimport { NgxMatEntityBaseInputComponent } from '../base-input.component';\n\ntype ArrayTableType = DecoratorTypes.ARRAY | DecoratorTypes.ARRAY_DATE\n | DecoratorTypes.ARRAY_DATE_RANGE | DecoratorTypes.ARRAY_DATE_TIME;\n\n/**\n * The base component needed for all arrays that are displayed as a table.\n */\n// eslint-disable-next-line angular/prefer-standalone-component\n@Component({\n selector: 'ngx-mat-entity-array-table',\n template: ''\n})\nexport abstract class ArrayTableComponent<ValueType, EntityType extends BaseEntityType<EntityType>, ArrayType extends ArrayTableType>\n extends NgxMatEntityBaseInputComponent<EntityType, ArrayType, ValueType[]> implements OnInit {\n\n input?: ValueType = undefined;\n dataSource: MatTableDataSource<ValueType> = new MatTableDataSource();\n selection: SelectionModel<ValueType> = new SelectionModel<ValueType>(true, []);\n displayedColumns!: string[];\n\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n constructor(private readonly matDialog: MatDialog, private readonly injector: EnvironmentInjector, private readonly http: HttpClient) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.propertyValue = this.propertyValue ?? [];\n const givenDisplayColumns: string[] = this.metadata.displayColumns.map((v) => v.displayName);\n if (givenDisplayColumns.find(s => s === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved.\n Please choose a different name.`\n );\n }\n this.displayedColumns = this.isReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.dataSource.data = this.propertyValue;\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entity - The entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entity: ValueType, displayColumn: DisplayColumn<ValueType>): unknown {\n return runInInjectionContext(this.injector, () => displayColumn.value(entity));\n }\n\n /**\n * Tries to add an item to the array.\n */\n add(): void {\n if (this.input != null) {\n if (\n !this.metadata.allowDuplicates\n && this.propertyValue?.find(\n async v => await EntityUtilities.isEqual(this.input, v, this.metadata, this.metadata.itemType, this.http)\n ) != null\n ) {\n this.matDialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.duplicatesErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n return;\n }\n this.propertyValue?.push(LodashUtilities.cloneDeep(this.input));\n this.dataSource.data = this.propertyValue ?? [];\n this.resetInput();\n this.emitChange();\n }\n }\n\n /**\n * Is split up from the add method to override this functionality more easily.\n */\n protected resetInput(): void {\n this.input = undefined;\n }\n\n /**\n * Removes all selected entries from the entity array.\n */\n remove(): void {\n SelectionUtilities.remove(this.selection, this.propertyValue as [], this.dataSource);\n this.emitChange();\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-date-input',\n templateUrl: './array-date-input.component.html',\n styleUrls: ['./array-date-input.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatFormFieldModule,\n FormsModule,\n MatDatepickerModule,\n MatTableModule,\n MatCheckboxModule,\n MatInputModule,\n NgFor,\n MatButtonModule\n ]\n})\nexport class ArrayDateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n constructor(\n matDialog: MatDialog,\n injector: EnvironmentInjector,\n http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super(matDialog, injector, http);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateArrayDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div *ngIf=\"!isReadOnly\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors\"\n (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n </div>\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n <ng-container *ngFor=\"let dCol of metadata.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <div *ngIf=\"metadata.required(entity) && !dataSource.data.length\" class=\"array-error\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateRangeArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-date-range-input',\n templateUrl: './array-date-range-input.component.html',\n styleUrls: ['./array-date-range-input.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatFormFieldModule,\n MatDatepickerModule,\n FormsModule,\n MatTableModule,\n MatCheckboxModule,\n MatButtonModule,\n NgFor\n ]\n})\nexport class ArrayDateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<DateRange, EntityType, DecoratorTypes.ARRAY_DATE_RANGE> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n constructor(\n matDialog: MatDialog,\n injector: EnvironmentInjector,\n http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super(matDialog, injector, http);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateRangeArrayDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n this.input = {\n start: undefined as unknown as Date,\n end: undefined as unknown as Date,\n values: undefined as unknown as Date[]\n };\n }\n\n /**\n * Adds a DateRange to the array.\n */\n addDateRange(): void {\n if (this.input && this.dateRangeStart && this.dateRangeEnd) {\n this.input.start = new Date(this.dateRangeStart);\n this.input.end = new Date(this.dateRangeEnd);\n const values: Date[] = DateUtilities.getDatesBetween(\n this.input.start,\n this.input.end,\n this.metadata.filter\n );\n this.input.values = values.length ? values : undefined as unknown as Date[];\n this.add();\n }\n }\n\n protected override resetInput(): void {\n this.input = undefined;\n this.dateRangeStart = undefined;\n this.dateRangeEnd = undefined;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div *ngIf=\"!isReadOnly\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n \n <mat-error *ngIf=\"startModel.errors\">{{getValidationErrorMessage(startModel)}}</mat-error>\n <mat-error *ngIf=\"!startModel.errors && endModel.errors\">{{getValidationErrorMessage(endModel)}}</mat-error>\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"addDateRange()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n </div>\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n <ng-container *ngFor=\"let dCol of metadata.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <div *ngIf=\"metadata.required(entity) && !dataSource.data.length\" class=\"array-error\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf, Time } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateTimeArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-date-time-input',\n templateUrl: './array-date-time-input.component.html',\n styleUrls: ['./array-date-time-input.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatFormFieldModule,\n FormsModule,\n MatDatepickerModule,\n MatSelectModule,\n MatTableModule,\n MatCheckboxModule,\n MatInputModule,\n MatButtonModule,\n NgFor\n ]\n})\nexport class ArrayDateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE_TIME> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n dateTime?: Date;\n time?: Time;\n timeDropdownValues!: DropdownValue<Time>[];\n\n constructor(\n matDialog: MatDialog,\n injector: EnvironmentInjector,\n http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super(matDialog, injector, http);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateTimeArrayDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n this.time = DateUtilities.getTimeFromDate(this.entity[this.key] as Date);\n this.timeDropdownValues = this.metadata.times;\n if (this.entity[this.key] != null) {\n this.dateTime = new Date(this.entity[this.key] as Date);\n }\n }\n\n protected override resetInput(): void {\n this.input = undefined;\n this.time = undefined;\n }\n\n /**\n * Adds a date time to the array.\n */\n addDateTime(): void {\n if (this.input && this.time) {\n this.input = new Date(this.input);\n this.input.setHours(this.time.hours, this.time.minutes, 0, 0);\n this.add();\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div *ngIf=\"!isReadOnly\">\n <div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"time\"\n >\n <mat-option *ngFor=\"let validTime of DateUtilities.getValidTimesForDropdown(\n metadata.times,\n input,\n metadata.minTime,\n metadata.maxTime,\n metadata.filterTime\n )\"\n [value]=\"validTime.value\"\n >\n {{validTime.displayName}}\n </mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n </div>\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n <ng-container *ngFor=\"let dCol of metadata.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <div *ngIf=\"metadata.required(entity) && !dataSource.data.length\" class=\"array-error\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n/**\n * A Validator that checks if the input value is one of the provided values of the \"includedIn\" array.\n */\n@Directive({\n selector: '[includedIn]',\n providers: [{ provide: NG_VALIDATORS, useExisting: IncludedInValidatorDirective, multi: true }],\n standalone: true\n})\nexport class IncludedInValidatorDirective implements Validator {\n\n /**\n * The values that are valid for the input.\n */\n @Input()\n includedIn!: unknown[] | undefined;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n validate(control: AbstractControl<unknown>): ValidationErrors | null {\n if (!this.includedIn?.length || !(Boolean(control.value))) {\n return null;\n }\n\n return this.includedIn.includes(control.value) ? null : { includedIn: { value: control.value, validValues: this.includedIn } };\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { UUIDUtilities } from '../../../../encapsulation/uuid.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-string-chips-input',\n templateUrl: './array-string-chips-input.component.html',\n styleUrls: ['./array-string-chips-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatChipsModule,\n FormsModule,\n MatInputModule,\n NgFor\n ]\n})\nexport class ArrayStringChipsInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.ARRAY_STRING_CHIPS, string[]> implements OnInit {\n\n uuid2: string = UUIDUtilities.create();\n chipsInput: string = '';\n\n /**\n * Handles adding strings to the chipsArray.\n * Checks validation and also creates a new array if it is undefined.\n * This is needed because two things are validated: The array itself\n * and the contents of the array. And we need a way to display an\n * mat-error. As the only validation for the array is whether or not\n * it contains values, we can set it to undefined when the last element is removed\n * (removeStringChipArrayValue). That way we can use the \"required\" validator.\n * @param event - The event that fires when a new chip is completed.\n * @param invalid - Whether or not the input is invalid.\n */\n addStringChipArrayValue(event: MatChipInputEvent, invalid: boolean): void {\n if (invalid || !event.value) {\n return;\n }\n\n const value: string = event.value.trim();\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n\n event.chipInput?.clear();\n this.chipsInput = '';\n\n this.emitChange();\n }\n\n /**\n * Removes the given value from the array.\n * Sets the array to undefined if it is now empty.\n * This is needed because two things are validated: The array itself\n * and the contents of the array. And we need a way to display an\n * mat-error. As the only validation for the array is whether or not\n * it is empty, setting it to undefined here enables us to use the \"required\" validator.\n * @param value - The string to remove from the array.\n */\n removeStringChipArrayValue(value: string): void {\n this.propertyValue?.splice(this.propertyValue.indexOf(value), 1);\n this.propertyValue = this.propertyValue?.length ? this.propertyValue : undefined;\n\n this.emitChange();\n }\n\n setValidationErrors(model: NgModel, chipsModel: NgModel): void {\n if (chipsModel.errors) {\n model.control.setErrors(chipsModel.errors);\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\" [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n <mat-chip-row *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n <input #chipsModel=\"ngModel\"\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [(ngModel)]=\"chipsInput\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { IncludedInValidatorDirective } from '../../../../directives/included-in.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ArrayStringChipsInputComponent } from '../array-string-chips-input/array-string-chips-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-string-autocomplete-chips',\n templateUrl: './array-string-autocomplete-chips.component.html',\n styleUrls: ['./array-string-autocomplete-chips.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatChipsModule,\n FormsModule,\n MatAutocompleteModule,\n IncludedInValidatorDirective,\n MatInputModule,\n NgFor\n ]\n})\nexport class ArrayStringAutocompleteChipsComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayStringChipsInputComponent<EntityType> implements OnInit {\n\n filteredAutocompleteStrings!: string[];\n autocompleteStrings: string[] = [];\n\n get autocompleteMetadata(): AutocompleteStringChipsArrayDecoratorConfigInternal {\n return this.metadata as unknown as AutocompleteStringChipsArrayDecoratorConfigInternal;\n }\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await runInInjectionContext(this.injector, async () => {\n this.autocompleteStrings = await this.autocompleteMetadata.autocompleteValues(this.entity);\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n });\n }\n\n /**\n * Handles adding a string to the array when an autocomplete value has been selected.\n * @param event - The autocomplete selected event.\n * @param chipsInput - The element where the user typed the value.\n * @param model - The model of the string array.\n * @param chipsModel - The model of the single string input.\n */\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement, model: NgModel, chipsModel: NgModel): void {\n // validation is not needed as selected options are all valid.\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(event.option.value as string);\n chipsInput.value = '';\n this.chipsInput = '';\n this.filterAutocompleteStrings(this.chipsInput);\n chipsModel.control.updateValueAndValidity();\n model.control.updateValueAndValidity();\n this.setValidationErrors(model, chipsModel);\n this.emitChange();\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input: string): void {\n const filterValue: string = input.toLowerCase();\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(filterValue));\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n <mat-chip-row *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n <input #chipsModel=\"ngModel\"\n #chipsElement\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [includedIn]=\"autocompleteMetadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"chipsInput\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement, model, chipsModel)\">\n <mat-option *ngFor=\"let value of filteredAutocompleteStrings\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'boolean-checkbox-input',\n templateUrl: './boolean-checkbox-input.component.html',\n styleUrls: ['./boolean-checkbox-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatCheckboxModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class BooleanCheckboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_CHECKBOX, boolean> implements OnInit {\n\n updatePropertyValue(): void {\n this.propertyValue = this.propertyValue != null ? !this.propertyValue : true;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-checkbox\n color=\"primary\"\n [disabled]=\"isReadOnly\"\n [class.disabled]=\"isReadOnly\"\n [class.mat-checkbox-disabled]=\"false\"\n [checked]=\"propertyValue\"\n (click)=\"model.control.markAsTouched(); updatePropertyValue(); emitChange();\"\n >\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <input #model=\"ngModel\" matInput\n hidden\n [name]=\"name\"\n [pattern]=\"metadata.required(entity) ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DropdownBooleanDecoratorConfig. Sets default values.\n */\nexport class DropdownBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal<boolean>\n implements DropdownBooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownTrue: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownFalse: string;\n\n constructor(data: DropdownBooleanDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownTrue = getConfigValue(globalConfig.dropdownTrue, data.dropdownTrue);\n this.dropdownFalse = getConfigValue(globalConfig.dropdownFalse, data.dropdownFalse);\n }\n}\n\n/**\n * The internal CheckboxBooleanDecoratorConfig. Sets default values.\n */\nexport class CheckboxBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal<boolean>\n implements CheckboxBooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'checkbox';\n\n constructor(data: CheckboxBooleanDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.required = this.booleanToFunction(data.required ?? false);\n }\n}\n\n/**\n * The internal ToggleBooleanDecoratorConfig. Sets default values.\n */\nexport class ToggleBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal<boolean> implements ToggleBooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'toggle';\n\n constructor(data: ToggleBooleanDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.required = this.booleanToFunction(data.required ?? false);\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownBooleanDecoratorConfigInternal } from '../../../../decorators/boolean/boolean-decorator-internal.data';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'boolean-dropdown-input',\n templateUrl: './boolean-dropdown-input.component.html',\n styleUrls: ['./boolean-dropdown-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class BooleanDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_DROPDOWN, boolean> implements OnInit {\n\n constructor(\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DropdownBooleanDecoratorConfigInternal(this.metadata, this.globalConfig);\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select\n #model=\"ngModel\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (selectionChange)=\"emitChange()\"\n >\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadata.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadata.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'boolean-toggle-input',\n templateUrl: './boolean-toggle-input.component.html',\n styleUrls: ['./boolean-toggle-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSlideToggleModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class BooleanToggleInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_TOGGLE, boolean> implements OnInit {\n\n updatePropertyValue(): void {\n this.propertyValue = this.propertyValue != null ? !this.propertyValue : true;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-slide-toggle\n color=\"primary\"\n [disabled]=\"isReadOnly\"\n [checked]=\"propertyValue\"\n (click)=\"model.control.markAsTouched(); updatePropertyValue(); emitChange();\"\n >\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <input #model=\"ngModel\" matInput\n hidden\n [name]=\"name\"\n [pattern]=\"metadata.required(entity) ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, ComponentRef, OnInit, Type, ViewContainerRef } from '@angular/core';\n\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'custom-input',\n templateUrl: './custom.component.html',\n styleUrls: ['./custom.component.scss'],\n standalone: true\n})\nexport class CustomInputComponent<\n EntityType extends BaseEntityType<EntityType>,\n MetadataType extends BaseEntityType<MetadataType>,\n ValueType,\n ComponentType extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, ValueType, MetadataType>\n> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, ValueType, MetadataType> implements OnInit {\n\n component!: ComponentRef<ComponentType>;\n\n constructor(private readonly viewContainerRef: ViewContainerRef) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.component = this.viewContainerRef.createComponent<ComponentType>(this.metadata.component as Type<ComponentType>);\n this.component.instance.entity = this.entity;\n this.component.instance.key = this.key;\n this.component.instance.getValidationErrorMessage = this.getValidationErrorMessage;\n this.component.instance.inputChangeEvent.subscribe(this.inputChangeEvent);\n this.component.instance.isReadOnly = this.isReadOnly;\n }\n}","","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'date-input',\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatDatepickerModule,\n MatInputModule,\n FormsModule\n ]\n})\nexport class DateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE, Date> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ? metadata.min(propertyValue) : undefined\"\n [max]=\"metadata.max ? metadata.max(propertyValue) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? DateUtilities.defaultDateFilter\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DateRange, DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { DateUtilities } from '../../utilities/date.utilities';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultDateDecoratorConfig. Sets default values.\n */\nexport class DefaultDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date> implements DefaultDateDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'date';\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date | null | undefined>;\n\n constructor(data: DefaultDateDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.max = data.max;\n this.min = data.min;\n this.filter = data.filter;\n }\n}\n\n/**\n * The internal DateRangeDateDecoratorConfig. Sets default values.\n */\nexport class DateRangeDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal<DateRange>\n implements DateRangeDateDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'daterange';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderStart: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderEnd: string;\n\n constructor(data: DateRangeDateDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minStart = data.minStart;\n this.maxStart = data.maxStart;\n this.minEnd = data.minEnd;\n this.maxEnd = data.maxEnd;\n this.filter = data.filter;\n this.placeholderStart = getConfigValue(globalConfig.startLabel, data.placeholderStart);\n this.placeholderEnd = getConfigValue(globalConfig.endLabel, data.placeholderEnd);\n }\n}\n\n/**\n * The internal DateTimeDateDecoratorConfig. Sets default values.\n */\nexport class DateTimeDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date> implements DateTimeDateDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'datetime';\n // eslint-disable-next-line jsdoc/require-jsdoc\n times: DropdownValue<Time | undefined>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n timeDisplayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterDate?: DateFilterFn<Date | null | undefined>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterTime?: ((time: Time) => boolean) | (() => boolean);\n\n constructor(data: DateTimeDateDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = getConfigValue(globalConfig.timeLabel, data.timeDisplayName);\n this.minDate = data.minDate;\n this.maxDate = data.maxDate;\n this.filterDate = data.filterDate;\n this.minTime = data.minTime;\n this.maxTime = data.maxTime;\n this.filterTime = data.filterTime;\n this.defaultWidths = [6, 12, 12];\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DateFilterFn, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateRangeDateDecoratorConfigInternal } from '../../../../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'date-range-input',\n templateUrl: './date-range-input.component.html',\n styleUrls: ['./date-range-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatDatepickerModule,\n FormsModule,\n NgFor,\n NgIf\n ]\n})\nexport class DateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_RANGE, DateRange> implements OnInit {\n\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n defaultDateFilter: DateFilterFn<Date | null | undefined> = DateUtilities.defaultDateFilter;\n\n constructor(\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateRangeDateDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n // this.dateRange = LodashUtilities.cloneDeep(this.propertyValue) ?? EMPTY_DATERANGE;\n if (this.propertyValue?.start) {\n this.dateRangeStart = new Date(this.propertyValue.start);\n }\n if (this.propertyValue?.end) {\n this.dateRangeEnd = new Date(this.propertyValue.end);\n }\n this.setDateRangeValues();\n }\n\n /**\n * Updates the date range values based on the start and end date.\n */\n setDateRangeValues(): void {\n if (this.dateRangeStart && this.dateRangeEnd) {\n const values: Date[] = DateUtilities.getDatesBetween(\n new Date(this.dateRangeStart),\n new Date(this.dateRangeEnd),\n this.metadata.filter\n );\n this.propertyValue = {\n start: new Date(this.dateRangeStart),\n end: new Date(this.dateRangeEnd),\n values: values.length ? values : (undefined as unknown as Date[])\n };\n }\n else if (!this.dateRangeStart && !this.dateRangeEnd) {\n this.propertyValue = undefined;\n }\n else if (this.dateRangeStart) {\n this.propertyValue = {\n start: new Date(this.dateRangeStart),\n end: undefined as unknown as Date,\n values: undefined as unknown as Date[]\n };\n }\n else if (this.dateRangeEnd) {\n this.propertyValue = {\n start: undefined as unknown as Date,\n end: new Date(this.dateRangeEnd),\n values: undefined as unknown as Date[]\n };\n }\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ?? defaultDateFilter\" [disabled]=\"isReadOnly\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(dateRangeStart) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(dateRangeStart) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n (dateChange)=\"setDateRangeValues()\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(dateRangeEnd) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(dateRangeEnd) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n (dateChange)=\"setDateRangeValues()\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n\n <mat-error *ngIf=\"startModel.errors\">{{getValidationErrorMessage(startModel)}}</mat-error>\n <mat-error *ngIf=\"!startModel.errors && endModel.errors\">{{getValidationErrorMessage(endModel)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, Time } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DateFilterFn, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { DateTimeDateDecoratorConfigInternal } from '../../../../decorators/date/date-decorator-internal.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { defaultTrue } from '../../../../functions/default-true.function';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'date-time-input',\n templateUrl: './date-time-input.component.html',\n styleUrls: ['./date-time-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n MatDatepickerModule,\n FormsModule,\n MatSelectModule,\n NgFor\n ]\n})\nexport class DateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_TIME, Date> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n timeDropdownValues!: DropdownValue<Time | undefined>[];\n\n get time(): Time | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.TIME_KEY, this.entity, this.key) as Time | undefined;\n }\n\n set time(value: Time | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.TIME_KEY, value, this.entity, this.key);\n }\n\n defaultDateFilter: DateFilterFn<Date | null | undefined> = defaultTrue;\n\n constructor(\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateTimeDateDecoratorConfigInternal(this.metadata, this.globalConfig);\n this.time = DateUtilities.getTimeFromDate(this.propertyValue);\n this.timeDropdownValues = this.metadata.times;\n if (this.propertyValue) {\n this.propertyValue = new Date(this.propertyValue);\n }\n }\n\n /**\n * Checks if two times are equal. Is needed for the dropdown.\n * @param time1 - The first time to compare.\n * @param time2 - The second time to compare.\n * @returns Whether or not the time objects are the same.\n */\n compareTimes(time1?: Time, time2?: Time): boolean {\n if (time1 && time2 && time1.hours === time2.hours && time1.minutes === time2.minutes) {\n return true;\n }\n return false;\n }\n\n /**\n * Sets the time on a datetime property.\n */\n setTime(): void {\n if (!this.propertyValue) {\n this.emitChange();\n return;\n }\n this.propertyValue = new Date(this.propertyValue);\n if (this.time?.hours != null && this.time?.minutes != null) {\n this.propertyValue.setHours(this.time.hours, this.time.minutes, 0, 0);\n }\n else {\n this.propertyValue.setHours(0, 0, 0, 0);\n }\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(propertyValue) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(propertyValue) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? defaultDateFilter\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (dateChange)=\"setTime()\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [compareWith]=\"compareTimes\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"time\"\n (selectionChange)=\"setTime()\"\n >\n <mat-option *ngFor=\"let validTime of DateUtilities.getValidTimesForDropdown(\n metadata.times,\n propertyValue,\n metadata.minTime,\n metadata.maxTime,\n metadata.filterTime\n )\"\n [value]=\"validTime.value\"\n >\n {{validTime.displayName}}\n </mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n</div>","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n/**\n * Adds drag and drop functionality to an element.\n */\n@Directive({\n selector: '[dragDrop]',\n standalone: true\n})\nexport class DragDropDirective {\n /**\n * Emits the dropped files to the parent.\n */\n @Output()\n files: EventEmitter<File[]> = new EventEmitter<File[]>();\n\n constructor() { }\n\n /**\n * Prevents the event default.\n * @param evt - The Event when dragged files hover over the parent.\n */\n @HostListener('dragover', ['$event'])\n onDragOver(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n /**\n * Prevents the event default.\n * @param evt - The Event when dragged files leave the parent.\n */\n @HostListener('dragleave', ['$event'])\n onDragLeave(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n /**\n * Prevents the event default and emits the dropped files with the output.\n * @param evt - The Event when files are dropped.\n */\n @HostListener('drop', ['$event'])\n onDrop(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.dataTransfer && evt.dataTransfer.files.length > 0) {\n this.files.emit(Array.from(evt.dataTransfer.files));\n }\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DefaultFileDecoratorConfigInternal, FileDataWithFile, ImageFileDecoratorConfigInternal } from '../../../../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { DragDropDirective } from '../../../../directives/drag-drop.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { FileUtilities } from '../../../../utilities/file.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../../confirm-dialog/confirm-dialog.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrls: ['./file-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatChipsModule,\n FormsModule,\n NgIf,\n NgFor,\n DragDropDirective,\n MatButtonModule\n ]\n})\nexport class FileInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n get filenames(): string[] | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.FILENAMES_KEY, this.entity, this.key) as string[] | undefined;\n }\n set filenames(value: string[] | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.FILENAMES_KEY, value, this.entity, this.key);\n }\n\n FileUtilities: typeof FileUtilities = FileUtilities;\n\n @Input()\n propertyValue!: FileData | FileData[] | undefined;\n\n @Input()\n entity!: EntityType;\n\n @Input()\n key!: keyof EntityType;\n\n @Input()\n metadata!: DefaultFileDecoratorConfigInternal | ImageFileDecoratorConfigInternal;\n\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n @Input()\n isReadOnly!: boolean;\n\n @Output()\n fileDataChangeEvent: EventEmitter<FileData | FileData[]> = new EventEmitter<FileData | FileData[]>();\n\n acceptString!: string;\n\n constructor(private readonly dialog: MatDialog, private readonly http: HttpClient) { }\n\n async ngOnInit(): Promise<void> {\n if (this.metadata.multiple) {\n this.initMultiFile();\n }\n else {\n this.initSingleFile();\n }\n this.fileDataChangeEvent.emit(this.propertyValue);\n this.acceptString = FileUtilities.getAcceptString(this.metadata.allowedMimeTypes);\n }\n\n private initMultiFile(): void {\n if (this.propertyValue) {\n this.filenames = (this.propertyValue as FileData[]).map(f => f.name);\n }\n }\n\n private initSingleFile(): void {\n if (this.propertyValue) {\n this.filenames = [(this.propertyValue as FileData).name];\n }\n }\n\n async setFileFromInput(event: Event): Promise<void> {\n const files: FileList | [] = (event.target as HTMLInputElement).files ?? [];\n await this.setFile(Array.from(files));\n }\n\n async setFile(files: File[]): Promise<void> {\n // validation done inline\n if (files.find(f => !FileUtilities.isMimeTypeValid(f.type, this.metadata.allowedMimeTypes))) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.mimeTypeErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n this.resetFileInputs();\n return;\n }\n if (files.find(f => FileUtilities.transformToMegaBytes(f.size, 'B') > this.metadata.maxSize)) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.maxSizeErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n this.resetFileInputs();\n return;\n }\n let fileSizeTotal: number = 0;\n for (const file of files) {\n fileSizeTotal += file.size;\n }\n if (FileUtilities.transformToMegaBytes(fileSizeTotal, 'B') > this.metadata.maxSizeTotal) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.maxSizeTotalErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n this.resetFileInputs();\n return;\n }\n if (this.metadata.multiple) {\n await this.setMultiFile(Array.from(files));\n }\n else {\n await this.setSingleFile(files[0]);\n }\n this.fileDataChangeEvent.emit(this.propertyValue);\n }\n\n private resetFileInputs(): void {\n this.filenames = undefined;\n this.propertyValue = undefined;\n this.fileDataChangeEvent.emit(this.propertyValue);\n }\n\n private async setMultiFile(files: File[]): Promise<void> {\n this.propertyValue = this.propertyValue ?? [];\n for (const file of files) {\n const fileData: FileData = {\n file: file,\n name: file.name,\n type: file.type,\n size: file.size\n };\n (this.propertyValue as FileData[]).push(fileData);\n }\n this.filenames = (this.propertyValue as FileData[]).map(f => f.name);\n }\n\n private async setSingleFile(file: File): Promise<void> {\n this.propertyValue = {\n file: file,\n name: file.name,\n type: file.type,\n size: file.size\n };\n this.filenames = [this.propertyValue.name];\n }\n\n removeFile(name: string): void {\n if (this.isReadOnly) {\n return;\n }\n if (this.metadata.multiple) {\n this.filenames?.splice(this.filenames.indexOf(name), 1);\n if (!this.filenames?.length) {\n this.filenames = undefined;\n }\n const fileDataToRemove: FileData = (this.propertyValue as FileData[]).find(f => f.name === name) as FileData;\n (this.propertyValue as FileData[]).splice((this.propertyValue as FileData[]).indexOf(fileDataToRemove), 1);\n if (!(this.propertyValue as FileData[]).length) {\n this.propertyValue = undefined;\n }\n }\n else {\n this.filenames = undefined;\n this.propertyValue = undefined;\n }\n this.fileDataChangeEvent.emit(this.propertyValue);\n }\n\n async downloadFile(name: string): Promise<void> {\n if (this.metadata.multiple && (this.propertyValue as FileData[]).length) {\n const foundFileData: FileData = (this.propertyValue as FileData[]).find(f => f.name === name) as FileData;\n // the index need to be saved in a constant because we edit foundFileData\n // => .indexOf() returns undefined.\n const index: number = (this.propertyValue as FileData[]).indexOf(foundFileData);\n (this.propertyValue as FileData[])[index] = await FileUtilities.getFileData(foundFileData, this.http);\n FileUtilities.downloadSingleFile((this.propertyValue as FileData[])[index] as FileDataWithFile);\n }\n else if (this.propertyValue) {\n this.propertyValue = await FileUtilities.getFileData(this.propertyValue as FileData, this.http);\n FileUtilities.downloadSingleFile(this.propertyValue);\n }\n }\n\n downloadAllEnabled(): boolean {\n if (!this.metadata.multiple) {\n return false;\n }\n if (!this.propertyValue) {\n return false;\n }\n if ((this.propertyValue as FileData[]).length < 2) {\n return false;\n }\n return true;\n }\n\n async downloadAll(): Promise<void> {\n if ((this.propertyValue as FileData[]).length) {\n\n void FileUtilities.downloadMultipleFiles(this.metadata.displayName, LodashUtilities.cloneDeep(this.propertyValue as FileData[]), this.http);\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<input #fileInput\n type=\"file\" hidden\n [multiple]=\"metadata.multiple\"\n [accept]=\"acceptString\"\n (change)=\"setFileFromInput($event)\"\n>\n\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" name=\"file\" [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"filenames\"\n >\n <mat-chip-row *ngFor=\"let name of filenames\" (removed)=\"removeFile(name)\">\n {{name}}\n <span class=\"mat-mdc-chip-remove mat-mdc-chip-trailing-icon ngx-mat-grey\" (click)=\"downloadFile(name)\">\n <i class=\"fas fa-download\"></i>\n </span>\n <button *ngIf=\"!isReadOnly\" type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n <input hidden [matChipInputFor]=\"chipGrid\" [readonly]=\"true\">\n </mat-chip-grid>\n <button *ngIf=\"downloadAllEnabled()\" type=\"button\" class=\"ngx-mat-grey\" mat-icon-button matSuffix (click)=\"downloadAll()\">\n <i class=\"fas fa-file-zipper\"></i>\n </button>\n <button type=\"button\" class=\"ngx-mat-grey\" mat-icon-button matSuffix [disabled]=\"isReadOnly\" (click)=\"fileInput.click()\">\n <i class=\"fas\" [class.fa-plus-circle]=\"metadata.multiple\" [class.fa-upload]=\"!metadata.multiple\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>\n\n<div *ngIf=\"metadata.dragAndDrop && !isReadOnly\" class=\"drag-drop\" dragDrop (files)=\"setFile($event)\">\n <button type=\"button\" mat-icon-button [disabled]=\"isReadOnly\" (click)=\"fileInput.click()\">\n <i class=\"fas fa-file-arrow-up ngx-mat-grey\"></i>\n </button>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\nimport { FileInputComponent } from '../file-input/file-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'file-default-input',\n templateUrl: './file-default-input.component.html',\n styleUrls: ['./file-default-input.component.scss'],\n standalone: true,\n imports: [\n FileInputComponent\n ]\n})\nexport class FileDefaultInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_DEFAULT, FileData | FileData[]> implements OnInit {\n\n async refreshFileData(fileData?: FileData | FileData[]): Promise<void> {\n this.propertyValue = fileData;\n this.emitChange();\n }\n}","<div [class.file-input]=\"metadata.dragAndDrop\" [class.mat-elevation-z8]=\"metadata.dragAndDrop\">\n <file-input\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n [entity]=\"entity\"\n [key]=\"key\"\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n >\n </file-input>\n</div>","// eslint-disable-next-line jsdoc/require-jsdoc\nexport const PLACEHOLDER: string = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAMgCAMAAAAEPmswAAAANlBMVEXx8/XCy9LFztXu8PPs7/Lp7e/W3OHL0tnZ3+PN1NrS2d7i5urn6u7f5OjI0Nfc4ebP1tzk6excnoRZAAAXh0lEQVR42uzUAQ0AAAzDoN+/6eloAiK4B4gQFpAhLCBDWECGsIAMYQEZwgIyhAVkCAvIEBaQISwgQ1hAhrCADGEBGcICMoQFZAgLyBAWkCEsIENYQIawgAxhARnCAjKEBWQIC8gQFpAhLCBDWECGsIAMYQEZwgIyhAVkCAvIEBaQISwgQ1hAhrCADGEBGcICMoQFZAgLyBAWkCEsIENYQIawgAxhARnCAjKEBWQIC8gQFpAhLGDs1AEJAAAAgKD/r9sR6Ag3hAVsCAvYEBawISxgQ1jAhrCADWEBG8ICNoQFbAgL2BAWsCEsYENYwIawgA1hARvCAjaEBWwIC9gQFrAhLGBDWMCGsIANYQEbwgI2hAVsCAvYEBawISxgQ1jAhrCADWEBG8ICNoQFbAgL2BAWsCEsYENYwIawgA1hARvCAjaEBWwIC9gQFrAhLGBDWMCGsIANYQEbwgI2hAVsCAvYEBbETh2QAAAAAAj6/7odgY6QDWEBG8ICNoQFbAgL2BAWsCEsYENYwIawgA1hARvCAjaEBWwIC9gQFrAhLGBDWMCGsIANYQEbwgI2hAVsCAvYEBawISxgQ1jAhrCADWEBG8ICNoQFbAgL2BAWsCEsYENYwIawgA1hARvCAjaEBWwIC9gQFrAhLGBDWMCGsIANYQEbwgI2hAVsCAvYEBawISxgQ1jAhrCADWEBG8ICNoRF7NQBCQAAAICg/6/bEegIYUNYwIawgA1hARvCAjaEBWwIC9gQFrAhLGBDWMCGsIANYQEbwgI2hAVsCAvYEBawISxgQ1jAhrCADWEBG8ICNoQFbAgL2BAWsCEsYENYwIawgA1hARvCAjaEBWwIC9gQFrAhLGBDWMCGsIANYQEbwgI2hAVsCAvYEBawISxgQ1jAhrCADWEBG8ICNoQFbAgL2BAWsCEsYENYwIawgA1hxc6dJtcKAgEURgREwGn/m32Vd1Op/Ih3cO72fIs4BU0rADEIFgAxCBYAMQgWADEIFgAxCBbwm+3bFOKQ8zSV4r13zvky5a4bYgxjYyuch2ABD7ZJMRdnXnIlDyE1FY5HsADbhmFy5lM+x7GvcCSChXtrQufNCnXpQlvhIAQLt2XHONVmE2VIzLaOQLBwT230ZlsuBy6IeyNYuB+bOmd24TpOWrsiWLiZJhazKz8w09oNwcKd9NGbA9SZg9Y+CBZuw4ZijlMiE63tESzcg02TOZqnWVsjWLiDpqvNKXxkI35LBAv6pWJO5APzrM0QLChnozNnm5jBb4RgQbU2m0uoO3YdtkCwoFjy5jp85Ji1GsGCWpfK1X95rLAKwYJS4XK54pi1HsGCSuH8SfucjkWH5QgWFLpwrr6UVGEZggV10rVz9cVxM1yGYEGZthgJ6oHPdhYgWFClv8jeFcOsfRAsKGIHI8rENumHCBb0iLWRhvn7ZwgWtGgvuXj1kidZHyBY0MF2RiqS9T6CBRWCvNsgyVqAYEGBRsYqA8lajWBBPGlvg38rvBi+gWBBuvb6i+3vmdjLeolgQTYdx6tvme33FwgWRBO6yzBr4BvDpwgWJNN0vHqo+Sz6GYIFuRplx6sHx4PhPIIFsaJRigfDWQQLQvXid6+Yvn+OYEGmUfRq+2uMsv5EsCCSvmk7o6x3ECwIpPo6yCLpEwQL8iTl10G2smYRLIij/zrIvXAOwYIwvcrlq1kT74W/ESzIMmr51Plddazwg2BBlGDux7NH+oNgQRK5/0Fm+L4JgvWPvbvRSRiGAjBaBoqK+PP+L2s0xGSj3QiQ9I57zkN86brblvVItn1l8/2cYLEar1mmGWoOFlm/BIu1yLh9ZZE1IVisRNLtK4usEcFiFYbvwtYiS7BYg7zb7WPfFlmCRXj7bNOiFlkNgkV8j373lZ2siwkW4SX/PTi1+9pkJljEluhyhgsdMy+yBIvQDoWpXeLThYJFYMYZ6vJe4SBYxDWkuAv5Gu9Z78kSLMIajF8ZcBgRLOL6MH5l731MsAhrb/zK3vuEYBFV6ttk7L3XCRZBvRUcLpwSLGLSK3PvFYJFSHrls7BGsIhIr3wWVgkWATnu7G9hnWARj175LGwQLMLRK5+FLYJFNHp1jd1+k4NgEYpeXel5k4JgEYleXe24yUCwCESvXDkzR7CIxPzVTbYJxt4FizD0ynzDPMEiDr3yCtgCwSKMr8Ltnh58I0uwiOG1cA/bxz6oI1iE4L4+E1nLBIsY3IdsIusCgkUI3pu4q/fH3XoXLPob9OqXo4VLBIsAvD944tnCBYJFAN53PjFDukCw6O9Q+GPrfYlg0d2x8M+tfrMEi94+CyOm3tsEi65cKDNl6n2OYNGTA89Vpt5bBIuOHCCs8rOwSbDoaW9gtMbPwhbBohsD7k1+FjYIFv0MBkbb/CysESx6MTA6z8nCCsGiEwNYS7xOcU6w6OWlsMB4ww9794LdJgyEUXgwAsfFL/a/2Z4+T2zjWCMgnl/cbwttbxppNNwjWHgLBrByMN5wj2Ct4HztL+OxS621qTuOp/5a06HnItgw+v0uTRUI1qL2/dDao3b8qO+RRDkGGt5haGpAsJZzPbX2XDvUc/I5ExuwsrE4+QbBWsz+I9kr6VLR/XI5Nsq8SVdBsQjWIg6D5Rn5bxYbGpwYyPqPYC3iMFq+4+aTxSeevdg38xfBWsB5MJ+j/s+5Oc5cEDoxQvoPwZrvozW3SwWHCWX4RM67iX9Oh2DNc+isRFL/QVduNBRg6P0XgjVTv/nJYx9eEAYgXSyCNcNu2PpUjBMXhCEo/7AkWKVm78tM8jc2XqxEDkL4mQ7BKnZot35j48QFYRi6z3QIVqlru/kbGx8uCAORLRbBKvSD808nVoxGorrpnWCVuTIV48TKvlhEL30IVoEl1zlt5xyLlX2xaBaLYJU4J153+bCyLx7J5Q0Ey23hw+Ok+NfGiwP3iBSLRbAKDLaksdkCDtwDSnrLuwmWX29mDB57MOEelF6xCJbTGocx9R9jMeEelNxKP4Ll1tlvHGPl4psTgbVixSJYXr39wS+FuVgpE5lYsQiW0661FcgdJTiwUiY2rd8KCZbTyf7ipjAPO9yjk/o/FsHy2dstBt5fYEVDfErFIlg+g63j2FSLidHwhJ5bECyXs33GaMNLfDRVgk6xCJbLyT7jFOsVJkZFyBSLYHnsbD1C5wgOe4MElWIRLI/e7rFn+ws8eRYiUiyC5dHZelJTIZ4869C4KyRYDnu7x2TDF9gxqkWiWATL4WJrOjW14cmzFoViESyHZGtqm8rw5FmNwCsdgpXvbI8YxXqGJ8+C4heLYOXr7RE7G57gAEtS+I1+BCvfyaYwOzqFAyxR0YtFsPIle8Qh1iQOsGQFLxbByrazCQy7T2ICS1fsb+kQrGwHe4rPQN/iCaGy0MUiWNl6m8Kp+yN2YGmL/E1ogpXtYtMYHb3HDixxgYtFsLIN9gRb/G6xxF1e3AtrgpXtaM/w/vkzlrhXYGiCIljZOntAsKbsOMDSF7VYBCtbsrVV8ofBk5waBD1QreTfyPoIVh6e5NQi5kbJOv6NfAtbX9zLmVw8yanHT/buBDt1GIbCsJwRCOP+N/t62vNaphLbSZEs/98O2gOXyJFkk102BFYkAisGIzmeDMEeAitaK09REl5hJMcVg6MXHr4jb8EZVgRGcpyxl1gOviPv0stzrGv4MdLR4Iu5pZIEViQaR+cxkuOOucu/CKxIjObMYiTHIWsXUxBY0TbynPtevUiM5LhkbKEfgRWJ9TIz6GhwytZ6LAIrEgv8ZtDR4JWpZTMEViRWJM/ZCXyytGyGwIrFJRSvsGTUM0OHqwRWLK75eoUdDa7ZGYQmsOLt5CnO3EOgxd05M59NAisWV9W/MgpcszIITWAl6OUeR1ifaHH37xxMILASnOSBz5NNY/8ZGGBkSIfASjDKDZ8/YelY2lcFG0M6BFaKXh4w+UyLeyU6Cw2kBFaKQW75fHOc7CCogYUhHQIrRSN3aHMPtLjXw0CnIIGV5CT3vN8DN4eCsCb6L4YIrCRHuUYTVgi0uFdFvYGUwEpzkP/cPWxnocW9MkPQRGClGuUKPQ1sca/OOSgisJId5BsnWB/2gqqoNpASWMmaVv6ArTW00biXvkLtMaghsNIN8snXUWYeZp6rpNiORWBl2Mva+lAqZp5rtA9aCKxk36s1aWlg5rlWU1BCYOXYyQcKQmae63UKOgisLAcRoQWLgrBiQ1BBYGVpem8z8BkoCKt2DhoIrDzHztmWoXQUhHXT+dwSWJnGtvoDd2ae66ZSGRBYubbVX/ZMQVg5jXYsAivbueyzSyN/Pwo2hbcjsPJt25qfrygIodDcQGAtMHZlj5EuwFZkqBQIBNYSx16W6Ip9P0hBCJ3mBgJrkeYg+S7F9l9REEKpuYHAWmiobx4nBApCKDU3EFhLjb3k6As+vuKaHGhtbiCwlhvayh6vKAihdZEOgbWCZpI0l2L3i36ZBFD59SWwVjFOKXFVdDUYKAih101IYK0iIbKm0uMqNFyTA615WAJrNcdNL3O6TcGtV18oCKH4qpDAWtP21MnvukOxdw/+oCCE5qtCAmtlx2Hq5FE7DQ6erUKgIITqHDSB9Qea7XCaLvu+a7u+30+nYVtwT/stCkKovioksJCAgvAfe3eU6ygMBFG0GhtCSAxh/5udUWby8Z4COGCgI92ziJLLuBuc+6mQwEI+nozi9KlCAgu5KIQ4/VMhgYVMFEKc/6mQwEIeCiEcTBUSWMhDIYSDBaQEFrJQCOFhASmBhRwUQiwLve2LwEIetozCxb8KCSxk4LcT8DGjQ2BhGYUQTmZ0CCwsoxDCyYwOgYVFFEJ4mdEhsLCEQgg3MzoEFpZQCPGJ0XZDYGERhRCfGWwvBBaWUAjh6OKdwMI8CiE+drF9EFhYQCGEp4t3AgtzKIRwdfFOYGEOhRCuLt4JLMy6CvBz8U5gYU5VC/Dz4p3AwpxBgKNVMwQWJlEI4W3VDIGFGRRC+Fo1Q2BhCoUQ7na8E1iYdBHga8c7gYUJFEL4u3gnsDClFeDs4p3AwjsUQrj8uarsCP21a4Z0G+sYQwiSQoixvo9paJvHpTI4RCFEAVcrSrar/tEMY9SCeL+1zaM3OEIhhMPFDbK9VF07Bn2kTs2V45YPFEJ4XNwg20PfpKgJOallONtdgL/FDbLSqi7V2qpOHUetU1AI8eR0cYOsqKq7BRVybzlpHY5CiH+cvh+VlVN1o8oKt4ar+CNRCPHi8/2orJRrCtpDTA/DISiE2EeyUmRFVG3UfgKZdQAKIX7y+H5UVkA/BP1GZn0vCiGeHP74S7bZJek9Mus7NQL+8vh+VLZRlXSckC6GnfUCnhyOQcu2aYOOVTc80CqOQoj33O0flW3RRR0vJN5nlUUhxAR3Y9Cy9aqb8nHM+g59EPDi7hpLtloXdCKOWYVQCDHP1Ri0LJOf49VL3Rm2ohBiga9rLFkeX8er/yLNcBsKIXI4+o2ObAU//38KA7OGJY0CfvM0Bi1bofd00cHTrLUohDja3TaSfe4R5crIC/gVKIR/2Lvb5NRhGArD54RvCC3sf7N3Op07UyhJ7PQHsvU+W4BxIvlIQbkw2/zkMrFH+em/V6MgRKlIbSy50hDzX82RVYeCEMUitbHkOh9hP/60ozAsRkGIGoHaWHKVQ7D21YORI6sCkVGUC9PGkqcFTV9xZP0RBSGqRWljyb+1/J/myKrAllG8w2bwavKEwGnReXdyWXMoCPF2o1eTi719eLDUlYGdOa1kVdCvo9eSH/RwXkmbI0fWSxSEiOHmleRnTcWvpmz3RoWwYRX0afVuLLnI0FyLg1jWMwpCxHH3OnKJocUn8Ej3/QcKQoRy9Cryt/7OK7rvDygIEcvJa8hf+jyvaGX91HpcBZ1Z18aS7W7PK0kjq9+XnAS8wcUryO75vKIutE1BiJD2rifb7ut+8NmGupCCEBEdXE3dn1eSdtSFFISIZze4lvxf10soqQsnDJH3BaF3V9dSivNK2rKR9KWrgPc5u5LcyfzgogsfBPvtJuB96hcmK08/luY7BSGi2bmOMk2YMazT8Rs02vTpKvKks/pzNPr+hdGam2soWXuDhAOfyUEodSM68oRTr//mTxIOvV0Bo2l3V5BfO/R6XvGS1dAnRZDC3uWU8fro02AJFsI4uJhSfkNlx3UhM88Io2JER0nzz+mvC/vK2KFtV5dSigAWL1nMPCOyswspbzwn80tW3z1KNKd4REeJH75j3ulCIu6IZXQZ+dlHnofvJusKhyTv0GjI0UXU20bkOpeUKVIi7ojn5BJKXixsM6ZIOw+toEllIzpKeEGYPUWa7zdGC64uIJob2XrvaS5V0JizlynLBCGb/Ug0ILbN4EXK23BP2ntP1qREQ+5eJPaNfNmmyb2zowFx7b1ENGO/JSkLcxb9aMXBC5S74Z6uLMxa9KMNOy8Qz95MkSx2NCC2q+cpfcM90zh0n3v60ZObZ4nLox/ufZeFQ/aXaMS3EHgXl0d5ysK8t8Box8VzRPo5zW1h6ltgNGPvGSL9nOW2kAYWmjC7zE80sJIsT+ahhEaMniZqhSR7/f6xdy+4iQNBEEDdQYEA4Xf/y+5ukk2AYAkFKXKX3ztEWe6p6THAoouXGjUYYM1j5YyPEn2saszgX2EWK2cMsGhk/KHCwb/CTYtjJfFRopVDjRj8K8yh9m4pMr0c67bBAGsG/QZXCGlmrPA++FcY9ZwyyJr5Hg462tZNA/GDLK960dCmvhNYMxhk2cNBR7cK7wJrBoOs3QANneobgZU/yLKHg6aWdU1gxQ+ynALT1qquCKz0jTMao/T1WlcE1l121ZbGKI291CWBdZ/XrqN3A3daW9UFgZX90KqBO7091wWBFb0jy8Cd7g51TmAld0g13OlvXWcEVnCHVMOdABe3oAVW8Ojdon4S7OqLwModvdtzRoZjfRJYsaN3K2UIcfZTKLBSR+8OCImxrf8EVmjr3QEhQTb1QWBljt4dEJJk8VTvBFbm6N1DSETZ1juBFblwxpsThNnUG4GVuHBGoYE0Hz+FAivwsNCNZ/Js6x+B9VPbmiqP0pNoWX8JrLjDwpVCA4nefgoFVtph4d5KZDKdqkpgPWCxrslRwCLWskpgPWRyNwufrHAn1mJfAivqsFBekexUAivqZqGCO9GWAutRpwkdFtrYR7bFXmDlPGXvSS/SnQRWTL1BXpHPNY6Uu9AuPDMDatEhd6HlFdCl3iCvgC71BnkFdLkLbd4OdKk3yCugS71BXgFd6g367UCTeoP7zsAPHeoe9l8BU7CrX7WyXxRoUm9Yu6gA/GHvDnMThmEwgNZpF9LQUrj/ZfdvmmBMDEabSu8dIkrsz85O4g3VeQW8ZhjjPv+lAk3pa9whzgA0J8ePxBmABs3xZqP2ILCTVe/2LgI7aRYm04NA1+1iFvog3Q503S6ahZ6DwJe2FycnaQbgLY4p/lnVHQS+abj07noFXGl2TsfsIHCrydS76xVwq8lCViquV8D7fRwU24HdyPGa0aQzsJrpFM8bFa+ANfUlnnS+dADrGmo8oZobBLYwLKf4k1NRagc2M9UUD0rZWxDYVj8/cmalOotdAS2Yyhi/OBcpBqAh/WXJY4or6ZwXhxXQpGE6znMpOZdlmY+TVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDJHhwIAAAAAAD5vzaCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwBwcCAAAAAED+r42gqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqirswYEAAAAAAJD/ayOoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkp7cCAAAAAAIMjfepArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKcAnTNeiLeG1rEAAAAASUVORK5CYII=';","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { PLACEHOLDER } from '../../../../mocks/placeholder-data.png';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { FileUtilities } from '../../../../utilities/file.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\nimport { FileInputComponent } from '../file-input/file-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'file-image-input',\n templateUrl: './file-image-input.component.html',\n styleUrls: ['./file-image-input.component.scss'],\n standalone: true,\n imports: [\n FileInputComponent,\n NgIf\n ]\n})\nexport class FileImageInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_IMAGE, FileData | FileData[]> implements OnInit {\n\n get multiPreviewImages(): string[] | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.MULTI_PREVIEW_IMAGES_KEY, this.entity, this.key) as string[] | undefined;\n }\n set multiPreviewImages(value: string[] | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.MULTI_PREVIEW_IMAGES_KEY, value, this.entity, this.key);\n }\n\n get singlePreviewImage(): string | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.SINGLE_PREVIEW_IMAGE_KEY, this.entity, this.key) as string | undefined;\n }\n set singlePreviewImage(value: string | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.SINGLE_PREVIEW_IMAGE_KEY, value, this.entity, this.key);\n }\n\n imageIndex: number = 0;\n placeHolder: string = PLACEHOLDER;\n\n constructor(private readonly http: HttpClient) {\n super();\n }\n\n private async setSinglePreviewImage(): Promise<void> {\n if (this.propertyValue) {\n this.propertyValue = await FileUtilities.getFileData(this.propertyValue as FileData, this.http);\n this.singlePreviewImage = await FileUtilities.getDataURLFromFile(this.propertyValue.file);\n }\n else {\n this.singlePreviewImage = undefined;\n }\n }\n\n private async setMultiPreviewImages(index: number): Promise<void> {\n const multiFileData: FileData[] | undefined = this.propertyValue as FileData[] | undefined;\n const previewImages: string[] = [];\n if (multiFileData?.length) {\n for (let i: number = 0; i < multiFileData.length; i++) {\n if (i === index) {\n multiFileData[index] = await FileUtilities.getFileData(multiFileData[index], this.http);\n previewImages.push(await FileUtilities.getDataURLFromFile(multiFileData[index].file) as string);\n }\n else {\n previewImages.push('empty');\n }\n }\n }\n this.multiPreviewImages = previewImages;\n }\n\n async refreshFileData(fileData?: FileData | FileData[]): Promise<void> {\n this.propertyValue = fileData;\n this.emitChange();\n if (this.metadata.multiple) {\n fileData = (fileData as FileData[] | undefined);\n if (!fileData?.[this.imageIndex]) {\n this.imageIndex = 0;\n }\n await this.setMultiPreviewImages(this.imageIndex);\n }\n else {\n await this.setSinglePreviewImage();\n }\n }\n\n async prev(): Promise<void> {\n if (this.imageIndex <= 0) {\n return;\n }\n await this.setMultiPreviewImages(this.imageIndex - 1);\n this.imageIndex--;\n }\n\n async next(): Promise<void> {\n if (!this.multiPreviewImages?.length) {\n return;\n }\n if (this.imageIndex === (this.multiPreviewImages.length - 1)) {\n return;\n }\n await this.setMultiPreviewImages(this.imageIndex + 1);\n this.imageIndex++;\n }\n\n async setIndex(index: number): Promise<void> {\n await this.setMultiPreviewImages(index);\n this.imageIndex = index;\n }\n}","<!-- eslint-disable angular/conditional-complexity -->\n<!-- eslint-disable angular/prefer-ngsrc -->\n<!-- eslint-disable angular/alt-text -->\n<!-- eslint-disable angular/cyclomatic-complexity -->\n<div *ngIf=\"!metadata.dragAndDrop && !metadata.preview\">\n <file-input\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n [entity]=\"entity\"\n [key]=\"key\"\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n >\n </file-input>\n</div>\n\n<div *ngIf=\"metadata.dragAndDrop || metadata.preview\" class=\"file-input mat-elevation-z8\">\n <file-input\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n [entity]=\"entity\"\n [key]=\"key\"\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n >\n </file-input>\n\n <ng-container *ngIf=\"metadata.preview\">\n <ng-container *ngIf=\"metadata.multiple\">\n <div class=\"image-preview\">\n <img *ngIf=\"multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"multiPreviewImages?.[imageIndex]\">\n <img *ngIf=\"!multiPreviewImages?.[imageIndex]\" class=\"mat-elevation-z2\" [src]=\"metadata.previewPlaceholderUrl ?? placeHolder\">\n </div>\n \n <div class=\"preview-nav\">\n <i class=\"fas fa-angle-left left-button\" [class.disabled]=\"imageIndex === 0\" (click)=\"prev()\"></i>\n <div *ngIf=\"\n multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (multiPreviewImages.length - 1)\n \"\n class=\"dot\"\n (click)=\"setIndex(imageIndex-4)\"\n >\n <div class=\"image-index\">{{imageIndex - 3}}</div>\n </div>\n <div *ngIf=\"\n multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (multiPreviewImages.length - 2)\n || imageIndex === (multiPreviewImages.length - 1)\n )\n \"\n class=\"dot\"\n (click)=\"setIndex(imageIndex-3)\"\n >\n <div class=\"image-index\">{{imageIndex - 2}}</div>\n </div>\n <div *ngIf=\"multiPreviewImages?.[imageIndex-2]\" class=\"dot\" (click)=\"setIndex(imageIndex-2)\">\n <div class=\"image-index\">{{imageIndex - 1}}</div>\n </div>\n <div *ngIf=\"multiPreviewImages?.[imageIndex-1]\" class=\"dot\" (click)=\"setIndex(imageIndex-1)\">\n <div class=\"image-index\">{{imageIndex}}</div>\n </div>\n <div class=\"dot selected disabled\">\n <div class=\"image-index\">{{imageIndex + 1}}</div>\n </div>\n <div *ngIf=\"multiPreviewImages?.[imageIndex+1]\" class=\"dot\" (click)=\"setIndex(imageIndex+1)\">\n <div class=\"image-index\">{{imageIndex + 2}}</div>\n </div>\n <div *ngIf=\"multiPreviewImages?.[imageIndex+2]\" class=\"dot\" (click)=\"setIndex(imageIndex+2)\">\n <div class=\"image-index\">{{imageIndex + 3}}</div>\n </div>\n <div *ngIf=\"multiPreviewImages?.[imageIndex+3] && imageIndex <= 1\" class=\"dot\" (click)=\"setIndex(imageIndex+3)\">\n <div class=\"image-index\">{{imageIndex + 4}}</div>\n </div>\n <div *ngIf=\"multiPreviewImages?.[imageIndex+4] && imageIndex === 0\" class=\"dot\" (click)=\"setIndex(imageIndex+4)\">\n <div class=\"image-index\">{{imageIndex + 5}}</div>\n </div>\n <i class=\"fas fa-angle-right right-button\" [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\" (click)=\"next()\"></i>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!metadata.multiple\">\n <div class=\"image-preview\">\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n </div>\n </ng-container>\n </ng-container>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'number-dropdown-input',\n templateUrl: './number-dropdown-input.component.html',\n styleUrls: ['./number-dropdown-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatInputModule,\n NgIf,\n NgFor\n ]\n})\nexport class NumberDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_DROPDOWN, number> implements OnInit {\n\n private dropdownValues: DropdownValue<number | undefined>[] = [];\n filteredDropdownValues: DropdownValue<number | undefined>[] = [];\n\n get currentDropdownValue(): DropdownValue<number | undefined> | undefined {\n return LodashUtilities.cloneDeep(this.dropdownValues ?? [])\n .find(v => v.value === this.propertyValue);\n }\n\n get shouldDisplayCurrentValue(): boolean {\n return !!this.currentDropdownValue && !(!!this.filteredDropdownValues.find(v => v.value === this.currentDropdownValue?.value));\n }\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await runInInjectionContext(this.injector, async () => {\n this.dropdownValues = await this.metadata.dropdownValues(this.entity);\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n });\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || (`${option.value}`).toLowerCase().includes(filter);\n });\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #model=\"ngModel\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (selectionChange)=\"emitChange()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n <mat-option *ngIf=\"!metadata.required(entity)\">-</mat-option>\n <mat-option *ngIf=\"shouldDisplayCurrentValue\" [value]=\"currentDropdownValue?.value\">{{currentDropdownValue?.displayName}}</mat-option>\n <mat-option *ngFor=\"let value of filteredDropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n FormsModule\n ]\n})\nexport class NumberInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER, number> implements OnInit {\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n type=\"number\"\n number\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","\n/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSliderModule } from '@angular/material/slider';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'number-slider-input',\n templateUrl: './number-slider-input.component.html',\n styleUrls: ['./number-slider-input.component.scss'],\n standalone: true,\n imports: [\n MatSliderModule,\n MatInputModule,\n FormsModule\n ]\n})\nexport class NumberSliderInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_SLIDER, number> implements OnInit {\n\n updatePropertyValue(value: number): void {\n this.propertyValue = value;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-slider\n id=\"slider\"\n color=\"primary\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [step]=\"metadata.step\"\n [discrete]=\"true\"\n [displayWith]=\"metadata.formatThumbLabelValue\"\n [showTickMarks]=\"metadata.showTickMarks\"\n [disabled]=\"isReadOnly\"\n (click)=\"model.control.markAsTouched()\"\n>\n <input matSliderThumb\n [disabled]=\"isReadOnly\"\n (valueChange)=\"updatePropertyValue($event)\"\n >\n</mat-slider>\n\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <!-- hidden input is needed so that the slider can be used inside a mat-form-field -->\n <input #model=\"ngModel\" matInput\n style=\"opacity: 0%;\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n \n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { ReferencesManyDecoratorConfig } from './references-many-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { DisplayColumn } from '../../components/table/table-data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class ReferencesManyDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements ReferencesManyDecoratorConfig<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n getReferencedEntities: () => Promise<EntityType[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n getDropdownValues: (referencedEntities: EntityType[]) => DropdownValue<string>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n getEntityForId: (entityId: string, allReferencedEntities: EntityType[]) => EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n addAll: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n addAllButtonLabel: string;\n\n constructor(data: ReferencesManyDecoratorConfig<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.getReferencedEntities = data.getReferencedEntities;\n this.getDropdownValues = data.getDropdownValues;\n this.getEntityForId = data.getEntityForId ?? defaultGetEntityForId;\n this.displayColumns = data.displayColumns;\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.dropdownLabel = getConfigValue(globalConfig.selectLabel, data.dropdownLabel);\n this.addAll = data.addAll ?? false;\n this.addAllButtonLabel = getConfigValue(globalConfig.addAllLabel, data.addAllButtonLabel);\n }\n}\n\n/**\n * The default function to use when trying to get the referenced entity for the given id.\n * @param entityId - The id of the referenced entity.\n * @param allReferencedEntities - All referenced entities.\n * @returns The entity that has the given id.\n */\nexport function defaultGetEntityForId<EntityType extends BaseEntityType<EntityType>>(\n entityId: string,\n allReferencedEntities: EntityType[]\n): EntityType {\n return allReferencedEntities.find(e => e['id' as keyof EntityType] === entityId) as EntityType;\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, Inject, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { ReferencesManyDecoratorConfigInternal } from '../../../../decorators/references-many/references-many-decorator-internal.data';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { SelectionUtilities } from '../../../../utilities/selection.utilities';\nimport { DisplayColumn } from '../../../table/table-data';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'references-many-input',\n templateUrl: './references-many-input.component.html',\n styleUrls: ['./references-many-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n NgIf,\n MatTableModule,\n MatCheckboxModule,\n NgFor,\n MatButtonModule\n ]\n})\nexport class ReferencesManyInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.REFERENCES_MANY, string[]> implements OnInit {\n\n private allReferencedEntities: EntityType[] = [];\n\n private allDropdownValues: DropdownValue<string>[] = [];\n\n dropdownValues: DropdownValue<string>[] = [];\n\n filteredDropdownValues: DropdownValue<string>[] = [];\n\n input: string = '';\n\n referencedEntitiesDataSource: MatTableDataSource<string> = new MatTableDataSource();\n\n displayedColumns!: string[];\n\n selection: SelectionModel<string> = new SelectionModel<string>(true, []);\n\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n get currentDropdownValue(): DropdownValue<string> | undefined {\n return LodashUtilities.cloneDeep(this.dropdownValues ?? [])\n .find(v => v.value === this.input);\n }\n\n get shouldDisplayCurrentValue(): boolean {\n return !!this.currentDropdownValue && !(!!this.filteredDropdownValues.find(v => v.value === this.currentDropdownValue?.value));\n }\n\n constructor(\n private readonly injector: EnvironmentInjector,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.metadata = new ReferencesManyDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n const givenDisplayColumns: string[] = this.metadata.displayColumns.map((v) => v.displayName);\n if (givenDisplayColumns.find(s => s === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved.\n Please choose a different name.`\n );\n }\n this.displayedColumns = this.isReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.referencedEntitiesDataSource.data = this.propertyValue ?? [];\n\n await runInInjectionContext(this.injector, async () => {\n this.allReferencedEntities = await this.metadata.getReferencedEntities() as EntityType[];\n });\n\n this.allDropdownValues = this.metadata.getDropdownValues(LodashUtilities.cloneDeep(this.allReferencedEntities));\n this.dropdownValues = LodashUtilities.cloneDeep(this.allDropdownValues);\n for (const value of this.referencedEntitiesDataSource.data) {\n const foundValue: DropdownValue<string> | undefined = this.dropdownValues.find(v => v.value === value);\n if (foundValue) {\n this.dropdownValues.splice(this.dropdownValues.indexOf(foundValue), 1);\n }\n }\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || option.value.toLowerCase().includes(filter);\n });\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entityId - The id of the entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entityId: string, displayColumn: DisplayColumn<EntityType>): unknown {\n return runInInjectionContext(this.injector, () => {\n // eslint-disable-next-line typescript/no-unsafe-argument\n return displayColumn.value(this.metadata.getEntityForId(entityId, this.allReferencedEntities));\n });\n }\n\n async add(): Promise<void> {\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(LodashUtilities.cloneDeep(this.input));\n const foundDropdownValue: DropdownValue<string> = this.dropdownValues.find(v => v.value === this.input) as DropdownValue<string>;\n this.dropdownValues.splice(this.dropdownValues.indexOf(foundDropdownValue), 1);\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n this.referencedEntitiesDataSource.data = this.propertyValue;\n this.input = '';\n this.emitChange();\n }\n\n addAll(): void {\n this.propertyValue = this.allDropdownValues.map(dv => dv.value);\n if (!this.propertyValue.length) {\n this.propertyValue = undefined;\n }\n this.dropdownValues = [];\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n this.referencedEntitiesDataSource.data = this.propertyValue ?? [];\n this.input = '';\n this.emitChange();\n }\n\n remove(): void {\n this.selection.selected.forEach(s => {\n this.propertyValue?.splice(this.propertyValue.indexOf(s), 1);\n const foundDropdownValue: DropdownValue<string> | undefined = this.allDropdownValues.find(v => v.value === s);\n if (foundDropdownValue) {\n this.dropdownValues.push(foundDropdownValue);\n }\n });\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n if (!this.propertyValue?.length) {\n this.propertyValue = undefined;\n }\n this.referencedEntitiesDataSource.data = this.propertyValue ?? [];\n this.selection.clear();\n this.input = '';\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n\n <mat-form-field>\n <mat-label>{{metadata.dropdownLabel}}</mat-label>\n <mat-select #inputModel=\"ngModel\" [name]=\"name + 'input'\" [disabled]=\"isReadOnly\" [(ngModel)]=\"input\" (opened)=\"selectSearchInput.focus()\">\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n <mat-option>-</mat-option>\n <mat-option *ngIf=\"shouldDisplayCurrentValue\" [value]=\"currentDropdownValue?.value\">{{currentDropdownValue?.displayName}}</mat-option>\n <mat-option *ngFor=\"let value of filteredDropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(inputModel)}}</mat-error>\n </mat-form-field>\n\n <button *ngIf=\"metadata.addAll\" type=\"button\" style=\"margin-left: 20px;\" mat-raised-button [disabled]=\"!dropdownValues.length || isReadOnly\" (click)=\"addAll()\">\n {{metadata.addAllButtonLabel}}\n </button>\n\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button [disabled]=\"!input\" (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button [disabled]=\"!selection.selected.length\" (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n\n <mat-table [dataSource]=\"referencedEntitiesDataSource\">\n <!-- select Column -->\n <ng-container *ngIf=\"!isReadOnly\" matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [disabled]=\"!referencedEntitiesDataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, referencedEntitiesDataSource)\"\n [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, referencedEntitiesDataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(selection, referencedEntitiesDataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n <ng-container *ngFor=\"let dCol of metadata.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entityId\" class=\"entity\">\n {{getDisplayColumnValue(entityId, dCol)}}\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { IncludedInValidatorDirective } from '../../../../directives/included-in.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-autocomplete-input',\n templateUrl: './string-autocomplete-input.component.html',\n styleUrls: ['./string-autocomplete-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatAutocompleteModule,\n FormsModule,\n IncludedInValidatorDirective,\n NgIf,\n NgFor\n ]\n})\nexport class StringAutocompleteInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_AUTOCOMPLETE, string> implements OnInit {\n\n autocompleteStrings: string[] = [];\n filteredAutocompleteStrings!: string[];\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await runInInjectionContext(this.injector, async () => {\n this.autocompleteStrings = await this.metadata.autocompleteValues(this.entity);\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n });\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input?: string): void {\n const searchString: string = input ?? '';\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(searchString.toLowerCase()));\n if (!this.filteredAutocompleteStrings.length) {\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field *ngIf=\"autocompleteStrings.length\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matAutocomplete]=\"auto\"\n [required]=\"metadata.required(entity)\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [disabled]=\"isReadOnly\"\n [includedIn]=\"metadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"propertyValue\"\n (keyup)=\"filterAutocompleteStrings(propertyValue)\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let value of filteredAutocompleteStrings\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-dropdown-input',\n templateUrl: './string-dropdown-input.component.html',\n styleUrls: ['./string-dropdown-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n NgIf,\n NgFor\n ]\n})\nexport class StringDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_DROPDOWN, string> implements OnInit {\n\n private dropdownValues: DropdownValue<string | undefined>[] = [];\n filteredDropdownValues: DropdownValue<string | undefined>[] = [];\n\n get currentDropdownValue(): DropdownValue<string | undefined> | undefined {\n return LodashUtilities.cloneDeep(this.dropdownValues ?? [])\n .find(v => v.value === this.propertyValue);\n }\n\n get shouldDisplayCurrentValue(): boolean {\n return !!this.currentDropdownValue && !(!!this.filteredDropdownValues.find(v => v.value === this.currentDropdownValue?.value));\n }\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await runInInjectionContext(this.injector, async () => {\n this.dropdownValues = await this.metadata.dropdownValues(this.entity);\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n });\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || option.value?.toLowerCase().includes(filter);\n });\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #model=\"ngModel\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (selectionChange)=\"emitChange()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n <mat-option *ngIf=\"!metadata.required(entity)\">-</mat-option>\n <mat-option *ngIf=\"shouldDisplayCurrentValue\" [value]=\"currentDropdownValue?.value\">{{currentDropdownValue?.displayName}}</mat-option>\n <mat-option *ngFor=\"let value of filteredDropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-input',\n templateUrl: './string-input.component.html',\n styleUrls: ['./string-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class StringInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING, string> implements OnInit {\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n/**\n * A directive that validates if a given password matches the control value.\n */\n@Directive({\n selector: '[passwordMatch]',\n providers: [{ provide: NG_VALIDATORS, useExisting: PasswordMatchValidatorDirective, multi: true }],\n standalone: true\n})\nexport class PasswordMatchValidatorDirective implements Validator {\n\n /**\n * The password that the control value should be matched against.\n */\n @Input()\n passwordMatch?: string;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n validate(control: AbstractControl): ValidationErrors | null {\n // eslint-disable-next-line typescript/no-unsafe-assignment\n return this.passwordMatch == control.value ? null : { passwordMatch: { value: control.value } };\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgIf } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { PasswordMatchValidatorDirective } from '../../../../directives/password-match.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\nexport enum PasswordStrength {\n WEAK = 'weak',\n MEDIUM = 'medium',\n STRONG = 'strong'\n}\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-password-input',\n templateUrl: './string-password-input.component.html',\n styleUrls: ['./string-password-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n NgIf,\n MatButtonModule,\n PasswordMatchValidatorDirective\n ]\n})\nexport class StringPasswordInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_PASSWORD, string> implements OnInit {\n\n hide: boolean = true;\n hideConfirm: boolean = true;\n\n confirmRequired: boolean = false;\n\n passwordStrength?: PasswordStrength;\n\n PasswordStrength: typeof PasswordStrength = PasswordStrength;\n\n get confirmPassword(): string | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.CONFIRM_PASSWORD_KEY, this.entity, this.key) as string | undefined;\n }\n\n set confirmPassword(value: string | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.CONFIRM_PASSWORD_KEY, value, this.entity, this.key);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.confirmRequired = Boolean(this.propertyValue);\n this.confirmPassword = LodashUtilities.cloneDeep(this.propertyValue);\n }\n\n passwordInput(): void {\n this.confirmRequired = Boolean(this.propertyValue);\n this.setPasswordStrength();\n this.emitChange();\n }\n\n private setPasswordStrength(): void {\n if (this.isPasswordStrong()) {\n this.passwordStrength = PasswordStrength.STRONG;\n return;\n }\n if (this.isPasswordMedium()) {\n this.passwordStrength = PasswordStrength.MEDIUM;\n return;\n }\n if (this.isPasswordWeak()) {\n this.passwordStrength = PasswordStrength.WEAK;\n return;\n }\n this.passwordStrength = undefined;\n }\n\n // long AND complex\n private isPasswordStrong(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return this.propertyValue?.length >= 15 && this.isPasswordComplex();\n }\n\n // long OR complex\n private isPasswordMedium(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return this.propertyValue?.length >= 15 || this.isPasswordComplex();\n }\n\n // exists\n private isPasswordWeak(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return true;\n }\n\n private isPasswordComplex(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return /[A-Z]/g.test(this.propertyValue)\n && /[a-z]/g.test(this.propertyValue)\n && /[0-9]/g.test(this.propertyValue)\n && /[!@#$%^&*(),.?\":{}|<>]/.test(this.propertyValue);\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"password-row\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"passwordInput()\"\n >\n <button type=\"button\" mat-icon-button matSuffix (click)=\"hide = !hide\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <i *ngIf=\"hide\" class=\"fas fa-eye-slash\"></i>\n <i *ngIf=\"!hide\" class=\"fas fa-eye\"></i>\n </div>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n <div *ngIf=\"passwordStrength\" class=\"password-strength-indicator\"\n [class.green]=\"passwordStrength === PasswordStrength.STRONG\"\n [class.yellow]=\"passwordStrength === PasswordStrength.MEDIUM\"\n [class.red]=\"passwordStrength === PasswordStrength.WEAK\"\n >\n </div>\n </mat-form-field>\n <mat-form-field *ngIf=\"metadata.needsConfirmation\">\n <mat-label>{{metadata.confirmationDisplayName}}</mat-label>\n <input\n #confirmModel=\"ngModel\"\n matInput\n [type]=\"hideConfirm ? 'password' : 'text'\"\n [name]=\"name + 'confirmPassword'\"\n [required]=\"confirmRequired\"\n [disabled]=\"isReadOnly\"\n [passwordMatch]=\"propertyValue\"\n [(ngModel)]=\"confirmPassword\"\n (ngModelChange)=\"passwordInput()\"\n >\n <button type=\"button\" mat-icon-button matSuffix (click)=\"hideConfirm = !hideConfirm\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <i *ngIf=\"hideConfirm\" class=\"fas fa-eye-slash\"></i>\n <!-- eslint-disable-next-line angular/cyclomatic-complexity -->\n <i *ngIf=\"!hideConfirm\" class=\"fas fa-eye\"></i>\n </div>\n </button>\n <mat-error>{{getValidationErrorMessage(confirmModel)}}</mat-error>\n </mat-form-field>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-textbox-input',\n templateUrl: './string-textbox-input.component.html',\n styleUrls: ['./string-textbox-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class StringTextboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_TEXTBOX, string> implements OnInit {\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n #model=\"ngModel\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/**\n * Checks if the given function is async or not.\n * @param originalFunction - The function to check.\n * @returns True when the constructor name is 'AsyncFunction' and false otherwise.\n */\nexport function isAsyncFunction(originalFunction: Function): boolean {\n return originalFunction.constructor.name === 'AsyncFunction';\n}","import { Inject } from '@angular/core';\n\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { defaultFalse } from '../../../functions/default-false.function';\nimport { defaultTrue } from '../../../functions/default-true.function';\nimport { getConfigValue } from '../../../functions/get-config-value.function';\nimport { isAsyncFunction } from '../../../functions/is-async-function.function';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditAction, EditData } from '../table-data';\n\n/**\n * The internal edit action.\n * Sets default values.\n */\nexport class EditActionInternal<EntityType extends BaseEntityType<EntityType>> implements EditAction<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n action: (entity: EntityType, entityPriorChanges: EntityType) => Promise<unknown>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n enabled: ((e: EntityType) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmDialog: ((e: EntityType) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDialogData: ConfirmDialogData;\n\n constructor(\n data: EditAction<EntityType>,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.displayName = data.displayName;\n this.action = this.functionToAsync(data.action);\n this.enabled = data.enabled ?? defaultTrue;\n this.requireConfirmDialog = data.requireConfirmDialog ?? defaultFalse;\n this.confirmDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.confirmDialogData)\n .withDefault('text', globalConfig.confirmBaseActionText)\n .getResult();\n }\n\n\n private functionToAsync(originalFunction: ((e: EntityType, ePriorChanges: EntityType) => unknown) | ((e: EntityType, ePriorChanges: EntityType) => Promise<unknown>)): (e: EntityType, ePriorChanges: EntityType) => Promise<unknown> {\n if (isAsyncFunction(originalFunction)) {\n return originalFunction as (e: EntityType) => Promise<unknown>;\n }\n\n /* istanbul ignore next */\n return (e: EntityType, ePriorChanges: EntityType) => new Promise<unknown>((resolve, reject) => {\n try {\n resolve(originalFunction(e, ePriorChanges));\n }\n catch (error) {\n reject(error);\n }\n });\n }\n}\n\n/**\n * The internal EditData. Requires all default values the user can leave out.\n */\nexport class EditDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: (entity: EntityType) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteRequiresConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editRequiresConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDeleteDialogData: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmEditDialogData: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n actionsLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n actions: EditActionInternal<EntityType>[];\n\n constructor(\n title: (entity: EntityType) => string,\n confirmButtonLabel: string,\n deleteButtonLabel: string,\n cancelButtonLabel: string,\n deleteRequiresConfirmDialog: boolean,\n editRequiresConfirmDialog: boolean,\n unsavedChangesRequireConfirmDialog: boolean,\n confirmDeleteDialogData: ConfirmDialogData,\n confirmEditDialogData: ConfirmDialogData,\n confirmUnsavedChangesDialogData: ConfirmDialogData,\n actionsLabel: string,\n actions: EditAction<EntityType>[],\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n globalConfig: NgxGlobalDefaultValues\n ) {\n this.title = title;\n this.confirmButtonLabel = confirmButtonLabel;\n this.deleteButtonLabel = deleteButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.deleteRequiresConfirmDialog = deleteRequiresConfirmDialog;\n this.editRequiresConfirmDialog = editRequiresConfirmDialog;\n this.unsavedChangesRequireConfirmDialog = unsavedChangesRequireConfirmDialog;\n this.confirmDeleteDialogData = confirmDeleteDialogData;\n this.confirmEditDialogData = confirmEditDialogData;\n this.confirmUnsavedChangesDialogData = confirmUnsavedChangesDialogData;\n this.actionsLabel = actionsLabel;\n this.actions = actions.map(a => new EditActionInternal(a, globalConfig));\n }\n}\n\n/**\n * The Builder for the EditData. Sets default values.\n */\nexport class EditDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditDataInternal<EntityType>, EditData<EntityType>> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: EditData<EntityType>) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: EditData<EntityType>): EditDataInternal<EntityType> {\n const confirmEditDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmEditDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n\n const confirmDeleteDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmDeleteDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('type', 'delete')\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmUnsavedChangesDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n\n return new EditDataInternal(\n getConfigValue(this.globalConfig.editTitle, data?.title),\n getConfigValue(this.globalConfig.saveLabel, data?.confirmButtonLabel),\n getConfigValue(this.globalConfig.deleteLabel, data?.deleteButtonLabel),\n getConfigValue(this.globalConfig.cancelLabel, data?.cancelButtonLabel),\n data?.deleteRequiresConfirmDialog ?? true,\n data?.editRequiresConfirmDialog ?? false,\n data?.unsavedChangesRequireConfirmDialog ?? true,\n confirmDeleteDialogData,\n confirmEditDialogData,\n confirmUnsavedChangesDialogData,\n getConfigValue(this.globalConfig.actionsLabel, data?.actionsLabel),\n data?.actions ?? [],\n this.globalConfig\n );\n }\n}","import { DynamicStyleClasses } from '../components/table/table-data';\n\n/**\n * The default function to retrieve dynamic style classes.\n * Returns an empty array.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const defaultDynamicStyleClasses: DynamicStyleClasses<any> = () => [];","import { Inject } from '@angular/core';\n\nimport { CreateDataBuilder, CreateDataInternal } from './create-dialog/create-data.builder';\nimport { EditDataBuilder, EditDataInternal } from './edit-dialog/edit-data.builder';\nimport { BaseData, BaseTableAction, DisplayColumn, DynamicStyleClasses, MultiSelectAction, TableData } from './table-data';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType, EntityClassNewable, EntityServiceClassNewable } from '../../classes/entity.model';\nimport { defaultFalse } from '../../functions/default-false.function';\nimport { defaultDynamicStyleClasses } from '../../functions/default-style-classes.function';\nimport { defaultTrue } from '../../functions/default-true.function';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { isAsyncFunction } from '../../functions/is-async-function.function';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\n\n/**\n * The internal BaseTableAction. Sets default values.\n */\nexport class BaseTableActionInternal implements BaseTableAction {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'default' = 'default';\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n action: () => Promise<unknown>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n enabled: (() => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmDialog: (() => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDialogData: ConfirmDialogDataInternal;\n\n constructor(\n data: BaseTableAction,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.displayName = data.displayName;\n this.action = this.functionToAsync(data.action);\n this.enabled = data.enabled ?? defaultTrue;\n this.requireConfirmDialog = data.requireConfirmDialog ?? defaultFalse;\n this.confirmDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.confirmDialogData)\n .withDefault('text', globalConfig.confirmBaseActionText)\n .getResult();\n }\n\n private functionToAsync(originalFunction: (() => unknown) | (() => Promise<unknown>)): () => Promise<unknown> {\n if (isAsyncFunction(originalFunction)) {\n return originalFunction as () => Promise<unknown>;\n }\n\n /* istanbul ignore next */\n return () => new Promise<unknown>((resolve, reject) => {\n try {\n resolve(originalFunction());\n }\n catch (error) {\n reject(error);\n }\n });\n }\n}\n\n/**\n * The internal BaseTableAction. Sets default values.\n */\nexport class MultiSelectActionInternal<EntityType extends BaseEntityType<EntityType>> implements MultiSelectAction<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'multi-select' = 'multi-select';\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n action: (selectedEntities: EntityType[]) => Promise<unknown>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n enabled: ((selectedEntities: EntityType[]) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmDialog: ((selectedEntities: EntityType[]) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDialogData: ConfirmDialogDataInternal;\n\n constructor(\n data: MultiSelectAction<EntityType>,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.displayName = data.displayName;\n this.action = this.functionToAsync(data.action);\n this.enabled = data.enabled ?? ((entities: EntityType[]) => !!entities.length);\n this.requireConfirmDialog = data.requireConfirmDialog ?? defaultFalse;\n this.confirmDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.confirmDialogData)\n .withDefault('text', globalConfig.confirmBaseActionText)\n .getResult();\n }\n\n\n private functionToAsync(originalFunction: ((selectedEntities: EntityType[]) => unknown) | ((selectedEntities: EntityType[]) => Promise<unknown>)): (selectedEntities: EntityType[]) => Promise<unknown> {\n if (isAsyncFunction(originalFunction)) {\n return originalFunction as (selectedEntities: EntityType[]) => Promise<unknown>;\n }\n\n /* istanbul ignore next */\n return (selectedEntities: EntityType[]) => new Promise<unknown>((resolve, reject) => {\n try {\n resolve(originalFunction(selectedEntities));\n }\n catch (error) {\n reject(error);\n }\n });\n }\n}\n\n/**\n * The Internal Table Action. Sets default values.\n */\nexport type TableActionInternal<EntityType extends BaseEntityType<EntityType>> =\n BaseTableActionInternal | MultiSelectActionInternal<EntityType>;\n\n/**\n * The internal TableData. Requires all default values the user can leave out.\n */\nexport class TableDataInternal<EntityType extends BaseEntityType<EntityType>> implements TableData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n baseData: BaseDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createData: CreateDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editData: EditDataInternal<EntityType>;\n\n constructor(\n baseData: BaseDataInternal<EntityType>,\n createData: CreateDataInternal,\n editData: EditDataInternal<EntityType>\n ) {\n this.baseData = baseData;\n this.createData = createData;\n this.editData = editData;\n }\n}\n\n/**\n * The Builder for the table BaseData. Sets default values.\n */\nexport class BaseDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<BaseDataInternal<EntityType>, BaseData<EntityType>> {\n\n constructor(data: BaseData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: BaseData<EntityType>): BaseDataInternal<EntityType> {\n return new BaseDataInternal<EntityType>(data, this.globalConfig);\n }\n}\n\n/**\n * The internal TableData. Requires all default values the user can leave out.\n */\nexport class BaseDataInternal<EntityType extends BaseEntityType<EntityType>> implements BaseData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: EntityServiceClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n searchLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n defaultEdit: 'dialog' | 'page';\n // eslint-disable-next-line jsdoc/require-jsdoc\n defaultCreate: 'dialog' | 'page';\n // eslint-disable-next-line jsdoc/require-jsdoc\n searchString: (entity: EntityType) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowCreate: () => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowRead: (entity?: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowUpdate: (entity?: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDelete: (entity?: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tableActions: TableActionInternal<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n tableActionsLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayLoadingSpinner: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowJsonImport: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n importActionData: Omit<BaseTableActionInternal, 'action'>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dynamicRowStyleClasses: DynamicStyleClasses<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass?: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n edit?: (entity: EntityType) => unknown;\n // eslint-disable-next-line jsdoc/require-jsdoc\n create?: (entity: EntityType) => unknown;\n\n constructor(\n data: BaseData<EntityType>,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.title = data.title;\n this.displayColumns = data.displayColumns;\n this.EntityServiceClass = data.EntityServiceClass;\n this.EntityClass = data.EntityClass;\n this.searchLabel = getConfigValue(globalConfig.searchLabel, data.searchLabel);\n this.createButtonLabel = getConfigValue(globalConfig.createLabel, data.createButtonLabel);\n this.defaultEdit = getConfigValue(globalConfig.defaultEditMethod, data.defaultEdit);\n this.defaultCreate = getConfigValue(globalConfig.defaultCreateMethod, data.defaultCreate);\n this.searchString = data.searchString ?? defaultSearchFunction;\n if (data.tableActions) {\n this.tableActions = data.tableActions.map(tA => {\n\n return tA.type === 'default' ? new BaseTableActionInternal(tA, globalConfig) : new MultiSelectActionInternal(tA, globalConfig);\n });\n }\n else {\n this.tableActions = [];\n }\n this.tableActionsLabel = getConfigValue(globalConfig.actionsLabel, data.tableActionsLabel);\n this.displayLoadingSpinner = data.displayLoadingSpinner ?? true;\n this.allowJsonImport = data.allowJsonImport ?? false;\n this.importActionData = this.buildImportActionData(data.importActionData);\n this.dynamicRowStyleClasses = data.dynamicRowStyleClasses ?? defaultDynamicStyleClasses;\n this.edit = data.edit;\n this.create = data.create;\n this.allowCreate = this.allowDataToFunction(data.allowCreate);\n this.allowRead = this.allowDataToFunction(data.allowRead);\n this.allowUpdate = this.allowDataToFunction(data.allowUpdate);\n this.allowDelete = this.allowDataToFunction(data.allowDelete);\n }\n\n private buildImportActionData(\n importActionData?: Omit<BaseTableAction, 'action' | 'requireConfirmDialog' | 'type'>\n ): Omit<BaseTableActionInternal, 'action'> {\n importActionData = importActionData ?? {\n displayName: 'Import (JSON)',\n confirmDialogData: new ConfirmDialogDataBuilder(this.globalConfig)\n .withDefault('text', this.globalConfig.confirmImportJsonText)\n .getResult()\n };\n /* istanbul ignore next */\n const data: Omit<BaseTableActionInternal, 'action'> = {\n ...importActionData,\n enabled: importActionData.enabled ?? defaultTrue,\n requireConfirmDialog: defaultFalse,\n confirmDialogData: new ConfirmDialogDataBuilder(this.globalConfig, importActionData.confirmDialogData).getResult(),\n type: 'default'\n };\n return data;\n }\n\n private allowDataToFunction(value?: boolean | ((entity?: EntityType) => boolean)): ((entity?: EntityType) => boolean) {\n if (value == null) {\n return defaultTrue;\n }\n if (typeof value == 'boolean') {\n if (value) {\n return defaultTrue;\n }\n return defaultFalse;\n }\n return value;\n }\n}\n\n/**\n * The Builder for the complete TableData. Sets default values and validates user input.\n */\nexport class TableDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<TableDataInternal<EntityType>, TableData<EntityType>> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data: TableData<EntityType>) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: TableData<EntityType>): TableDataInternal<EntityType> {\n\n const createDialogData: CreateDataInternal = new CreateDataBuilder(this.globalConfig, data.createData).getResult();\n const editDialogData: EditDataInternal<EntityType> = new EditDataBuilder(this.globalConfig, data.editData).getResult();\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.baseData, this.globalConfig).getResult();\n return new TableDataInternal<EntityType>(\n baseData,\n createDialogData,\n editDialogData\n );\n }\n\n\n protected override validateInput(data: TableData<EntityType>): void {\n if (data.baseData.tableActions?.length && data.baseData.displayColumns.find(dp => dp.displayName === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved for the multi-select action functionality.\n Please choose a different name.`\n );\n }\n if (\n !data.baseData.EntityClass\n && (\n data.baseData.allowCreate !== false\n || data.baseData.allowRead !== false\n || data.baseData.allowUpdate !== false\n || data.baseData.allowDelete !== false\n )\n ) {\n throw new Error(\n `Missing required Input data \"EntityClass\".\n You can only omit this value if you can neither create, read, update or delete entities.`\n );\n }\n if (data.editData && data.baseData.defaultEdit == 'page') {\n throw new Error(\n `The configured edit data can't be used, as the entity gets edited on its own page.\n You need to provide values for the \"NGX_EDIT_DATA\", \"NGX_EDIT_DATA_ENTITY\" and \"NGX_EDIT_DATA_ENTITY_SERVICE\" injection keys\n on the route where the edit page is used.`\n );\n }\n }\n}\n\n/**\n * The default search function taken from googles mat table.\n * This will be used if no custom search function is provided by the configuration.\n *\n * It generates a string from an entity which is then used to compare it to the search input.\n * @param entity - An entity that is in the search.\n * @returns The generated string of the given entity used for comparison with the search input.\n */\nexport function defaultSearchFunction<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): string {\n const searchString: string = Object.keys(entity)\n .reduce((currentTerm: string, key: string) => {\n return `${currentTerm}${(entity as Record<string, unknown>)[key]}◬`;\n }, '')\n .toLowerCase();\n return searchString;\n}","import { inject } from '@angular/core';\n\nimport { HasManyDecoratorConfig } from './has-many-decorator.data';\nimport { BaseEntityType, EntityServiceClassNewable } from '../../classes/entity.model';\nimport { BaseDataBuilder, BaseDataInternal, TableDataBuilder, TableDataInternal } from '../../components/table/table-data.builder';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal HasManyDecoratorConfig. Sets default values.\n */\nexport class HasManyDecoratorConfigInternal<\n EntityType extends BaseEntityType<EntityType>,\n RelatedBaseEntityType extends BaseEntityType<RelatedBaseEntityType>\n> extends PropertyDecoratorConfigInternal<EntityType> implements HasManyDecoratorConfig<EntityType, RelatedBaseEntityType> {\n\n override omitForCreate: true;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tableData: TableDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n RelatedEntityServiceClass: EntityServiceClassNewable<RelatedBaseEntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createBaseUrl: (baseEntity: RelatedBaseEntityType, metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n readBaseUrl: (baseEntity: RelatedBaseEntityType, metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>) => string;\n\n constructor(data: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.tableData.baseData, globalConfig)\n .withDefault('title', data.displayName)\n .getResult();\n this.tableData = new TableDataBuilder(globalConfig, data.tableData)\n .withDefault('baseData', baseData)\n .getResult();\n this.RelatedEntityServiceClass = data.RelatedEntityServiceClass;\n this.createBaseUrl = data.createBaseUrl ?? defaultCreateBaseUrl as (\n baseEntity: RelatedBaseEntityType,\n metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>\n ) => string;\n this.readBaseUrl = data.readBaseUrl ?? defaultCreateBaseUrl as (\n baseEntity: RelatedBaseEntityType,\n metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>\n ) => string;\n\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.omitForCreate = true;\n }\n}\n\n/* istanbul ignore next */\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction defaultCreateBaseUrl<EntityType extends BaseEntityType<EntityType>, RelatedBaseEntityType extends BaseEntityType<EntityType>>(\n baseEntity: RelatedBaseEntityType,\n metadata: HasManyDecoratorConfigInternal<EntityType, RelatedBaseEntityType>\n): string {\n\n const baseEntityService: EntityService<RelatedBaseEntityType> = inject<EntityService<RelatedBaseEntityType>>(metadata.RelatedEntityServiceClass);\n const entityService: EntityService<EntityType> = inject<EntityService<EntityType>>(metadata.tableData.baseData.EntityServiceClass);\n const baseUrlSegments: string[] = entityService.baseUrl.split('/');\n return `${baseEntityService.baseUrl}/${baseEntity[baseEntityService.idKey]}/${baseUrlSegments[baseUrlSegments.length - 1]}`;\n}","import { InjectionToken } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\n/**\n * Provider for the default getValidationErrorMessage.\n */\nexport const NGX_GET_VALIDATION_ERROR_MESSAGE: InjectionToken<() => string> = new InjectionToken(\n 'Provider for the default getValidationErrorMessage.',\n {\n providedIn: 'root',\n factory: () => getValidationErrorMessage\n }\n);\n\n/**\n * Generates a default error message for most validation errors.\n * @param model - The ngModel to get the error from.\n * @returns The Validation Error Message to display.\n */\nfunction getValidationErrorMessage(model: NgModel): string {\n if (model.hasError('matDatepickerParse')) {\n return 'not a valid date';\n }\n else if (model.hasError('email')) {\n return 'not a valid email';\n }\n else if (model.hasError('minlength')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be at least ${model.getError('minlength').requiredLength} characters long`;\n }\n else if (model.hasError('maxlength')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be at most ${model.getError('maxlength').requiredLength} characters long`;\n }\n else if (model.hasError('min')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be equal or bigger than ${model.getError('min').min}`;\n }\n else if (model.hasError('max')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be equal or smaller than ${model.getError('max').max}`;\n }\n else if (model.hasError('passwordMatch')) {\n return 'Passwords need to match!';\n }\n else if (model.hasError('required')) {\n return 'required';\n }\n else if (model.hasError('includedIn')) {\n return 'Needs to be one of the provided values';\n }\n // eslint-disable-next-line typescript/no-unsafe-member-access\n else if (model.hasError('pattern') && model.getError('pattern').requiredPattern === '^true$') {\n return 'needs to be selected';\n }\n else {\n return 'invalid input';\n }\n}","import { Component, ComponentRef, Input, OnInit, Type, ViewContainerRef } from '@angular/core';\n\nimport { NgxMatEntityBaseDisplayColumnValueComponent } from './base-display-column-value.component';\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The component that displays the custom display column value.\n */\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'display-column-value',\n templateUrl: './display-column-value.component.html',\n styleUrls: ['./display-column-value.component.scss'],\n standalone: true,\n imports: []\n})\nexport class DisplayColumnValueComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n /**\n * The entity for which the column should be displayed.\n */\n @Input()\n entity!: EntityType;\n\n /**\n * The class of the component that should be used inside the custom display column.\n */\n @Input()\n ComponentClass!: Type<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;\n\n /**\n * The actual component that is used inside the custom display column.\n */\n component!: ComponentRef<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;\n\n constructor(private readonly viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n if (this.ComponentClass == null) {\n throw new Error('No ComponentClass has been provided.');\n }\n if (this.entity == null) {\n throw new Error('No entity value has been provided.');\n }\n this.component = this.viewContainerRef.createComponent(this.ComponentClass);\n this.component.instance.entity = this.entity;\n (this.component.location.nativeElement as HTMLElement).setAttribute('style', 'width: 100%');\n }\n}","","import { Directive, ElementRef, HostListener, Input, OnDestroy, Renderer2 } from '@angular/core';\n\n/**\n * The type of a global listener. Is a function that simply unsubscribes the listener.\n */\ntype Listener = () => void;\n\n/**\n * A directive that displays a tooltip on hover.\n */\n@Directive({\n selector: '[tooltip]',\n standalone: true\n})\nexport class TooltipDirective implements OnDestroy {\n\n /**\n * The content to display inside the tooltip.\n */\n @Input()\n tooltip!: string;\n\n private tooltipElement?: HTMLElement;\n\n private closeListeners: Listener[] = [];\n\n private openedByClick: boolean = false;\n\n constructor(\n private readonly el: ElementRef,\n private readonly renderer: Renderer2\n ) {}\n\n /**\n * Toggles the tooltip.\n * @param event - The click event, is used to stop the propagation that would trigger the global click listener.\n */\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n event.stopPropagation();\n if (!this.tooltipElement) {\n this.showTooltip();\n this.registerCloseListeners();\n this.openedByClick = true;\n return;\n }\n if (!this.openedByClick) {\n this.openedByClick = true;\n return;\n }\n this.hideTooltip();\n this.removeCloseListeners();\n }\n\n /**\n * Shows the tooltip.\n */\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (!this.tooltipElement) {\n this.showTooltip();\n this.registerCloseListeners();\n return;\n }\n if (this.openedByClick) {\n return;\n }\n }\n\n /**\n * Hides the tooltip.\n */\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.openedByClick) {\n return;\n }\n this.hideTooltip();\n this.removeCloseListeners();\n }\n\n /**\n * Hides the tooltip.\n */\n @HostListener('window:resize')\n onResize(): void {\n this.hideTooltip();\n this.removeCloseListeners();\n }\n\n private showTooltip(): void {\n if (!this.tooltipElement) {\n this.tooltipElement = this.renderer.createElement('div') as HTMLElement;\n this.tooltipElement.innerHTML = this.tooltip;\n\n this.renderer.setStyle(this.tooltipElement, 'z-index', '1000');\n this.renderer.setStyle(this.tooltipElement, 'position', 'absolute');\n this.renderer.setStyle(this.tooltipElement, 'padding', '4px 8px 4px 8px');\n this.renderer.setStyle(this.tooltipElement, 'border-radius', '5px');\n this.renderer.setStyle(this.tooltipElement, 'background-color', '#616161');\n this.renderer.setStyle(this.tooltipElement, 'color', 'white');\n this.renderer.setStyle(this.tooltipElement, 'max-height', '30vh');\n this.renderer.setStyle(this.tooltipElement, 'overflow', 'scroll');\n this.renderer.appendChild(this.el.nativeElement, this.tooltipElement);\n\n const marginBottom: number = this.tooltipElement.clientHeight + (this.el.nativeElement as HTMLElement).clientHeight + 15;\n this.renderer.setStyle(this.tooltipElement, 'margin-bottom', `${marginBottom}px`);\n }\n }\n\n private registerCloseListeners(): void {\n setTimeout(() => {\n this.closeListeners.push(\n this.getCloseListener('click'),\n this.getCloseListener('touchmove'),\n this.getCloseListener('resize')\n );\n }, 100);\n }\n\n private getCloseListener(event: string): Listener {\n return this.renderer.listen('document', event, () => {\n this.hideTooltip();\n this.removeCloseListeners();\n });\n }\n\n private hideTooltip(): void {\n if (this.tooltipElement) {\n this.renderer.removeChild(this.el.nativeElement, this.tooltipElement);\n this.tooltipElement = undefined;\n }\n }\n\n private removeCloseListeners(): void {\n for (const listener of this.closeListeners) {\n listener();\n }\n this.closeListeners = [];\n this.openedByClick = false;\n }\n\n ngOnDestroy(): void {\n this.removeCloseListeners();\n }\n}","import { Component, Input } from '@angular/core';\n\nimport { TooltipDirective } from '../../directives/tooltip.directive';\n\n/**\n * A component that displays an info-symbol and a tooltip when it is hovered/clicked.\n */\n@Component({\n selector: 'ngx-mat-entity-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n standalone: true,\n imports: [\n TooltipDirective\n ]\n})\nexport class TooltipComponent {\n /**\n * What to display inside the tooltip.\n */\n @Input()\n tooltipContent!: string;\n}","<div class=\"info\" [tooltip]=\"tooltipContent\">\n <i class=\"fas fa-info\"></i>\n</div>","import { SelectionModel } from '@angular/cdk/collections';\nimport { NgFor, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, Input, OnInit, Output, TemplateRef, ViewChild, inject, runInInjectionContext } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { ArrayDateInputComponent } from './array/array-date-input/array-date-input.component';\nimport { ArrayDateRangeInputComponent } from './array/array-date-range-input/array-date-range-input.component';\nimport { ArrayDateTimeInputComponent } from './array/array-date-time-input/array-date-time-input.component';\nimport { ArrayStringAutocompleteChipsComponent } from './array/array-string-autocomplete-chips/array-string-autocomplete-chips.component';\nimport { ArrayStringChipsInputComponent } from './array/array-string-chips-input/array-string-chips-input.component';\nimport { BooleanCheckboxInputComponent } from './boolean/boolean-checkbox-input/boolean-checkbox-input.component';\nimport { BooleanDropdownInputComponent } from './boolean/boolean-dropdown-input/boolean-dropdown-input.component';\nimport { BooleanToggleInputComponent } from './boolean/boolean-toggle-input/boolean-toggle-input.component';\nimport { CustomInputComponent } from './custom/custom.component';\nimport { DateInputComponent } from './date/date-input/date-input.component';\nimport { DateRangeInputComponent } from './date/date-range-input/date-range-input.component';\nimport { DateTimeInputComponent } from './date/date-time-input/date-time-input.component';\nimport { FileDefaultInputComponent } from './file/file-default-input/file-default-input.component';\nimport { FileImageInputComponent } from './file/file-image-input/file-image-input.component';\nimport { NumberDropdownInputComponent } from './number/number-dropdown-input/number-dropdown-input.component';\nimport { NumberInputComponent } from './number/number-input/number-input.component';\nimport { NumberSliderInputComponent } from './number/number-slider-input/number-slider-input.component';\nimport { ReferencesManyInputComponent } from './relations/references-many-input/references-many-input.component';\nimport { StringAutocompleteInputComponent } from './string/string-autocomplete-input/string-autocomplete-input.component';\nimport { StringDropdownInputComponent } from './string/string-dropdown-input/string-dropdown-input.component';\nimport { StringInputComponent } from './string/string-input/string-input.component';\nimport { StringPasswordInputComponent } from './string/string-password-input/string-password-input.component';\nimport { StringTextboxInputComponent } from './string/string-textbox-input/string-textbox-input.component';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { EditArrayItemDialogDataInternal, EntityArrayDecoratorConfigInternal } from '../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../decorators/base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { HasManyDecoratorConfigInternal } from '../../decorators/has-many/has-many-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal, DropdownObjectDecoratorConfigInternal } from '../../decorators/object/object-decorator-internal.data';\nimport { ReferencesOneDecoratorConfigInternal } from '../../decorators/references-one/references-one-decorator-internal.data';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../encapsulation/reflect.utilities';\nimport { UUIDUtilities } from '../../encapsulation/uuid.utilities';\nimport { defaultFalse } from '../../functions/default-false.function';\nimport { NGX_GET_VALIDATION_ERROR_MESSAGE } from '../../functions/get-validation-error-message.function';\nimport { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { DateUtilities } from '../../utilities/date.utilities';\nimport { EntityTab, EntityUtilities } from '../../utilities/entity.utilities';\nimport { SelectionUtilities } from '../../utilities/selection.utilities';\nimport { ValidationError, ValidationUtilities } from '../../utilities/validation.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { CreateDataBuilder, CreateDataInternal } from '../table/create-dialog/create-data.builder';\nimport { DisplayColumnValueComponent } from '../table/display-column-value/display-column-value.component';\nimport { EditActionInternal } from '../table/edit-dialog/edit-data.builder';\nimport { DisplayColumn } from '../table/table-data';\nimport { BaseTableActionInternal, TableActionInternal } from '../table/table-data.builder';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n/**\n * The default input component. It gets the metadata of the property from the given @Input \"entity\" and @Input \"propertyKey\"\n * and displays the input field accordingly.\n *\n * You can also define a method that generates error-messages and if the input should be hidden when its metadata says\n * that it should be omitted for creating or updating.\n * The last part being mostly relevant if you want to use this component inside an ngFor.\n */\n@Component({\n selector: 'ngx-mat-entity-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n DisplayColumnValueComponent,\n NgIf,\n NgSwitch,\n NgSwitchCase,\n NgSwitchDefault,\n NgFor,\n MatTabsModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatDialogModule,\n MatBadgeModule,\n MatInputModule,\n MatMenuModule,\n MatPaginatorModule,\n MatProgressSpinnerModule,\n MatTableModule,\n MatCheckboxModule,\n MatButtonModule,\n TooltipComponent,\n StringInputComponent,\n StringTextboxInputComponent,\n StringAutocompleteInputComponent,\n StringDropdownInputComponent,\n StringPasswordInputComponent,\n BooleanCheckboxInputComponent,\n BooleanToggleInputComponent,\n BooleanDropdownInputComponent,\n NumberInputComponent,\n NumberDropdownInputComponent,\n NumberSliderInputComponent,\n ArrayDateInputComponent,\n ArrayDateRangeInputComponent,\n ArrayDateTimeInputComponent,\n ArrayStringAutocompleteChipsComponent,\n ArrayStringChipsInputComponent,\n DateInputComponent,\n DateRangeInputComponent,\n DateTimeInputComponent,\n FileDefaultInputComponent,\n FileImageInputComponent,\n ReferencesManyInputComponent,\n CustomInputComponent\n ]\n})\nexport class NgxMatEntityInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n /**\n * The entity on which the property exists. Used in conjunction with the \"propertyKey\"\n * to determine the property for which the input should be generated.\n */\n @Input( { required: true })\n entity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjunction with the \"entity\".\n */\n @Input({ required: true })\n propertyKey!: keyof EntityType;\n\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n @Input()\n getValidationErrorMessage?: (model: NgModel) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n internalGetValidationErrorMessage!: (model: NgModel) => string;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForCreate?: boolean;\n\n /**\n * Whether to hide a value if it is omitted for editing.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForEdit?: boolean;\n\n /**\n * Whether or not an empty value should be valid.\n * Is used internally for the object property.\n * @default undefined\n */\n @Input()\n validEmpty?: boolean; // TODO\n\n /**\n * Whether or not the input should be readonly.\n * In that case it is disabled, but most of the default styling is overwritten.\n * @default false\n */\n @Input()\n isReadOnly?: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n internalIsReadOnly!: boolean;\n\n /**\n * Emits when the input value has been changed.\n */\n @Output()\n inputChangeEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * The type of the decorator for this input.\n */\n type!: DecoratorTypes;\n /**\n * The property metadata received from the decorator.\n */\n metadata!: PropertyDecoratorConfigInternal<unknown>;\n\n /**\n * The metadata of an object property.\n */\n metadataDefaultObject!: DefaultObjectDecoratorConfigInternal<EntityType>;\n /**\n * The object property value.\n */\n objectProperty!: EntityType;\n /**\n * The tabs for the object property.\n */\n objectPropertyTabs!: EntityTab<EntityType>[];\n\n /**\n * The metadata of an dropdown object property.\n */\n metadataDropdownObject!: DropdownObjectDecoratorConfigInternal<EntityType>;\n /**\n * All possible dropdown values for the object property.\n */\n private objectDropdownValues: DropdownValue<EntityType | undefined>[] = [];\n /**\n * A unique input name for the references one property.\n */\n objectDropdownName!: string;\n /**\n * All currently shown dropdown values for the object property.\n */\n filteredObjectDropdownValues: DropdownValue<EntityType | undefined>[] = [];\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * The currently selected object as a drop down value.\n */\n get currentObjectDropdownValue(): DropdownValue<EntityType | undefined> | undefined {\n return LodashUtilities.cloneDeep(this.objectDropdownValues ?? []).find(v => LodashUtilities.isEqual(v.value, this.entity[this.propertyKey]));\n }\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * Whether or not the current object dropdown value should be shown in the dropdown.\n */\n get shouldDisplayCurrentObjectDropdownValue(): boolean {\n return !!this.currentObjectDropdownValue && !(!!this.filteredObjectDropdownValues.find(v => LodashUtilities.isEqual(v.value, this.currentObjectDropdownValue?.value)));\n }\n\n @ViewChild('addArrayItemDialog')\n private readonly addArrayItemDialog!: TemplateRef<unknown>;\n private addArrayItemDialogRef!: MatDialogRef<unknown>;\n @ViewChild('editArrayItemDialog')\n private readonly editArrayItemDialog!: TemplateRef<unknown>;\n private editArrayItemDialogRef!: MatDialogRef<unknown>;\n /**\n * The metadata of an entity array property.\n */\n metadataEntityArray!: EntityArrayDecoratorConfigInternal<EntityType>;\n /**\n * The entity array property value.\n */\n entityArrayValues!: EntityType[];\n /**\n * The current array item to be added or updated.\n */\n arrayItem!: EntityType;\n /**\n * The array item before any changes have been made. Used to check if the form is dirty.\n */\n arrayItemPriorChanges!: EntityType;\n /**\n * The inline tabs for adding an array item.\n */\n arrayItemInlineTabs!: EntityTab<EntityType>[];\n /**\n * The dataSource for the entity array.\n */\n entityArrayDataSource!: MatTableDataSource<EntityType>;\n /**\n * The selection for the entity array.\n */\n entityArraySelection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n /**\n * The columns to display in the entity array table.\n */\n entityArrayDisplayedColumns!: string[];\n /**\n * Whether or not the array item is valid.\n */\n isArrayItemValid: boolean = false;\n /**\n * Whether or not the array item is dirty.\n */\n isArrayItemDirty: boolean = false;\n /**\n * The index of the array item that is being edited.\n */\n private indexOfEditedArrayItem!: number;\n /**\n * Config for the dialog that adds a new array item.\n */\n addArrayItemDialogData!: CreateDataInternal;\n /**\n * The tabs to display inside the create array item dialog.\n */\n arrayItemDialogTabs!: EntityTab<EntityType>[];\n /**\n * The tabs to display inside the edit array item dialog.\n */\n editArrayItemDialogData!: EditArrayItemDialogDataInternal<EntityType>;\n /**\n * All validation errors for the array item.\n */\n arrayItemValidationErrors: ValidationError[] = [];\n /**\n * What to display inside the array item tooltip.\n */\n arrayItemTooltipContent: string = '';\n\n /**\n * Metadata of a has many property.\n */\n metadataHasMany!: HasManyDecoratorConfigInternal<EntityType, EntityType>;\n /**\n * Whether or not has many is currently loading.\n */\n hasManyIsLoading: boolean = true;\n /**\n * A setter for the has many paginator.\n * Is needed because the paginator is inside a switch case,\n * which means that at ngOnInit it can't be initialized.\n */\n @ViewChild(MatPaginator)\n set hasManyPaginator(paginator: MatPaginator) {\n if (!this.hasManyDataSource.paginator) {\n this.hasManyDataSource.paginator = paginator;\n }\n }\n /**\n * A setter for the has many sort.\n * Is needed because the sort is inside a switch case,\n * which means that at ngOnInit it can't be initialized.\n */\n @ViewChild(MatSort)\n private set hasManySort(sort: MatSort) {\n if (!this.hasManyDataSource.sort) {\n this.hasManyDataSource.sort = sort;\n }\n }\n @ViewChild('filter', { static: true })\n private readonly hasManyFilter!: string;\n /**\n * The columns of the has many table.\n */\n displayedHasManyColumns!: string[];\n /**\n * The data source of the has many table.\n */\n hasManyDataSource: MatTableDataSource<EntityType> = new MatTableDataSource();\n /**\n * The selection of the has many table.\n */\n hasManySelection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n /**\n * The has many import action.\n */\n hasManyImportAction!: BaseTableActionInternal;\n private hasManyEntityService!: EntityService<EntityType>;\n @ViewChild('createHasManyDialog')\n private readonly createHasManyDialog!: TemplateRef<unknown>;\n private createHasManyDialogRef!: MatDialogRef<unknown>;\n @ViewChild('editHasManyDialog')\n private readonly editHasManyDialog!: TemplateRef<unknown>;\n private editHasManyDialogRef!: MatDialogRef<unknown>;\n /**\n * A single has many entity.\n */\n hasManyEntity!: EntityType;\n /**\n * The single has many entity before any changes have been made. Is used to determine if the form is dirty.\n */\n hasManyEntityPriorChanges!: EntityType;\n /**\n * Whether or not the has many entity is valid.\n */\n isHasManyEntityValid: boolean = false;\n /**\n * All validation errors of the has many entity.\n */\n hasManyValidationErrors: ValidationError[] = [];\n /**\n * What to display inside the has many tooltip.\n */\n hasManyTooltipContent: string = '';\n /**\n * Whether or not the has many entity is dirty.\n */\n isHasManyEntityDirty: boolean = false;\n /**\n * Whether or not the current user is allowed to create a has many entity.\n */\n hasManyAllowCreate!: boolean;\n /**\n * The tabs to display when creating a new has many entity.\n */\n hasManyCreateTabs!: EntityTab<EntityType>[];\n /**\n * The tabs to display when updating a has many entity.\n */\n hasManyUpdateTabs!: EntityTab<EntityType>[];\n private hasManyCreateBaseUrl!: string;\n\n /**\n * The metadata for a references one property.\n */\n metadataReferencesOne!: ReferencesOneDecoratorConfigInternal<EntityType>;\n /**\n * The references one object.\n */\n referencesOneObject!: EntityType;\n /**\n * The tabs to display for the references one entity.\n */\n referencesOnePropertyTabs!: EntityTab<EntityType>[];\n /**\n * The values that can be possibly referenced.\n */\n private referencesOneAllReferencedEntities!: EntityType[];\n /**\n * The possible references one dropdown values.\n */\n private referencesOneDropdownValues!: DropdownValue<string>[];\n /**\n * The filtered dropdown values that get displayed in the references one dropdown input.\n */\n filteredReferencesOneDropdownValues!: DropdownValue<string>[];\n /**\n * A unique input name for the references one property.\n */\n referencesOneName!: string;\n\n /**\n * The enum Values for all the different DecoratorTypes.\n */\n readonly DecoratorTypes: typeof DecoratorTypes = DecoratorTypes;\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n /**\n * Contains Helper Functions for handling date properties.\n */\n DateUtilities: typeof DateUtilities = DateUtilities;\n /**\n * Provides functionality around material selections inside of tables.\n */\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * Gets the currently selected dropdown value for references one.\n * Is needed so that the dropdown value will still be displayed,\n * even when the filter method removes the value from the selectable dropdown values.\n */\n get currentReferencesOneDropdownValue(): DropdownValue<string> | undefined {\n return LodashUtilities.cloneDeep(this.referencesOneDropdownValues ?? [])\n .find(v => v.value === this.entity[this.propertyKey]);\n }\n\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * Whether or not the currently selected references one value should be shown,\n * although it would have been filtered out by the search.\n */\n get shouldDisplayCurrentReferencesOneDropdownValue(): boolean {\n return !!this.currentReferencesOneDropdownValue\n && !(!!this.filteredReferencesOneDropdownValues.find(v => v.value === this.currentReferencesOneDropdownValue?.value));\n }\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly injector: EnvironmentInjector,\n private readonly router: Router,\n @Inject(NGX_GET_VALIDATION_ERROR_MESSAGE)\n protected readonly defaultGetValidationErrorMessage: (model: NgModel) => string,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues,\n private readonly http: HttpClient\n ) {}\n\n /**\n * Checks if the input with the given key on the given property is readonly.\n * @param property - The property on which to check the input.\n * @param key - The key for the input to check.\n * @returns Whether or not the input is readonly.\n */\n isPropertyReadOnly(property: EntityType, key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n if (this.internalIsReadOnly || this.metadataDefaultObject?.isReadOnly(property)) {\n return true;\n }\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(property, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return metadata.isReadOnly(property);\n });\n }\n\n /**\n * This is needed for the inputs to work inside an ngFor.\n * @param index - The index of the element in the ngFor.\n * @returns The index.\n */\n trackByFn(index: unknown): unknown {\n return index;\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entity - The entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entity: EntityType, displayColumn: DisplayColumn<EntityType>): unknown {\n return runInInjectionContext(this.injector, () => displayColumn.value(entity));\n }\n\n async ngOnInit(): Promise<void> {\n this.internalGetValidationErrorMessage = this.getValidationErrorMessage ?? this.defaultGetValidationErrorMessage;\n this.internalIsReadOnly = this.isReadOnly ?? false;\n\n const foundType: DecoratorTypes | undefined = EntityUtilities.getPropertyType(this.entity, this.propertyKey);\n if (foundType == null) {\n throw new Error(`No type was found for the key \"${String(this.propertyKey)}\"`);\n }\n this.type = foundType;\n if (this.validEmpty === true) {\n\n const currentMetadata: PropertyDecoratorConfigInternal<unknown> = ReflectUtilities.getMetadata('metadata', this.entity, this.propertyKey) as PropertyDecoratorConfigInternal<unknown>;\n\n ReflectUtilities.defineMetadata('metadata', { ...currentMetadata, required: defaultFalse }, this.entity, this.propertyKey);\n }\n\n const foundMetadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.entity, this.propertyKey, this.type);\n if (!foundMetadata) {\n throw new Error(`No metadata was found for the key \"${String(this.propertyKey)}\"`);\n }\n this.metadata = foundMetadata;\n\n switch (this.type) {\n case DecoratorTypes.OBJECT_DROPDOWN:\n await this.initDropdownObjectInput();\n break;\n case DecoratorTypes.OBJECT:\n this.initObjectInput();\n break;\n case DecoratorTypes.ARRAY:\n this.initEntityArray();\n break;\n case DecoratorTypes.HAS_MANY:\n this.initHasMany();\n break;\n case DecoratorTypes.REFERENCES_ONE:\n await this.initReferencesOne();\n break;\n default:\n break;\n }\n }\n\n private async initReferencesOne(): Promise<void> {\n this.metadataReferencesOne = this.metadata as ReferencesOneDecoratorConfigInternal<EntityType>;\n this.referencesOneName = this.propertyKey.toString() + 'input' + UUIDUtilities.create();\n\n await runInInjectionContext(\n this.injector,\n (async () => {\n this.referencesOneAllReferencedEntities = await this.metadataReferencesOne.getReferencedEntities();\n\n this.referencesOneDropdownValues = this.metadataReferencesOne.getDropdownValues(LodashUtilities.cloneDeep(this.referencesOneAllReferencedEntities));\n this.filteredReferencesOneDropdownValues = LodashUtilities.cloneDeep(this.referencesOneDropdownValues);\n this.setReferencesOneObject();\n })\n );\n }\n\n /**\n * Filters the references one dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterReferencesOneValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredReferencesOneDropdownValues = LodashUtilities.cloneDeep(this.referencesOneDropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || option.value.toLowerCase().includes(filter);\n });\n }\n\n private initHasMany(): void {\n this.metadata = new HasManyDecoratorConfigInternal(\n this.metadata as HasManyDecoratorConfigInternal<EntityType, EntityType>,\n this.globalConfig\n );\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.propertyKey);\n this.metadataHasMany = this.metadata as HasManyDecoratorConfigInternal<EntityType, EntityType>;\n this.hasManyImportAction = new BaseTableActionInternal({\n ...this.metadataHasMany.tableData.baseData.importActionData,\n action: () => this.startImportJson()\n }, this.globalConfig);\n\n runInInjectionContext(this.injector, () => {\n this.hasManyAllowCreate = this.metadataHasMany.tableData.baseData.allowCreate();\n this.hasManyEntityService = inject<EntityService<EntityType>>(this.metadataHasMany.tableData.baseData.EntityServiceClass);\n this.hasManyCreateBaseUrl = this.metadataHasMany.createBaseUrl(this.entity, this.metadataHasMany);\n });\n\n const givenDisplayColumns: string[] = this.metadataHasMany.tableData.baseData.displayColumns.map((v) => v.displayName);\n if (this.metadataHasMany.tableData.baseData.tableActions.filter(tA => tA.type === 'multi-select').length) {\n this.displayedHasManyColumns = ['select'].concat(givenDisplayColumns);\n }\n else {\n this.displayedHasManyColumns = givenDisplayColumns;\n }\n\n this.hasManyDataSource.sortingDataAccessor = (entity: EntityType, header: string) => {\n return runInInjectionContext(this.injector, () => {\n\n return this.metadataHasMany.tableData.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity) as string;\n });\n };\n this.hasManyDataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr: string = this.metadataHasMany.tableData.baseData.searchString(entity);\n const formattedSearchString: string = searchStr.toLowerCase();\n const formattedFilterString: string = filter.toLowerCase();\n return formattedSearchString.includes(formattedFilterString);\n };\n this.hasManyDataSource.filter = this.hasManyFilter;\n\n this.hasManyEntityService.entitiesSubject.subscribe((entities) => {\n this.hasManyDataSource.data = entities;\n this.hasManySelection.clear();\n });\n runInInjectionContext(this.injector, () => {\n const readBaseUrl: string = this.metadataHasMany.readBaseUrl(this.entity, this.metadataHasMany);\n void this.hasManyEntityService.read(readBaseUrl).then(() => {\n this.hasManyIsLoading = false;\n });\n });\n }\n\n private initEntityArray(): void {\n this.metadata = new EntityArrayDecoratorConfigInternal(\n this.metadata as EntityArrayDecoratorConfigInternal<EntityType>,\n this.globalConfig\n );\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.propertyKey);\n this.metadataEntityArray = this.metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (this.entity[this.propertyKey] == null) {\n (this.entity[this.propertyKey] as EntityType[]) = [];\n }\n this.entityArrayValues = this.entity[this.propertyKey] as EntityType[];\n if (!this.metadataEntityArray.createInline && !this.metadataEntityArray.createDialogData) {\n this.metadataEntityArray.createDialogData = {\n title: 'Add'\n };\n }\n const givenDisplayColumns: string[] = this.metadataEntityArray.displayColumns.map((v) => v.displayName);\n if (givenDisplayColumns.find(s => s === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved.\n Please choose a different name.`\n );\n }\n this.entityArrayDisplayedColumns = this.internalIsReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.entityArrayDataSource = new MatTableDataSource();\n this.entityArrayDataSource.data = this.entityArrayValues;\n this.arrayItem = new this.metadataEntityArray.EntityClass();\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n this.arrayItemInlineTabs = EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true);\n EntityUtilities.setDefaultValues(this.arrayItem);\n\n this.addArrayItemDialogData = new CreateDataBuilder(this.globalConfig, this.metadataEntityArray.createDialogData)\n .withDefault('createButtonLabel', this.globalConfig.addLabel)\n .withDefault('title', this.globalConfig.addArrayItemTitle)\n .getResult();\n this.arrayItemDialogTabs = EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true);\n\n this.editArrayItemDialogData = this.metadataEntityArray.editDialogData;\n }\n\n private async initDropdownObjectInput(): Promise<void> {\n this.metadataDropdownObject = this.metadata as DropdownObjectDecoratorConfigInternal<EntityType>;\n this.objectDropdownName = this.propertyKey.toString() + 'input' + UUIDUtilities.create();\n\n await runInInjectionContext(this.injector, async () => {\n this.objectDropdownValues = await this.metadataDropdownObject.dropdownValues(this.entity);\n this.filteredObjectDropdownValues = LodashUtilities.cloneDeep(this.objectDropdownValues);\n });\n }\n\n private initObjectInput(): void {\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfigInternal<EntityType>;\n this.objectProperty = this.entity[this.propertyKey] as EntityType;\n this.objectPropertyTabs = EntityUtilities.getEntityTabs(\n this.objectProperty,\n this.injector,\n this.hideOmitForCreate,\n this.hideOmitForEdit,\n this.metadataDefaultObject.omit\n );\n }\n\n private startImportJson(): void {\n const input: HTMLInputElement = document.createElement('input');\n input.type = 'file';\n input.accept = 'application/json';\n input.onchange = async () => {\n if (input.files) {\n this.importJson(input.files[0]);\n }\n };\n input.click();\n }\n\n private importJson(file: File): void {\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.hasManyImportAction.confirmDialogData)\n .withDefault('text', this.metadataHasMany.tableData.baseData.importActionData.confirmDialogData?.text )\n .withDefault('title', this.hasManyImportAction.displayName)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n void this.hasManyEntityService.import(file);\n }\n });\n }\n\n /**\n * Checks if two objects are equal. Is needed for the dropdown.\n * @param value1 - The first object to compare.\n * @param value2 - The second object to compare.\n * @returns Whether or not the objects are the same.\n */\n compareObjects(value1?: EntityType, value2?: EntityType): boolean {\n const valueObject1: EntityType = new this.metadataDropdownObject.EntityClass(value1);\n const valueObject2: EntityType = new this.metadataDropdownObject.EntityClass(value2);\n return LodashUtilities.isEqual(valueObject1, valueObject2);\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterObjectDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredObjectDropdownValues = LodashUtilities.cloneDeep(this.objectDropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || JSON.stringify(option.value).toLowerCase().includes(filter);\n });\n }\n\n /**\n * Sets the references one object using the input id.\n */\n setReferencesOneObject(): void {\n const foundEntity: EntityType | undefined = this.metadataReferencesOne.getEntityForId(this.entity[this.propertyKey] as string, this.referencesOneAllReferencedEntities);\n this.referencesOneObject = new this.metadataReferencesOne.EntityClass(foundEntity);\n this.referencesOnePropertyTabs = EntityUtilities.getEntityTabs(this.referencesOneObject, this.injector);\n this.emitChange();\n }\n\n /**\n * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.\n * @param entity - The entity that should be updated.\n * @param dCol - The display column that was clicked on.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n editHasManyEntity(entity: EntityType, dCol: DisplayColumn<EntityType>): void {\n if ((dCol.disableClick === true) || (!this.hasManyAllowUpdate(entity) && !this.hasManyAllowRead(entity))) {\n return;\n }\n if (!this.metadataHasMany.tableData.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.metadataHasMany.tableData.baseData.edit) {\n this.metadataHasMany.tableData.baseData.edit(new this.metadataHasMany.tableData.baseData.EntityClass(entity));\n return;\n }\n if (this.metadataHasMany.tableData.baseData.defaultEdit == 'page') {\n this.editHasManyDefaultPage(new this.metadataHasMany.tableData.baseData.EntityClass(entity));\n return;\n }\n void this.editHasManyDefaultDialog(new this.metadataHasMany.tableData.baseData.EntityClass(entity));\n }\n\n /**\n * Whether updating the provided entity from the has many property is allowed.\n * @param entity - A single value of the has many property that the user wants to edit.\n * @returns True when the user can edit the provided entity and false otherwise.\n */\n hasManyAllowUpdate(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.allowUpdate(entity);\n });\n }\n\n /**\n * Whether viewing the provided entity from the has many property is allowed.\n * @param entity - A single value of the has many property that the user wants to view.\n * @returns True when the user can view the provided entity and false otherwise.\n */\n hasManyAllowRead(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.allowRead(entity);\n });\n }\n\n /**\n * Whether deleting the provided entity from the has many property is allowed.\n * @param entity - A single value of the has many property that the user wants to delete.\n * @returns True when the user can delete the provided entity and false otherwise.\n */\n hasManyAllowDelete(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.allowDelete(entity);\n });\n }\n\n /**\n * Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).\n * @param action - The EditAction to check.\n * @returns Whether or not the Action can be used.\n */\n hasManyEditActionDisabled(action: EditActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => {\n return !action.enabled(this.hasManyEntityPriorChanges);\n });\n }\n\n /**\n * Runs the edit action on the entity.\n * @param action - The action to run.\n */\n hasManyRunEditAction(action: EditActionInternal<EntityType>): void {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.hasManyEntityPriorChanges);\n });\n\n if (!requireConfirmDialog) {\n this.confirmHasManyRunEditAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmHasManyRunEditAction(action);\n }\n });\n }\n\n private confirmHasManyRunEditAction(action: EditActionInternal<EntityType>): void {\n void runInInjectionContext(this.injector, async () => {\n await action.action(this.hasManyEntity, this.hasManyEntityPriorChanges);\n await this.checkHasManyEntity();\n });\n }\n\n private editHasManyDefaultPage(entity: EntityType): void {\n void this.router.navigate(['', this.hasManyEntityService.editBaseRoute, entity[this.hasManyEntityService.idKey]]);\n }\n\n private async editHasManyDefaultDialog(entity: EntityType): Promise<void> {\n this.hasManyEntity = LodashUtilities.cloneDeep(entity);\n this.hasManyEntityPriorChanges = LodashUtilities.cloneDeep(this.hasManyEntity);\n this.hasManyUpdateTabs = EntityUtilities.getEntityTabs(this.hasManyEntity, this.injector, false, true);\n await this.checkHasManyEntity();\n this.editHasManyDialogRef = this.dialog.open(\n this.editHasManyDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n const res: number = await firstValueFrom(this.editHasManyDialogRef.afterClosed()) as number;\n if (res === 0) {\n const data: EntityType[] = this.hasManyDataSource.data;\n\n data[this.hasManyDataSource.data.findIndex((e) => e[this.hasManyEntityService.idKey] === entity[this.hasManyEntityService.idKey])] = entity;\n this.hasManyDataSource.data = data;\n this.hasManySelection.clear();\n }\n }\n\n /**\n * Tries to save the changes and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n dialogEditHasMany(): void {\n if (this.internalIsReadOnly || !this.isHasManyEntityValid || !this.isHasManyEntityDirty) {\n return;\n }\n if (!this.metadataHasMany.tableData.editData.editRequiresConfirmDialog) {\n this.dialogConfirmEditHasMany();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.metadataHasMany.tableData.editData.confirmEditDialogData)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.dialogConfirmEditHasMany();\n }\n });\n }\n private dialogConfirmEditHasMany(): void {\n void this.hasManyEntityService.update(this.hasManyEntity, this.hasManyEntityPriorChanges)\n .then(() => {\n this.editHasManyDialogRef.close(1);\n this.emitChange();\n });\n }\n\n /**\n * Tries to delete the entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n deleteHasManyEntity(): void {\n if (!this.metadataHasMany.tableData.editData.deleteRequiresConfirmDialog) {\n this.confirmDeleteHasManyEntity();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.metadataHasMany.tableData.editData.confirmDeleteDialogData)\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmDeleteHasManyEntity();\n }\n });\n }\n\n private confirmDeleteHasManyEntity(): void {\n void this.hasManyEntityService.delete(this.hasManyEntityPriorChanges).then(() => {\n this.editHasManyDialogRef.close(2);\n this.emitChange();\n });\n }\n\n /**\n * Cancels the editing of the has many entity and closes the dialog.\n */\n dialogCancelEditHasMany(): void {\n EntityUtilities.resetChangesOnEntity(this.hasManyEntity, this.hasManyEntityPriorChanges);\n this.editHasManyDialogRef.close(0);\n }\n\n /**\n * Creates a new Entity. This either calls the create-Method provided by the user or uses a default create-dialog.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n createHasManyEntity(): void {\n void runInInjectionContext(this.injector, async () => {\n if (this.metadataHasMany.tableData.baseData.allowCreate()) {\n if (!this.metadataHasMany.tableData.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.metadataHasMany.tableData.baseData.create) {\n this.metadataHasMany.tableData.baseData.create(new this.metadataHasMany.tableData.baseData.EntityClass());\n return;\n }\n const entity: EntityType = new this.metadataHasMany.tableData.baseData.EntityClass();\n EntityUtilities.setDefaultValues(entity);\n if (this.metadataHasMany.tableData.baseData.defaultCreate == 'page') {\n this.createHasManyDefaultPage();\n return;\n }\n await this.createHasManyDefaultDialog(entity);\n }\n });\n }\n\n private createHasManyDefaultPage(): void {\n void this.router.navigateByUrl(this.hasManyEntityService.createBaseRoute);\n }\n\n private async createHasManyDefaultDialog(entity: EntityType): Promise<void> {\n this.hasManyEntity = entity;\n this.hasManyCreateTabs = EntityUtilities.getEntityTabs(this.hasManyEntity, this.injector, true);\n await this.checkIsHasManyEntityValid('create');\n this.createHasManyDialogRef = this.dialog.open(\n this.createHasManyDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n }\n\n /**\n * Creates the has many entity over the dialog.\n */\n dialogCreateHasMany(): void {\n if (!this.isHasManyEntityValid) {\n return;\n }\n if (!this.metadataHasMany.tableData.createData.createRequiresConfirmDialog) {\n this.dialogConfirmCreateHasMany();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.metadataHasMany.tableData.createData.confirmCreateDialogData)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.dialogConfirmCreateHasMany();\n }\n });\n }\n private dialogConfirmCreateHasMany(): void {\n void this.hasManyEntityService.create(this.hasManyEntity, this.hasManyCreateBaseUrl).then(() => {\n this.createHasManyDialogRef.close();\n this.emitChange();\n });\n }\n\n /**\n * Cancels the creating of the has many entity and closes the dialog.\n */\n dialogCancelCreateHasMany(): void {\n this.createHasManyDialogRef.close();\n }\n\n /**\n * Runs the TableAction for all selected entries.\n * Also handles confirmation with an additional dial#og if configured.\n * @param action - The TableAction to run.\n */\n runHasManyTableAction(action: TableActionInternal<EntityType>): void {\n const requireConfirmDialog: boolean = runInInjectionContext(\n this.injector,\n () => action.requireConfirmDialog(this.hasManySelection.selected)\n );\n if (!requireConfirmDialog) {\n this.confirmRunHasManyTableAction(action);\n return;\n }\n\n const defaultText: string[] = action.type === 'multi-select' ? this.globalConfig.confirmMultiSelectActionText(this.hasManySelection.selected) : this.globalConfig.confirmBaseActionText;\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, action.confirmDialogData)\n .withDefault('text', defaultText)\n .withDefault('title', action.displayName)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmRunHasManyTableAction(action);\n }\n });\n }\n\n private confirmRunHasManyTableAction(action: TableActionInternal<EntityType>): void {\n void runInInjectionContext(this.injector, async () => {\n await action.action(this.hasManySelection.selected);\n this.emitChange();\n });\n }\n\n /**\n * Checks if an TableAction is disabled (e.g. Because no entries have been selected).\n * @param action - The TableAction to check.\n * @returns Whether or not the Action can be used.\n */\n hasManyTableActionDisabled(action: TableActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => {\n return !action.enabled(this.hasManySelection.selected);\n });\n }\n\n /**\n * Applies the search input to filter the table entries.\n * @param event - The keyup-event which contains the search-string of the user.\n */\n applyHasManyFilter(event: Event): void {\n const filterValue: string = (event.target as HTMLInputElement).value;\n this.hasManyDataSource.filter = filterValue.trim().toLowerCase();\n }\n\n /**\n * Checks if the entity is valid for updating and if it is dirty.\n */\n async checkHasManyEntity(): Promise<void> {\n await this.checkIsHasManyEntityValid('update');\n this.isHasManyEntityDirty = await EntityUtilities.isDirty(this.hasManyEntity, this.hasManyEntityPriorChanges, this.http);\n }\n\n /**\n * Checks if the entity is valid.\n * @param omit - Whether values omitted for create or update should be left out.\n */\n async checkIsHasManyEntityValid(omit: 'create' | 'update'): Promise<void> {\n this.hasManyValidationErrors = await ValidationUtilities.getEntityValidationErrors(this.hasManyEntity, this.injector, omit);\n\n this.hasManyTooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.hasManyValidationErrors));\n this.isHasManyEntityValid = this.hasManyValidationErrors.length === 0;\n }\n\n /**\n * Checks whether the array item is valid and if the array item is dirty.\n */\n async checkArrayItem(): Promise<void> {\n await this.checkIsArrayItemValid();\n void this.checkIsArrayItemDirty();\n }\n\n /**\n * Checks if the array item is dirty.\n */\n async checkIsArrayItemDirty(): Promise<void> {\n this.isArrayItemDirty = await EntityUtilities.isDirty(this.arrayItem, this.arrayItemPriorChanges, this.http);\n }\n\n /**\n * Checks if the arrayItem is valid.\n */\n async checkIsArrayItemValid(): Promise<void> {\n this.arrayItemValidationErrors = await ValidationUtilities.getEntityValidationErrors(this.arrayItem, this.injector, 'create');\n\n this.arrayItemTooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.arrayItemValidationErrors));\n this.isArrayItemValid = this.arrayItemValidationErrors.length === 0;\n }\n\n /**\n * Emits that a the value has been changed.\n */\n emitChange(): void {\n this.inputChangeEvent.emit();\n }\n\n /**\n * Tries to add an item to the entity array.\n * Does this either inline if the \"createInline\"-metadata is set to true\n * or in a separate dialog if it is set to false.\n */\n async addEntity(): Promise<void> {\n await this.checkIsArrayItemValid();\n if (!this.metadataEntityArray.createInline) {\n this.addArrayItemDialogRef = this.dialog.open(\n this.addArrayItemDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n return;\n }\n if (!this.metadataEntityArray.allowDuplicates) {\n for (const v of this.entityArrayValues) {\n if ((await EntityUtilities.isEqual(this.arrayItem, v, this.metadata, this.metadataEntityArray.itemType, this.http))) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadataEntityArray.duplicatesErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n return;\n }\n }\n }\n this.entityArrayValues.push(LodashUtilities.cloneDeep(this.arrayItem));\n this.entityArrayDataSource.data = this.entityArrayValues;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n EntityUtilities.setDefaultValues(this.arrayItem);\n await this.checkIsArrayItemValid();\n this.emitChange();\n }\n\n /**\n * Adds the array item defined in the dialog.\n */\n async addArrayItem(): Promise<void> {\n if (!this.isArrayItemValid) {\n return;\n }\n this.entityArrayValues.push(LodashUtilities.cloneDeep(this.arrayItem));\n this.entityArrayDataSource.data = this.entityArrayValues;\n\n await this.closeAddArrayItemDialog();\n }\n\n /**\n * Cancels adding the array item defined in the dialog.\n */\n async closeAddArrayItemDialog(): Promise<void> {\n this.addArrayItemDialogRef.close();\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n await this.checkIsArrayItemValid();\n this.emitChange();\n }\n\n /**\n * Edits an entity array item.\n * @param entity - The entity that has been clicked.\n * @param dCol - The display column that was clicked on.\n */\n async editArrayItem(entity: EntityType, dCol: DisplayColumn<EntityType>): Promise<void> {\n if (dCol.disableClick === true) {\n return;\n }\n this.indexOfEditedArrayItem = this.entityArrayValues.indexOf(entity);\n this.arrayItem = new this.metadataEntityArray.EntityClass(entity);\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n\n await this.checkArrayItem();\n\n this.editArrayItemDialogRef = this.dialog.open(\n this.editArrayItemDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n }\n\n /**\n * Saves changes on the array item in the dialog.\n */\n saveArrayItem(): void {\n this.entityArrayValues[this.indexOfEditedArrayItem] = LodashUtilities.cloneDeep(this.arrayItem);\n this.entityArrayDataSource.data = this.entityArrayValues;\n\n void this.closeEditArrayItemDialog();\n }\n\n /**\n * Closes the edit array item dialog and resets changes.\n */\n async closeEditArrayItemDialog(): Promise<void> {\n this.editArrayItemDialogRef.close();\n this.arrayItem = new this.metadataEntityArray.EntityClass();\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n await this.checkArrayItem();\n this.emitChange();\n }\n\n /**\n * Removes all selected entries from the entity array.\n */\n removeFromEntityArray(): void {\n SelectionUtilities.remove(this.entityArraySelection, this.entityArrayValues, this.entityArrayDataSource);\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n \n<!-- eslint-disable angular/cyclomatic-complexity -->\n<div *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\" [ngSwitch]=\"type\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <string-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <string-textbox-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-textbox-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <string-autocomplete-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-autocomplete-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <string-dropdown-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-dropdown-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_PASSWORD\">\n <string-password-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-password-input>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <boolean-checkbox-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </boolean-checkbox-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <boolean-toggle-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </boolean-toggle-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <boolean-dropdown-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </boolean-dropdown-input>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <number-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </number-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <number-dropdown-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </number-dropdown-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_SLIDER\">\n <number-slider-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </number-slider-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE\">\n <array-date-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-date-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE_TIME\">\n <array-date-time-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-date-time-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE_RANGE\">\n <array-date-range-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-date-range-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_CHIPS\">\n <array-string-chips-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-string-chips-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\">\n <array-string-autocomplete-chips\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-string-autocomplete-chips>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Dates-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.DATE\">\n <date-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </date-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.DATE_RANGE\">\n <date-range-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </date-range-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.DATE_TIME\">\n <date-time-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </date-time-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Files-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.FILE_DEFAULT\">\n <file-default-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </file-default-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.FILE_IMAGE\">\n <file-image-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </file-image-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------- references many ------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.REFERENCES_MANY\">\n <references-many-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </references-many-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Custom------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.CUSTOM\">\n <custom-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </custom-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Object------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.OBJECT\">\n <b>{{metadataDefaultObject.displayName}}</b>\n <!-- iterates over the object properties -->\n <mat-tab-group *ngIf=\"objectPropertyTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of objectPropertyTabs; let tI = index; trackBy: trackByFn\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows;\" class=\"row\">\n <ngx-mat-entity-input *ngFor=\"let key of row.keys; let rI = index; trackBy: trackByFn\"\n [entity]=\"objectProperty\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [validEmpty]=\"!metadata.required(entity)\"\n [isReadOnly]=\"isPropertyReadOnly(objectProperty, key)\"\n [class]=\"EntityUtilities.getWidthClasses(objectProperty, key)\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"objectPropertyTabs.length <= 1\">\n <div *ngFor=\"let row of objectPropertyTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input *ngFor=\"let key of row.keys; let i = index; trackBy: trackByFn\"\n [entity]=\"objectProperty\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [validEmpty]=\"!metadata.required(entity)\"\n [isReadOnly]=\"isPropertyReadOnly(objectProperty, key)\"\n [class]=\"EntityUtilities.getWidthClasses(objectProperty, key)\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!---------------Object Dropdown-------------->\n <!-------------------------------------------->\n <mat-form-field *ngSwitchCase=\"DecoratorTypes.OBJECT_DROPDOWN\" class=\"object-dropdown\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #model=\"ngModel\"\n [name]=\"objectDropdownName\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"internalIsReadOnly\"\n [compareWith]=\"compareObjects\"\n [(ngModel)]=\"entity[propertyKey]\"\n (selectionChange)=\"emitChange()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterObjectDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n <mat-option *ngIf=\"!metadata.required(entity)\">-</mat-option>\n <mat-option *ngIf=\"shouldDisplayCurrentObjectDropdownValue\" [value]=\"currentObjectDropdownValue?.value\">{{currentObjectDropdownValue?.displayName}}</mat-option>\n <mat-option *ngFor=\"let value of filteredObjectDropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{internalGetValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n\n <!-------------------------------------------->\n <!-------------- references one ------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.REFERENCES_ONE\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #inputModel=\"ngModel\"\n [name]=\"referencesOneName\"\n [disabled]=\"internalIsReadOnly\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"entity[propertyKey]\"\n (selectionChange)=\"setReferencesOneObject()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterReferencesOneValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n <mat-option *ngIf=\"!metadata.required(entity)\">-</mat-option>\n <mat-option *ngIf=\"shouldDisplayCurrentReferencesOneDropdownValue\" [value]=\"currentReferencesOneDropdownValue?.value\">{{currentReferencesOneDropdownValue?.displayName}}</mat-option>\n <mat-option *ngFor=\"let value of filteredReferencesOneDropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{internalGetValidationErrorMessage(inputModel)}}</mat-error>\n </mat-form-field>\n <!-- iterates over the references one properties -->\n <mat-tab-group *ngIf=\"referencesOnePropertyTabs && referencesOnePropertyTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of referencesOnePropertyTabs; let tI = index; trackBy: trackByFn\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows;\" class=\"row\">\n <ngx-mat-entity-input *ngFor=\"let key of row.keys; let rI = index; trackBy: trackByFn\"\n [entity]=\"referencesOneObject\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [validEmpty]=\"!metadata.required(entity)\"\n [isReadOnly]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(referencesOneObject, key)\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"referencesOnePropertyTabs && referencesOnePropertyTabs.length <= 1\">\n <div *ngFor=\"let row of referencesOnePropertyTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input *ngFor=\"let key of row.keys; let i = index; trackBy: trackByFn\"\n [entity]=\"referencesOneObject\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [validEmpty]=\"!metadata.required(entity)\"\n [isReadOnly]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(referencesOneObject, key)\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY\" class=\"entityArray\">\n <div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadataEntityArray.displayName}}</b>\n </div>\n <div *ngIf=\"metadataEntityArray.createInline && !internalIsReadOnly\">\n <mat-tab-group *ngIf=\"arrayItemInlineTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of arrayItemInlineTabs\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys; let i = index; trackBy: trackByFn\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [class]=\"EntityUtilities.getWidthClasses(arrayItem, key)\"\n (inputChangeEvent)=\"checkIsArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"arrayItemInlineTabs.length <= 1\">\n <div *ngFor=\"let row of arrayItemInlineTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys; let i = index; trackBy: trackByFn\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [class]=\"EntityUtilities.getWidthClasses(arrayItem, key)\"\n (inputChangeEvent)=\"checkIsArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!internalIsReadOnly\" class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"metadataEntityArray.createInline && !isArrayItemValid\"\n (click)=\"addEntity()\">\n {{metadataEntityArray.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!entityArraySelection.selected.length\"\n (click)=\"removeFromEntityArray()\">\n {{metadataEntityArray.removeButtonLabel}}\n </button>\n </div>\n \n <mat-table [dataSource]=\"entityArrayDataSource\">\n <!-- select Column -->\n <ng-container *ngIf=\"!internalIsReadOnly\" matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [disabled]=\"!entityArrayDataSource.data.length\" [checked]=\"entityArraySelection.hasValue() && SelectionUtilities.isAllSelected(entityArraySelection, entityArrayDataSource)\"\n [indeterminate]=\"entityArraySelection.hasValue() && !SelectionUtilities.isAllSelected(entityArraySelection, entityArrayDataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(entityArraySelection, entityArrayDataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"entityArraySelection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? entityArraySelection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n <ng-container *ngFor=\"let dCol of metadataEntityArray.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" [class.enabled]=\"!dCol.disableClick\" (click)=\"editArrayItem(entity, dCol)\">\n <ng-container *ngIf=\"dCol.Component\">\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n </ng-container>\n <ng-container *ngIf=\"!dCol.Component\">\n {{getDisplayColumnValue(entity, dCol)}}\n </ng-container>\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"entityArrayDisplayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: entityArrayDisplayedColumns\"></mat-row>\n </mat-table>\n \n <div *ngIf=\"metadataEntityArray.required(entity) && !entityArrayDataSource.data.length\" class=\"array-error\">\n {{metadataEntityArray.missingErrorMessage}}\n </div>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!------------------ has many ---------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.HAS_MANY\" class=\"hasMany\">\n <h2 class=\"title\">{{metadataHasMany.tableData.baseData.title}}</h2>\n\n <div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{metadataHasMany.tableData.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyHasManyFilter($event)\">\n </mat-form-field>\n <div\n *ngIf=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-lg-2]=\"hasManyAllowCreate\"\n [class.col-lg-4]=\"!hasManyAllowCreate\"\n [class.col-md-3]=\"hasManyAllowCreate\"\n [class.col-md-6]=\"!hasManyAllowCreate\"\n [class.col-sm-6]=\"hasManyAllowCreate\"\n [class.col-sm-12]=\"!hasManyAllowCreate\"\n >\n <button type=\"button\" class=\"actions-button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{metadataHasMany.tableData.baseData.tableActionsLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngIf=\"metadataHasMany.tableData.baseData.allowJsonImport\" type=\"button\" mat-menu-item [disabled]=\"hasManyTableActionDisabled(hasManyImportAction)\" (click)=\"runHasManyTableAction(hasManyImportAction)\">\n {{hasManyImportAction.displayName}}\n </button>\n <button *ngFor=\"let action of metadataHasMany.tableData.baseData.tableActions\" type=\"button\" mat-menu-item [disabled]=\"hasManyTableActionDisabled(action)\" (click)=\"runHasManyTableAction(action)\">\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"hasManyAllowCreate\"\n [class.col-lg-2]=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-lg-4]=\"!metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-md-3]=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-md-6]=\"!metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-sm-6]=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-sm-12]=\"!metadataHasMany.tableData.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" mat-raised-button (click)=\"createHasManyEntity()\">\n {{metadataHasMany.tableData.baseData.createButtonLabel}}\n </button>\n </div>\n </div>\n\n <div class=\"mat-elevation-z8 elevation-container\">\n <mat-table matSort [dataSource]=\"hasManyDataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [checked]=\"hasManySelection.hasValue() && SelectionUtilities.isAllSelected(hasManySelection, hasManyDataSource)\"\n [indeterminate]=\"hasManySelection.hasValue() && !SelectionUtilities.isAllSelected(hasManySelection, hasManyDataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(hasManySelection, hasManyDataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"enabled\">\n <mat-checkbox [checked]=\"hasManySelection.isSelected(entity)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? hasManySelection.toggle(entity) : null\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of metadataHasMany.tableData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\"\n [class.enabled]=\"!dCol.disableClick && (hasManyAllowUpdate(entity) || hasManyAllowRead(entity))\"\n (click)=\"editHasManyEntity(entity, dCol)\"\n >\n <ng-container *ngIf=\"dCol.Component\">\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n </ng-container>\n <ng-container *ngIf=\"!dCol.Component\">\n {{getDisplayColumnValue(entity, dCol)}}\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedHasManyColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedHasManyColumns\"></mat-row>\n </mat-table>\n\n <mat-spinner *ngIf=\"hasManyIsLoading && metadataHasMany.tableData.baseData.displayLoadingSpinner\">\n </mat-spinner>\n\n <mat-paginator style=\"padding-top: 10px; padding-bottom: 10px;\" [length]=\"hasManyDataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}} is not known.</div>\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<!--------------------------------------------------------->\n<!--------------------Add Array Item Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #addArrayItemDialog>\n <div class=\"mat-dialog-title\">\n <div>{{addArrayItemDialogData.title}}</div>\n </div>\n\n <form>\n <mat-dialog-content>\n <mat-tab-group *ngIf=\"arrayItemDialogTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of arrayItemDialogTabs\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [class]=\"EntityUtilities.getWidthClasses(arrayItem, key)\"\n (inputChangeEvent)=\"checkIsArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"arrayItemDialogTabs.length <= 1\">\n <div *ngFor=\"let row of arrayItemDialogTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [class]=\"EntityUtilities.getWidthClasses(arrayItem, key)\"\n (inputChangeEvent)=\"checkIsArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isArrayItemValid\"\n [matBadge]=\"arrayItemValidationErrors.length\"\n [matBadgeHidden]=\"!arrayItemValidationErrors.length\"\n (click)=\"addArrayItem()\"\n >\n {{addArrayItemDialogData.createButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"arrayItemValidationErrors.length\" [tooltipContent]=\"arrayItemTooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"closeAddArrayItemDialog()\">\n {{addArrayItemDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n\n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Edit Array Item Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #editArrayItemDialog>\n <div class=\"mat-dialog-title\">\n <div>{{editArrayItemDialogData.title(arrayItemPriorChanges)}}</div>\n </div>\n \n <form>\n <mat-dialog-content>\n <mat-tab-group *ngIf=\"arrayItemDialogTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of arrayItemDialogTabs\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(arrayItem, key)\"\n [isReadOnly]=\"isPropertyReadOnly(arrayItem, key)\"\n (inputChangeEvent)=\"checkArrayItem()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"arrayItemDialogTabs.length <= 1\">\n <div *ngFor=\"let row of arrayItemDialogTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(arrayItem, key)\"\n [isReadOnly]=\"isPropertyReadOnly(arrayItem, key)\"\n (inputChangeEvent)=\"checkArrayItem()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"internalIsReadOnly || !isArrayItemValid || !isArrayItemDirty\"\n [matBadge]=\"arrayItemValidationErrors.length\"\n [matBadgeHidden]=\"!arrayItemValidationErrors.length\"\n (click)=\"saveArrayItem()\"\n >\n {{editArrayItemDialogData.confirmButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"arrayItemValidationErrors.length\" [tooltipContent]=\"arrayItemTooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"closeEditArrayItemDialog()\">\n {{editArrayItemDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Create Has Many Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #createHasManyDialog>\n <div class=\"mat-dialog-title\">\n <div>{{metadataHasMany.tableData.createData.title}}</div>\n </div>\n \n <form>\n <mat-dialog-content>\n <mat-tab-group *ngIf=\"hasManyCreateTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of hasManyCreateTabs\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"hasManyEntity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(hasManyEntity, key)\"\n (inputChangeEvent)=\"checkIsHasManyEntityValid('create')\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"hasManyCreateTabs.length <= 1\">\n <div *ngFor=\"let row of hasManyCreateTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"hasManyEntity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(hasManyEntity, key)\"\n (inputChangeEvent)=\"checkIsHasManyEntityValid('create')\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isHasManyEntityValid\"\n [matBadge]=\"hasManyValidationErrors.length\"\n [matBadgeHidden]=\"!hasManyValidationErrors.length\"\n (click)=\"dialogCreateHasMany()\"\n >\n {{metadataHasMany.tableData.createData.createButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"hasManyValidationErrors.length\" [tooltipContent]=\"hasManyTooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"dialogCancelCreateHasMany()\">\n {{metadataHasMany.tableData.createData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n \n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Edit Has Many Dialog----------------->\n<!--------------------------------------------------------->\n<ng-template #editHasManyDialog>\n <div class=\"mat-dialog-title\">\n <div>{{metadataHasMany.tableData.editData.title(hasManyEntityPriorChanges)}}</div>\n\n <div class=\"actions-container\">\n <button *ngIf=\"metadataHasMany.tableData.editData.actions.length\" type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{metadataHasMany.tableData.editData.actionsLabel}}\n </button>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of metadataHasMany.tableData.editData.actions\" type=\"button\" mat-menu-item [disabled]=\"hasManyEditActionDisabled(action)\" (click)=\"hasManyRunEditAction(action)\">\n {{action.displayName}}\n </button>\n </mat-menu>\n \n <button *ngIf=\"hasManyAllowDelete(hasManyEntity)\" type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"deleteHasManyEntity()\">\n {{metadataHasMany.tableData.editData.deleteButtonLabel}}\n </button>\n </div>\n </div>\n \n <form>\n <mat-dialog-content>\n <mat-tab-group *ngIf=\"hasManyUpdateTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of hasManyUpdateTabs\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"hasManyEntity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(hasManyEntity, key)\"\n [isReadOnly]=\"isPropertyReadOnly(hasManyEntity, key)\"\n (inputChangeEvent)=\"checkHasManyEntity()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"hasManyUpdateTabs.length <= 1\">\n <div *ngFor=\"let row of hasManyUpdateTabs[0].rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"hasManyEntity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n [class]=\"EntityUtilities.getWidthClasses(hasManyEntity, key)\"\n [isReadOnly]=\"isPropertyReadOnly(hasManyEntity, key)\"\n (inputChangeEvent)=\"checkHasManyEntity()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"internalIsReadOnly || !isHasManyEntityValid || !isHasManyEntityDirty\"\n [matBadge]=\"hasManyValidationErrors.length\"\n [matBadgeHidden]=\"!hasManyValidationErrors.length\"\n (click)=\"dialogEditHasMany()\"\n >\n {{metadataHasMany.tableData.editData.confirmButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"hasManyValidationErrors.length\" [tooltipContent]=\"hasManyTooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"dialogCancelEditHasMany()\">\n {{metadataHasMany.tableData.editData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n</ng-template>","import { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, EventEmitter, Input, OnInit, Output, runInInjectionContext } from '@angular/core';\nimport { MatTabChangeEvent, MatTabsModule } from '@angular/material/tabs';\n\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { EntityTab, EntityUtilities } from '../../utilities/entity.utilities';\nimport { NgxMatEntityInputComponent } from '../input/input.component';\n\n/**\n * A form component based on the ngx-material-entity framework.\n */\n@Component({\n selector: 'ngx-mat-entity-form',\n templateUrl: './form.component.html',\n styleUrls: ['./form.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatTabsModule,\n NgxMatEntityInputComponent\n ]\n})\nexport class NgxMatEntityFormComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The entity that should be represented by the form.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n /**\n * The tabs to display.\n */\n entityTabs!: EntityTab<EntityType>[];\n\n /**\n * Whether or not the entity is readonly.\n * @default false\n */\n @Input()\n isEntityReadOnly: boolean = false;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForCreate?: boolean;\n\n /**\n * Whether to hide a value if it is omitted for editing.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForEdit?: boolean;\n\n /**\n * Additional keys that should be omitted.\n */\n @Input()\n additionalOmitKeys?: (keyof EntityType)[];\n\n /**\n * Fires whenever an input of the form changes.\n */\n @Output()\n formChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Fires when the selected tab has been changed.\n */\n @Output()\n selectedTabChange: EventEmitter<MatTabChangeEvent> = new EventEmitter<MatTabChangeEvent>();\n\n constructor(private readonly injector: EnvironmentInjector) { }\n\n ngOnInit(): void {\n this.entityTabs = EntityUtilities.getEntityTabs(this.entity, this.injector, this.hideOmitForCreate, this.hideOmitForEdit, this.additionalOmitKeys);\n }\n\n /**\n * Checks if the input with the given key is readonly.\n * @param key - The key for the input to check.\n * @returns Whether or not the input for the key is read only.\n */\n isReadOnly(key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.entity, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return this.isEntityReadOnly || metadata.isReadOnly(this.entity);\n });\n }\n}","<!-- eslint-disable angular/cyclomatic-complexity -->\n<!-- eslint-disable angular/no-call-expression -->\n<mat-tab-group *ngIf=\"entityTabs.length > 1\" preserveContent (selectedTabChange)=\"selectedTabChange.emit()\">\n <mat-tab *ngFor=\"let tab of entityTabs\" [label]=\"tab.tabName\">\n <div *ngFor=\"let row of tab.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [class]=\"EntityUtilities.getWidthClasses(entity, key)\"\n [isReadOnly]=\"isReadOnly(key)\"\n (inputChangeEvent)=\"formChange.emit()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n</mat-tab-group>\n\n<div *ngIf=\"entityTabs.length <= 1\">\n <span *ngIf=\"!entityTabs.length\" class=\"no-entity-tabs\">\n ERROR: No Inputs. Did you correctly assign all values in the model constructor?\n </span>\n <div *ngFor=\"let row of entityTabs[0]?.rows\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [class]=\"EntityUtilities.getWidthClasses(entity, key)\"\n [isReadOnly]=\"isReadOnly(key)\"\n (inputChangeEvent)=\"formChange.emit()\"\n >\n </ngx-mat-entity-input>\n </div>\n</div>","import { Location, NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, ElementRef, EnvironmentInjector, HostListener, Inject, InjectionToken, OnInit, Renderer2, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { firstValueFrom } from 'rxjs';\n\nimport { PageCreateDataBuilder, PageCreateDataInternal } from './page-create-data.builder';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { UnsavedChangesPage } from '../../services/unsaved-changes.guard';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../utilities/validation.utilities';\nimport { ConfirmDialogData } from '../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../form/form.component';\nimport { CreateEntityData } from '../table/create-dialog/create-entity-data';\nimport { CreateData } from '../table/table-data';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n/**\n * The data that needs to be provided for a route to be able to create a entity.\n */\nexport type PageCreateData<EntityType extends BaseEntityType<EntityType>> = Omit<CreateEntityData<EntityType>, 'entity' | 'EntityServiceClass'> & {\n /**\n * Whether or not to display a loading spinner while the data for the page is loaded.\n * @default true\n */\n displayLoadingSpinner?: boolean,\n /**\n * The data of the default create page.\n */\n createData?: CreateData & {\n /**\n * The data for the dialog when the user tries to leave the site with unsaved changes.\n */\n confirmUnsavedChangesDialogData?: ConfirmDialogData,\n /**\n * Whether or not leaving with unsaved changes should require a confirm dialog.\n * @default true\n */\n unsavedChangesRequireConfirmDialog?: boolean\n }\n};\n\n/**\n * The entity service that needs to be provided in the providers array of the create page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_CREATE_DATA_ENTITY_SERVICE: InjectionToken<EntityService<any>> = new InjectionToken<EntityService<any>>('NGX_CREATE_DATA_ENTITY_SERVICE');\n/**\n * The entity class that needs to be provided in the providers array of the create page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_CREATE_DATA_ENTITY: InjectionToken<EntityClassNewable<any>> = new InjectionToken<EntityClassNewable<any>>('NGX_CREATE_DATA_ENTITY');\n/**\n * The configuration that needs to be provided in the providers array of the create page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_CREATE_DATA: InjectionToken<PageCreateData<any>> = new InjectionToken<PageCreateData<any>>('NGX_CREATE_DATA');\n\n/**\n * A generic page that allows you to create a specific entity.\n * For this to work you need to provide some data for the route.\n */\n@Component({\n selector: 'ngx-mat-entity-create-page',\n templateUrl: './create-page.component.html',\n styleUrls: ['./create-page.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityCreatePageComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit, UnsavedChangesPage {\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The entity to create.\n */\n entity!: EntityType;\n /**\n * The entity before any changes have been made.\n * This is used to determine if leaving the page is possible without interruption.\n */\n entityPriorChanges!: EntityType;\n\n /**\n * Configuration data for this component.\n */\n data!: PageCreateDataInternal<EntityType>;\n\n /**\n * All validation errors of the entity.\n */\n validationErrors!: ValidationError[];\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = false;\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n /**\n * Whether or not the page has been loaded.\n */\n isLoaded: boolean = false;\n\n private inConfirmNavigation: boolean = false;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n get hasUnsavedChanges(): boolean {\n return this.isEntityDirty && this.data.createData.unsavedChangesRequireConfirmDialog;\n }\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly location: Location,\n private readonly injector: EnvironmentInjector,\n @Inject(NGX_CREATE_DATA_ENTITY_SERVICE)\n readonly entityService: EntityService<EntityType>,\n @Inject(NGX_CREATE_DATA_ENTITY)\n private readonly EntityClass: EntityClassNewable<EntityType>,\n @Inject(NGX_CREATE_DATA)\n private readonly inputData: PageCreateData<EntityType>,\n private readonly http: HttpClient,\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) { }\n\n async ngOnInit(): Promise<void> {\n this.data = new PageCreateDataBuilder(this.inputData, this.globalConfig).getResult();\n if (this.data == null) {\n this.confirmNavigateBack();\n\n throw new Error('No create data was provided for \"NGX_CREATE_DATA\". You need to provide a value in your routes providers array.');\n }\n\n this.entity = new this.EntityClass();\n EntityUtilities.setDefaultValues(this.entity);\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.entity);\n await this.checkIsEntityValid();\n\n this.isLoaded = true;\n setTimeout(() => this.checkOffset(), 1);\n // setTimeout(() => this.checkEntity(), 1);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n @HostListener('window:beforeunload')\n canDeactivate(): boolean {\n return !this.hasUnsavedChanges || this.inConfirmNavigation;\n }\n\n /**\n * Checks if the bottom row should be displayed as fixed.\n */\n @HostListener('window:scroll')\n checkOffset(): void {\n const scrollY: number = window.scrollY;\n const bottomRow: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row');\n const bottomRowContainer: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row-container');\n\n if (bottomRow && bottomRowContainer) {\n const bottomRowContainerOffset: number = bottomRowContainer.offsetTop;\n const windowHeight: number = window.innerHeight;\n\n if (scrollY + windowHeight >= bottomRowContainerOffset) {\n this.renderer.removeClass(bottomRow, 'fixed');\n }\n else {\n this.renderer.addClass(bottomRow, 'fixed');\n }\n }\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n await this.checkIsEntityValid();\n this.isEntityDirty = await EntityUtilities.isDirty(this.entity, this.entityPriorChanges, this.http);\n }\n\n private async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.entity, this.injector, 'create');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n }\n\n /**\n * Tries create the entity and navigate back afterwards.\n * Also handles the confirmation if required.\n */\n create(): void {\n if (!this.isEntityValid) {\n return;\n }\n if (!this.data.createData.createRequiresConfirmDialog) {\n this.confirmCreate();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.createData.confirmCreateDialogData)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmCreate();\n }\n });\n }\n\n private confirmCreate(): void {\n void this.entityService.create(this.entity).then(() => this.confirmNavigateBack());\n }\n\n /**\n * Tries to navigate back.\n */\n async navigateBack(): Promise<void> {\n if (!this.hasUnsavedChanges) {\n this.confirmNavigateBack();\n return;\n }\n\n const res: boolean = await this.openConfirmNavigationDialog();\n if (res) {\n this.confirmNavigateBack();\n }\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n async openConfirmNavigationDialog(): Promise<boolean> {\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.data.createData.confirmUnsavedChangesDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n return (await firstValueFrom(dialogRef.afterClosed())) ?? false;\n }\n\n private confirmNavigateBack(): void {\n this.inConfirmNavigation = true;\n this.location.back();\n }\n\n /**\n * Checks if the input with the given key is readonly.\n * @param key - The key for the input to check.\n * @returns Whether or not the input for the key is read only.\n */\n isReadOnly(key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.entity, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return metadata.isReadOnly(this.entity);\n });\n }\n}"," \n \n<div *ngIf=\"!isLoaded && data.displayLoadingSpinner\" class=\"container\">\n <br>\n <mat-spinner></mat-spinner>\n <br>\n</div>\n\n<div *ngIf=\"isLoaded\" class=\"container\">\n <br>\n\n <!------------>\n <!-- Header -->\n <!------------>\n <div class=\"header\">\n <div class=\"cancel-container\">\n <button type=\"button\" mat-raised-button class=\"back-button\" tabindex=\"-1\" [class.unsavedChanges]=\"hasUnsavedChanges\" (click)=\"navigateBack()\">\n <i class=\"fas fa-chevron-left\"></i>\n {{data.createData.cancelButtonLabel}}\n <i *ngIf=\"hasUnsavedChanges\" class=\"fas fa-warning\"></i>\n </button>\n </div>\n </div>\n\n <h1>{{data.createData.title}}</h1>\n\n <!----------->\n <!-- Input -->\n <!----------->\n <form>\n <ngx-mat-entity-form [hideOmitForCreate]=\"true\" [entity]=\"entity\" (selectedTabChange)=\"checkOffset()\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n\n <div class=\"bottom-row-container\">\n <div class=\"bottom-row container\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"create()\"\n >\n {{data.createData.createButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"validationErrors.length\" [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n </div>\n </form>\n\n <br>\n</div>","import { EnvironmentProviders, Provider, Type } from '@angular/core';\nimport { DefaultExport, Route } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { UnsavedChangesGuard } from '../../services/unsaved-changes.guard';\n\n/**\n * The definition for a route to use with the \"NgxMatEntityEditPageComponent\".\n */\nexport interface EditDataRoute extends Route {\n // eslint-disable-next-line jsdoc/require-jsdoc\n loadComponent: () => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>,\n // eslint-disable-next-line jsdoc/require-jsdoc\n providers: (Provider | EnvironmentProviders)[],\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string,\n // eslint-disable-next-line jsdoc/require-jsdoc\n path: string\n}\n\n/**\n * The default data for a edit route.\n */\nexport const defaultEditDataRoute: Omit<EditDataRoute, 'providers'> = {\n loadComponent: () => import('./edit-page.component').then(m => m.NgxMatEntityEditPageComponent),\n title: 'Edit',\n path: 'entities:id',\n canDeactivate: [UnsavedChangesGuard]\n};","import { PageEditData } from './edit-page.component';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { defaultTrue } from '../../functions/default-true.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { EditDataBuilder, EditDataInternal } from '../table/edit-dialog/edit-data.builder';\nimport { EditEntityDataInternal } from '../table/edit-dialog/edit-entity.builder';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type PageEditDataInternal<EntityType extends BaseEntityType<EntityType>> = Omit<EditEntityDataInternal<EntityType>, 'entity' | 'EntityServiceClass'> & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayLoadingSpinner: boolean,\n // eslint-disable-next-line jsdoc/require-jsdoc\n editData: EditDataInternal<EntityType> & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogDataInternal,\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean\n }\n};\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport class PageEditDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<PageEditDataInternal<EntityType>, PageEditData<EntityType>> {\n\n constructor(data: PageEditData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: PageEditData<EntityType>): PageEditDataInternal<EntityType> {\n const editData: EditDataInternal<EntityType> = new EditDataBuilder(this.globalConfig, data.editData)\n .withDefault('cancelButtonLabel', this.globalConfig.backLabel)\n .getResult();\n\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data.editData?.confirmUnsavedChangesDialogData)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesLabel)\n .getResult();\n\n return {\n editData: {\n ...editData,\n confirmUnsavedChangesDialogData: confirmUnsavedChangesDialogData,\n unsavedChangesRequireConfirmDialog: data.editData?.unsavedChangesRequireConfirmDialog ?? true\n },\n allowUpdate: data.allowUpdate ?? defaultTrue,\n allowDelete: data.allowDelete ?? defaultTrue,\n displayLoadingSpinner: data.displayLoadingSpinner ?? true\n };\n }\n}","import { Location, NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, ElementRef, EnvironmentInjector, HostListener, Inject, InjectionToken, OnInit, Renderer2, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActivatedRoute } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { PageEditDataBuilder, PageEditDataInternal } from './page-edit-data.builder';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { UnsavedChangesPage } from '../../services/unsaved-changes.guard';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../utilities/validation.utilities';\nimport { ConfirmDialogData } from '../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../form/form.component';\nimport { EditActionInternal } from '../table/edit-dialog/edit-data.builder';\nimport { EditEntityData } from '../table/edit-dialog/edit-entity-data';\nimport { EditData } from '../table/table-data';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n/**\n * The data that needs to be provided for a route to be able to edit a entity.\n */\nexport type PageEditData<EntityType extends BaseEntityType<EntityType>> = Omit<EditEntityData<EntityType>, 'entity' | 'EntityServiceClass'> & {\n /**\n * Whether or not to display a loading spinner while the entity for the page is loaded.\n * @default true\n */\n displayLoadingSpinner?: boolean,\n /**\n * The data of the default edit page.\n */\n editData?: EditData<EntityType> & {\n /**\n * The data for the dialog when the user tries to leave the site with unsaved changes.\n */\n confirmUnsavedChangesDialogData?: ConfirmDialogData,\n /**\n * Whether or not leaving with unsaved changes should require a confirm dialog.\n * @default true\n */\n unsavedChangesRequireConfirmDialog?: boolean\n }\n};\n\n/**\n * The entity service that needs to be provided in the providers array of the edit page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_EDIT_DATA_ENTITY_SERVICE: InjectionToken<EntityService<any>> = new InjectionToken<EntityService<any>>('NGX_EDIT_DATA_ENTITY_SERVICE');\n/**\n * The entity class that needs to be provided in the providers array of the edit page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_EDIT_DATA_ENTITY: InjectionToken<EntityClassNewable<any>> = new InjectionToken<EntityClassNewable<any>>('NGX_EDIT_DATA_ENTITY');\n/**\n * The configuration that needs to be provided in the providers array of the edit page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_EDIT_DATA: InjectionToken<PageEditData<any>> = new InjectionToken<PageEditData<any>>('NGX_EDIT_DATA');\n\n/**\n * A generic page that allows you to edit a specific entity.\n * For this to work you need to provide some data for the route.\n */\n@Component({\n selector: 'ngx-mat-entity-edit-page',\n templateUrl: './edit-page.component.html',\n styleUrls: ['./edit-page.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatMenuModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityEditPageComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit, UnsavedChangesPage {\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The entity that is being edited.\n */\n entity!: EntityType;\n /**\n * The entity before any changes have been made.\n */\n entityPriorChanges!: EntityType;\n\n /**\n * Configuration data for the component.\n */\n data!: PageEditDataInternal<EntityType>;\n\n /**\n * All validation errors of the entity.\n */\n validationErrors: ValidationError[] = [];\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = true;\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n /**\n * Whether or not the entity is readonly.\n */\n isEntityReadOnly!: boolean;\n /**\n * Whether or not the current user is allowed to delete the entity.\n */\n allowDelete!: boolean;\n\n /**\n * Whether or not the page has been loaded.\n */\n isLoaded: boolean = false;\n\n private inConfirmNavigation: boolean = false;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n get hasUnsavedChanges(): boolean {\n return this.isEntityDirty && this.data.editData.unsavedChangesRequireConfirmDialog;\n }\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly location: Location,\n private readonly route: ActivatedRoute,\n private readonly injector: EnvironmentInjector,\n @Inject(NGX_EDIT_DATA_ENTITY_SERVICE)\n readonly entityService: EntityService<EntityType>,\n @Inject(NGX_EDIT_DATA_ENTITY)\n private readonly EntityClass: EntityClassNewable<EntityType>,\n @Inject(NGX_EDIT_DATA)\n private readonly inputData: PageEditData<EntityType>,\n private readonly http: HttpClient,\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) { }\n\n async ngOnInit(): Promise<void> {\n this.data = new PageEditDataBuilder(this.inputData, this.globalConfig).getResult();\n if (this.data == null) {\n this.confirmNavigateBack();\n throw new Error('No edit data was provided for \"NGX_EDIT_DATA\". You need to provide a value in your routes providers array.');\n }\n\n const id: EntityType[keyof EntityType] = this.route.snapshot.paramMap.get('id') as EntityType[keyof EntityType];\n const foundEntity: EntityType | undefined = await this.entityService.findById(id);\n\n if (foundEntity == null) {\n this.confirmNavigateBack();\n throw new Error(`Could not find entity with id ${id}`);\n }\n\n this.entity = new this.EntityClass(foundEntity);\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.entity);\n\n runInInjectionContext(this.injector, () => {\n this.isEntityReadOnly = !this.data.allowUpdate(this.entityPriorChanges);\n this.allowDelete = this.data.allowDelete(this.entityPriorChanges);\n });\n this.isLoaded = true;\n setTimeout(() => this.checkOffset(), 1);\n setTimeout(() => void this.checkIsEntityValid(), 1);\n }\n\n /**\n * Checks if the bottom row should be displayed as fixed.\n */\n @HostListener('window:scroll')\n checkOffset(): void {\n const scrollY: number = window.scrollY;\n const bottomRow: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row');\n const bottomRowContainer: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row-container');\n\n if (bottomRow && bottomRowContainer) {\n const bottomRowContainerOffset: number = bottomRowContainer.offsetTop;\n const windowHeight: number = window.innerHeight;\n\n if (scrollY + windowHeight >= bottomRowContainerOffset) {\n this.renderer.removeClass(bottomRow, 'fixed');\n }\n else {\n this.renderer.addClass(bottomRow, 'fixed');\n }\n }\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n @HostListener('window:beforeunload')\n canDeactivate(): boolean {\n return !this.hasUnsavedChanges || this.inConfirmNavigation;\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n await this.checkIsEntityValid();\n this.isEntityDirty = await EntityUtilities.isDirty(this.entity, this.entityPriorChanges, this.http);\n }\n\n private async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.entity, this.injector, 'update');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n }\n\n /**\n * Tries to save the changes and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n edit(): void {\n if (this.isEntityReadOnly || !this.isEntityValid || !this.isEntityDirty) {\n return;\n }\n if (!this.data.editData.editRequiresConfirmDialog) {\n this.confirmEdit();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmEditDialogData)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmEdit();\n }\n });\n }\n\n private confirmEdit(): void {\n void this.entityService.update(this.entity, this.entityPriorChanges).then(() => this.confirmNavigateBack());\n }\n\n /**\n * Tries to delete the entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n delete(): void {\n if (!this.data.editData.deleteRequiresConfirmDialog) {\n this.confirmDelete();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmDeleteDialogData)\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmDelete();\n }\n });\n }\n\n private confirmDelete(): void {\n void this.entityService\n .delete(this.entityPriorChanges)\n .then(() => this.confirmNavigateBack());\n }\n\n /**\n * Tries to navigate back.\n */\n async navigateBack(): Promise<void> {\n if (!this.hasUnsavedChanges) {\n this.confirmNavigateBack();\n return;\n }\n\n const res: boolean = await this.openConfirmNavigationDialog();\n if (res) {\n this.confirmNavigateBack();\n }\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n async openConfirmNavigationDialog(): Promise<boolean> {\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.data.editData.confirmUnsavedChangesDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n return (await firstValueFrom(dialogRef.afterClosed())) ?? false;\n }\n\n private confirmNavigateBack(): void {\n this.inConfirmNavigation = true;\n EntityUtilities.resetChangesOnEntity(this.entity, this.entityPriorChanges);\n this.location.back();\n }\n\n /**\n * Runs the edit action on the entity.\n * @param action - The action to run.\n */\n runEditAction(action: EditActionInternal<EntityType>): void {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.entityPriorChanges);\n });\n\n if (!requireConfirmDialog) {\n this.confirmRunEditAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmRunEditAction(action);\n }\n });\n }\n\n private confirmRunEditAction(action: EditActionInternal<EntityType>): void {\n void runInInjectionContext(this.injector, async () => {\n await action.action(this.entity, this.entityPriorChanges);\n await this.checkEntity();\n });\n }\n\n /**\n * Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).\n * @param action - The EditAction to check.\n * @returns Whether or not the Action can be used.\n */\n editActionDisabled(action: EditActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => !action.enabled(this.entityPriorChanges));\n }\n}"," \n<!-- eslint-disable angular/no-call-expression -->\n<!-- eslint-disable angular/cyclomatic-complexity -->\n<div *ngIf=\"!isLoaded && data.displayLoadingSpinner\" class=\"container\">\n <br>\n <mat-spinner></mat-spinner>\n <br>\n</div>\n\n<div *ngIf=\"isLoaded\" class=\"container\">\n <br>\n\n <!------------>\n <!-- Header -->\n <!------------>\n <div class=\"header\">\n <div class=\"cancel-container\">\n <button type=\"button\" mat-raised-button class=\"back-button\" tabindex=\"-1\" [class.unsavedChanges]=\"hasUnsavedChanges\" (click)=\"navigateBack()\">\n <i class=\"fas fa-chevron-left\"></i>\n {{data.editData.cancelButtonLabel}}\n <i *ngIf=\"hasUnsavedChanges\" class=\"fas fa-warning\"></i>\n </button>\n </div>\n <div class=\"actions-container\">\n <button *ngIf=\"data.editData.actions.length\" type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.editData.actionsLabel}}\n </button>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of data.editData.actions\" type=\"button\" mat-menu-item [disabled]=\"editActionDisabled(action)\" (click)=\"runEditAction(action)\">\n {{action.displayName}}\n </button>\n </mat-menu>\n \n <button *ngIf=\"allowDelete\" type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"delete()\">\n {{data.editData.deleteButtonLabel}}\n </button>\n </div>\n </div>\n\n <h1>{{data.editData.title(entityPriorChanges)}}</h1>\n\n <!----------->\n <!-- Input -->\n <!----------->\n <form>\n <ngx-mat-entity-form [hideOmitForEdit]=\"true\" [isEntityReadOnly]=\"isEntityReadOnly\" [entity]=\"entity\" (selectedTabChange)=\"checkOffset()\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n\n <div class=\"bottom-row-container\">\n <div>\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"isEntityReadOnly || !isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"edit()\"\n >\n {{data.editData.confirmButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"validationErrors.length\" [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n </div>\n </form>\n\n <br>\n</div>","import { CreateDataBuilder, CreateDataInternal } from './create-data.builder';\nimport { CreateEntityData } from './create-entity-data';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType, EntityServiceClassNewable } from '../../../classes/entity.model';\nimport { NgxGlobalDefaultValues } from '../../../global-configuration-values';\n\n/**\n * The internal CreateEntityDialogData. Requires all default values the user can leave out.\n */\nexport class CreateEntityDataInternal<EntityType extends BaseEntityType<EntityType>> implements CreateEntityData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: EntityServiceClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createData: CreateDataInternal;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: EntityServiceClassNewable<EntityType>,\n createData: CreateDataInternal\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.createData = createData;\n }\n}\n\n/**\n * The Builder for the CreateEntityDialogData. Sets default values.\n */\nexport class CreateEntityDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<CreateEntityDataInternal<EntityType>, CreateEntityData<EntityType>> {\n\n constructor(data: CreateEntityData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: CreateEntityData<EntityType>): CreateEntityDataInternal<EntityType> {\n\n const createDialogData: CreateDataInternal = new CreateDataBuilder(this.globalConfig, data.createData).getResult();\n return new CreateEntityDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n createDialogData\n );\n }\n}","import { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, OnInit, Output, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { firstValueFrom } from 'rxjs';\n\nimport { CreateEntityData } from './create-entity-data';\nimport { CreateEntityDataInternal, CreateEntityDialogDataBuilder } from './create-entity-data.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { LodashUtilities } from '../../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { EntityService } from '../../../services/entity.service';\nimport { EntityUtilities } from '../../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../../utilities/validation.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../../form/form.component';\nimport { TooltipComponent } from '../../tooltip/tooltip.component';\n\n\n/**\n * The default dialog used to create new entities based on the configuration passed in the MAT_DIALOG_DATA \"inputData\".\n * Used by the ngx-mat-entity-table.\n *\n * It offers a lot of customization options which can be found in \"CreateEntityDialogData\".\n */\n@Component({\n selector: 'ngx-mat-entity-create-dialog',\n templateUrl: './create-entity-dialog.component.html',\n styleUrls: ['./create-entity-dialog.component.scss'],\n standalone: true,\n imports: [\n NgFor,\n NgIf,\n MatDialogModule,\n MatButtonModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityCreateDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n /**\n * Emits when the form is dirty.\n */\n @Output()\n unsavedChanges: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The services that handles the entity.\n */\n entityService!: EntityService<EntityType>;\n\n /**\n * The internal configuration data.\n */\n data!: CreateEntityDataInternal<EntityType>;\n\n private entityPriorChanges!: EntityType;\n\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = false;\n /**\n * The validation errors of the entity.\n */\n validationErrors: ValidationError[] = [];\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: CreateEntityData<EntityType>,\n readonly dialogRef: MatDialogRef<NgxMatEntityCreateDialogComponent<EntityType>>,\n private readonly injector: EnvironmentInjector,\n private readonly dialog: MatDialog,\n private readonly http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n ngOnInit(): void {\n this.data = new CreateEntityDialogDataBuilder(this.inputData, this.globalConfig).getResult();\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.data.entity);\n this.dialogRef.disableClose = true;\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n setTimeout(() => void this.checkIsEntityValid(), 1);\n }\n\n /**\n * Checks if the entity is valid.\n */\n async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.data.entity, this.injector, 'create');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n this.isEntityDirty = await EntityUtilities.isDirty(this.data.entity, this.entityPriorChanges, this.http);\n this.unsavedChanges.emit(this.isEntityDirty);\n }\n\n /**\n * Tries add the new entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async create(): Promise<void> {\n if (!this.isEntityValid) {\n return;\n }\n if (!this.data.createData.createRequiresConfirmDialog) {\n await this.confirmCreate();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.createData.confirmCreateDialogData)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmCreate();\n }\n }\n private async confirmCreate(): Promise<void> {\n await this.entityService.create(this.data.entity);\n this.dialogRef.close();\n }\n\n /**\n * Closes the dialog.\n */\n async cancel(): Promise<void> {\n if (!this.isEntityDirty || !this.data.createData.unsavedChangesRequireConfirmDialog) {\n this.confirmCancel();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.createData.confirmUnsavedChangesDialogData)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n this.confirmCancel();\n }\n }\n private confirmCancel(): void {\n this.dialogRef.close();\n }\n}","<div class=\"mat-dialog-title\">\n <div>{{data.createData.title}}</div>\n</div>\n\n<form>\n <mat-dialog-content>\n <ngx-mat-entity-form [hideOmitForCreate]=\"true\" [entity]=\"data.entity\" (formChange)=\"checkIsEntityValid()\">\n </ngx-mat-entity-form>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isEntityValid\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"create()\"\n >\n {{data.createData.createButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"validationErrors.length\" [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.createData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n</form>\n","import * as js2xml from 'js2xmlparser';\n\n/**\n * Encapsulates functionality of the js2xml package.\n */\nexport abstract class Js2XmlUtilities {\n /**\n * Returns a XML string representation of the specified object using the specified options.\n * @param root - Name of the xml root element.\n * @param value - The json value to convert. Will be a child of root.\n * @param options - Additional options for the conversion.\n * @returns The converted xml string.\n */\n static parse(root: string, value: unknown, options?: js2xml.IOptions): string {\n return js2xml.parse(root, value, options);\n }\n}","import { Type, inject } from '@angular/core';\n\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { Js2XmlUtilities } from '../../encapsulation/js-2-xml.utilities';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../encapsulation/reflect.utilities';\nimport { EntityService } from '../../services/entity.service';\nimport { FileUtilities } from '../../utilities/file.utilities';\n\nconst CSV_SEPARATOR: string = ';';\n\n/**\n * A multi select action that imports the data from a json file.\n * @param EntityServiceClass - The entity class that handles importing the file.\n */\nexport function importFromJsonMultiAction<EntityType extends BaseEntityType<EntityType>>(\n EntityServiceClass: Type<EntityService<EntityType>>\n): void {\n const service: EntityService<EntityType> = inject(EntityServiceClass);\n const htmlInput: HTMLInputElement = document.createElement('input');\n htmlInput.type = 'file';\n htmlInput.accept = 'application/json';\n htmlInput.multiple = false;\n htmlInput.onchange = () => {\n const file: File | undefined | null = htmlInput.files?.item(0);\n if (file != null) {\n void service.import(file);\n }\n };\n htmlInput.click();\n htmlInput.remove();\n}\n\n/**\n * A multi select action that exports the data as a json file.\n * @param selectedEntities - The selected entities to export.\n */\nexport function exportAsJsonMultiAction<EntityType extends BaseEntityType<EntityType>>(selectedEntities: EntityType[]): void {\n const blob: Blob = new Blob([JSON.stringify(selectedEntities, null, '\\t')], { type: '.json' });\n FileUtilities.downLoadBlob(blob, 'export.json');\n}\n\n/**\n * A multi select action that exports the data as a csv file.\n * Object values get stringified.\n * @param selectedEntities - The selected entities to export.\n */\nexport function exportAsCsvMultiAction<EntityType extends BaseEntityType<EntityType>>(selectedEntities: EntityType[]): void {\n const blob: Blob = new Blob([convertToCsv(selectedEntities, ReflectUtilities.ownKeys(selectedEntities[0]))], { type: '.csv' });\n FileUtilities.downLoadBlob(blob, 'export.csv');\n}\n\n/**\n * A multi select action that exports the data as a xml file.\n * Object values get stringified.\n * @param selectedEntities - The selected entities to export.\n */\nexport function exportAsXmlMultiAction<EntityType extends BaseEntityType<EntityType>>(selectedEntities: EntityType[]): void {\n const xmlString: string = Js2XmlUtilities.parse('values', selectedEntities);\n const blob: Blob = new Blob([xmlString], { type: '.xml' });\n FileUtilities.downLoadBlob(blob, 'export.xml');\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction convertToCsv<EntityType extends BaseEntityType<EntityType>>(array: EntityType[], headerList: (keyof EntityType)[]): string {\n const headerRow: string = headerList.join(CSV_SEPARATOR);\n let result: string = headerRow + '\\r\\n';\n for (const entity of array) {\n result += getLineForEntity<EntityType>(headerList, entity) + '\\r\\n';\n }\n return result;\n}\n\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction getLineForEntity<EntityType extends BaseEntityType<EntityType>>(headerList: (keyof EntityType)[], entity: EntityType): string {\n let line: string = '';\n for (const head of headerList) {\n line = line += getLineForHeader<EntityType>(entity, head);\n }\n line.slice(0, line.length - 1);\n return line;\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction getLineForHeader<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, head: keyof EntityType): string {\n const value: unknown = entity[head];\n if (LodashUtilities.isObject(value)) {\n return `${JSON.stringify(value)}${CSV_SEPARATOR}`;\n }\n if (LodashUtilities.isArray(value) && LodashUtilities.isObject(value[0])) {\n return `${value.map(v => JSON.stringify(v))}${CSV_SEPARATOR}`;\n }\n return `${entity[head]}${CSV_SEPARATOR}`;\n}","import { Component, Input, OnInit } from '@angular/core';\n\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The base component for custom display values.\n *\n * Contains the entity for which the component gets displayed.\n */\n// eslint-disable-next-line angular/prefer-standalone-component\n@Component({\n selector: 'ngx-mat-entity-base-display-column-value',\n template: ''\n})\nexport abstract class NgxMatEntityBaseDisplayColumnValueComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n /**\n * The entity for which the component gets displayed.\n */\n @Input()\n entity!: EntityType;\n\n constructor() { }\n\n ngOnInit(): void {\n if (this.entity == null) {\n throw new Error('The provided entity is null');\n }\n }\n}","import { EditDataBuilder, EditDataInternal } from './edit-data.builder';\nimport { EditEntityData } from './edit-entity-data';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType, EntityServiceClassNewable } from '../../../classes/entity.model';\nimport { defaultTrue } from '../../../functions/default-true.function';\nimport { NgxGlobalDefaultValues } from '../../../global-configuration-values';\n\n/**\n * The internal EditEntityData. Requires all default values the user can leave out.\n */\nexport class EditEntityDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditEntityData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: EntityServiceClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editData: EditDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowUpdate: (entity: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDelete: (entity: EntityType) => boolean;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: EntityServiceClassNewable<EntityType>,\n editData: EditDataInternal<EntityType>,\n allowUpdate: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.editData = editData;\n this.allowDelete = allowDelete;\n this.allowUpdate = allowUpdate;\n }\n}\n\n/**\n * The Builder for the EditEntityData. Sets default values.\n */\nexport class EditEntityDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditEntityDataInternal<EntityType>, EditEntityData<EntityType>> {\n\n constructor(data: EditEntityData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: EditEntityData<EntityType>): EditEntityDataInternal<EntityType> {\n const editDialogData: EditDataInternal<EntityType> = new EditDataBuilder(this.globalConfig, data.editData).getResult();\n return new EditEntityDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n editDialogData,\n data.allowUpdate ?? defaultTrue,\n data.allowDelete ?? defaultTrue\n );\n }\n}","import { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, OnInit, Output, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { firstValueFrom } from 'rxjs';\n\nimport { EditActionInternal } from './edit-data.builder';\nimport { EditEntityData } from './edit-entity-data';\nimport { EditEntityDataBuilder, EditEntityDataInternal } from './edit-entity.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../../../decorators/base/property-decorator-internal.data';\nimport { LodashUtilities } from '../../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { EntityService } from '../../../services/entity.service';\nimport { EntityTab, EntityUtilities } from '../../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../../utilities/validation.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../../form/form.component';\nimport { TooltipComponent } from '../../tooltip/tooltip.component';\n\n\n/**\n * The default dialog used to edit an existing entity based on the configuration passed in the MAT_DIALOG_DATA \"inputData\".\n * Used by the ngx-mat-entity-table.\n *\n * It offers a lot of customization options which can be found in \"EditEntityDialogData\".\n */\n@Component({\n selector: 'ngx-mat-entity-edit-dialog',\n templateUrl: './edit-entity-dialog.component.html',\n styleUrls: ['./edit-entity-dialog.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatDialogModule,\n MatButtonModule,\n NgxMatEntityConfirmDialogComponent,\n MatMenuModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityEditDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n /**\n * Emits when the form is dirty.\n */\n @Output()\n unsavedChanges: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The tabs of the dialog.\n */\n entityTabs!: EntityTab<EntityType>[];\n\n /**\n * The service of the provided entity.\n */\n entityService!: EntityService<EntityType>;\n\n /**\n * The entity before any changes have been applied.\n */\n entityPriorChanges!: EntityType;\n\n /**\n * The internal configuration data.\n */\n data!: EditEntityDataInternal<EntityType>;\n\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = true;\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * The validation errors of the entity.\n */\n validationErrors: ValidationError[] = [];\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n /**\n * Whether or not the entity is readonly.\n */\n isEntityReadOnly!: boolean;\n /**\n * Whether or not deleting the entity is allowed for the current user.\n */\n allowDelete!: boolean;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: EditEntityData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityEditDialogComponent<EntityType>>,\n private readonly injector: EnvironmentInjector,\n private readonly dialog: MatDialog,\n private readonly http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n ngOnInit(): void {\n this.data = new EditEntityDataBuilder(this.inputData, this.globalConfig).getResult();\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.data.entity);\n runInInjectionContext(this.injector, () => {\n this.isEntityReadOnly = !this.data.allowUpdate(this.entityPriorChanges);\n this.allowDelete = this.data.allowDelete(this.entityPriorChanges);\n });\n this.dialogRef.disableClose = true;\n this.entityTabs = EntityUtilities.getEntityTabs(this.data.entity, this.injector, false, true);\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n setTimeout(() => void this.checkIsEntityValid(), 1);\n }\n\n /**\n * Checks if the input with the given key is readonly.\n * @param key - The key for the input to check.\n * @returns Whether or not the input for the key is read only.\n */\n isReadOnly(key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.data.entity, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return this.isEntityReadOnly || metadata.isReadOnly(this.data.entity);\n });\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n await this.checkIsEntityValid();\n this.isEntityDirty = await EntityUtilities.isDirty(this.data.entity, this.entityPriorChanges, this.http);\n this.unsavedChanges.emit(this.isEntityDirty);\n }\n\n private async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.data.entity, this.injector, 'update');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n }\n\n /**\n * Tries to save the changes and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n edit(): void {\n if (this.isEntityReadOnly || !this.isEntityValid || !this.isEntityDirty) {\n return;\n }\n if (!this.data.editData.editRequiresConfirmDialog) {\n this.confirmEdit();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmEditDialogData)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmEdit();\n }\n });\n }\n\n private confirmEdit(): void {\n void this.entityService.update(this.data.entity, this.entityPriorChanges).then(() => this.dialogRef.close(1));\n }\n\n /**\n * Tries to delete the entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n delete(): void {\n if (!this.data.editData.deleteRequiresConfirmDialog) {\n this.confirmDelete();\n return;\n }\n\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmDeleteDialogData)\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmDelete();\n }\n });\n }\n\n private confirmDelete(): void {\n void this.entityService.delete(this.entityPriorChanges).then(() => this.dialogRef.close(2));\n }\n\n /**\n * Closes the dialog.\n */\n async cancel(): Promise<void> {\n if (!this.isEntityDirty || !this.data.editData.unsavedChangesRequireConfirmDialog) {\n this.confirmCancel();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmUnsavedChangesDialogData)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n this.confirmCancel();\n }\n }\n private confirmCancel(): void {\n EntityUtilities.resetChangesOnEntity(this.data.entity, this.entityPriorChanges);\n this.dialogRef.close(0);\n }\n\n\n /**\n * Runs the edit action on the entity.\n * @param action - The action to run.\n */\n runEditAction(action: EditActionInternal<EntityType>): void {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.entityPriorChanges);\n });\n\n if (!requireConfirmDialog) {\n this.confirmRunEditAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmRunEditAction(action);\n }\n });\n }\n\n private confirmRunEditAction(action: EditActionInternal<EntityType>): void {\n void runInInjectionContext(this.injector, async () => {\n await action.action(this.data.entity, this.entityPriorChanges);\n await this.checkEntity();\n });\n }\n\n /**\n * Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).\n * @param action - The EditAction to check.\n * @returns Whether or not the Action can be used.\n */\n editActionDisabled(action: EditActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => !action.enabled(this.entityPriorChanges));\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-dialog-title\">\n <div>{{data.editData.title(entityPriorChanges)}}</div>\n\n <div class=\"actions-container\">\n <button *ngIf=\"data.editData.actions.length\" type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.editData.actionsLabel}}\n </button>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of data.editData.actions\" type=\"button\" mat-menu-item [disabled]=\"editActionDisabled(action)\" (click)=\"runEditAction(action)\">\n {{action.displayName}}\n </button>\n </mat-menu>\n \n <button *ngIf=\"allowDelete\" type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"delete()\">\n {{data.editData.deleteButtonLabel}}\n </button>\n </div>\n</div>\n\n<form>\n <mat-dialog-content>\n <ngx-mat-entity-form [hideOmitForEdit]=\"true\" [isEntityReadOnly]=\"isEntityReadOnly\" [entity]=\"data.entity\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"isEntityReadOnly || !isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"edit()\"\n >\n {{data.editData.confirmButtonLabel}}\n </button>\n <ngx-mat-entity-tooltip *ngIf=\"validationErrors.length\" [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n </div>\n\n\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.editData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n</form>\n","import { Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\n\nimport { BaseEntityType } from '../classes/entity.model';\nimport { DynamicStyleClasses } from '../components/table/table-data';\n\n/**\n * Dynamically applies css classes based on a provided function.\n */\n@Directive({ selector: '[dynamicStyleClasses]', standalone: true })\nexport class DynamicStyleClassDirective<EntityType extends BaseEntityType<EntityType>> implements OnChanges {\n\n private styleClassesApplied: string[] = [];\n\n /**\n * The function that gets the css classes to dynamically apply.\n */\n @Input({ required: true })\n dynamicStyleClasses!: DynamicStyleClasses<EntityType>;\n\n /**\n * The input for the dynamic style classes function.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {}\n\n ngOnChanges(): void {\n this.applyDynamicClasses();\n }\n\n private applyDynamicClasses(): void {\n const classes: string[] | void = this.dynamicStyleClasses(this.entity);\n\n for (const styleClass of this.styleClassesApplied) {\n this.renderer.removeClass(this.element.nativeElement, styleClass);\n }\n this.styleClassesApplied = [];\n if (classes?.length) {\n for (const styleClass of classes) {\n this.renderer.addClass(this.element.nativeElement, styleClass);\n this.styleClassesApplied.push(styleClass);\n }\n }\n }\n}","import { SelectionModel } from '@angular/cdk/collections';\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, Input, OnInit, Output, ViewChild, inject, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { CreateEntityDataInternal, CreateEntityDialogDataBuilder } from './create-dialog/create-entity-data.builder';\nimport { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';\nimport { DisplayColumnValueComponent } from './display-column-value/display-column-value.component';\nimport { EditEntityData } from './edit-dialog/edit-entity-data';\nimport { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';\nimport { EditEntityDataBuilder, EditEntityDataInternal } from './edit-dialog/edit-entity.builder';\nimport { DisplayColumn, TableData } from './table-data';\nimport { BaseTableActionInternal, TableActionInternal, TableDataBuilder, TableDataInternal } from './table-data.builder';\nimport { BaseEntityType, Entity } from '../../classes/entity.model';\nimport { DynamicStyleClassDirective } from '../../directives/dynamic-style-class.directive';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { SelectionUtilities } from '../../utilities/selection.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\n/**\n * Generates a fully functional table for displaying, creating, updating and deleting entities\n * based on the configuration passed in the @Input \"tableData\".\n *\n * It offers a lot of customization options which can be found in \"TableData\".\n */\n@Component({\n selector: 'ngx-mat-entity-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n MatProgressSpinnerModule,\n NgxMatEntityCreateDialogComponent,\n NgxMatEntityEditDialogComponent,\n DisplayColumnValueComponent,\n DynamicStyleClassDirective\n ]\n})\nexport class NgxMatEntityTableComponent<EntityType extends BaseEntityType<Entity>> implements OnInit {\n\n /**\n * The configuration for the component.\n */\n @Input()\n tableData!: TableData<EntityType>;\n\n /**\n * Emits when there are unsaved changes on either the create or update dialog.\n */\n @Output()\n unsavedDialogChanges: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * The internal TableData.\n */\n data!: TableDataInternal<EntityType>;\n\n /**\n * Whether or not the table content is currently loading.\n */\n isLoading: boolean = true;\n /**\n * Whether or not the current user is allowed to create entries for the table.\n */\n allowCreate!: boolean;\n\n private entityService!: EntityService<EntityType>;\n /**\n * The paginator from the html.\n */\n @ViewChild(MatPaginator, { static: true })\n paginator!: MatPaginator;\n /**\n * The sort from the html.\n */\n @ViewChild(MatSort, { static: true })\n sort!: MatSort;\n /**\n * The filter (search) from the html.\n */\n @ViewChild('filter', { static: true })\n filter!: string;\n /**\n * The columns of the table.\n */\n displayedColumns!: string[];\n /**\n * The table dataSource.\n */\n dataSource: MatTableDataSource<EntityType> = new MatTableDataSource();\n /**\n * The selection of the table.\n */\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n\n /**\n * Provides functionality around material selections inside of tables.\n */\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n /**\n * The internal BaseTableAction. Sets default values.\n */\n importAction!: BaseTableActionInternal;\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly injector: EnvironmentInjector,\n private readonly router: Router,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n /**\n * Sets up all the configuration for the table and the EntityService.\n */\n ngOnInit(): void {\n this.data = new TableDataBuilder(this.globalConfig, this.tableData).getResult();\n runInInjectionContext(this.injector, () => {\n this.allowCreate = this.data.baseData.allowCreate();\n });\n\n this.importAction = new BaseTableActionInternal({\n ...this.data.baseData.importActionData,\n action: () => this.startImportJson()\n }, this.globalConfig);\n\n runInInjectionContext(this.injector, () => {\n this.entityService = inject<EntityService<EntityType>>(this.data.baseData.EntityServiceClass);\n });\n\n const givenDisplayColumns: string[] = this.data.baseData.displayColumns.map((v) => v.displayName);\n if (this.data.baseData.tableActions.filter(tA => tA.type === 'multi-select').length) {\n this.displayedColumns = ['select'].concat(givenDisplayColumns);\n }\n else {\n this.displayedColumns = givenDisplayColumns;\n }\n\n this.dataSource.sortingDataAccessor = (entity: EntityType, header: string) => {\n return runInInjectionContext(this.injector, () => {\n return this.data.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity) as string;\n });\n };\n this.dataSource.sort = this.sort;\n this.dataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr: string = this.data.baseData.searchString(entity);\n const formattedSearchString: string = searchStr.toLowerCase();\n const formattedFilterString: string = filter.toLowerCase();\n return formattedSearchString.includes(formattedFilterString);\n };\n this.dataSource.filter = this.filter;\n this.dataSource.paginator = this.paginator;\n\n this.entityService.entitiesSubject.subscribe((entities) => {\n this.dataSource.data = entities;\n this.selection.clear();\n });\n void this.entityService.read().then(() => {\n this.isLoading = false;\n });\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entity - The entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entity: EntityType, displayColumn: DisplayColumn<EntityType>): unknown {\n return runInInjectionContext(this.injector, () => {\n return displayColumn.value(entity);\n });\n }\n\n private startImportJson(): void {\n const input: HTMLInputElement = document.createElement('input');\n input.type = 'file';\n input.accept = 'application/json';\n input.onchange = async () => {\n if (input.files) {\n this.importJson(input.files[0]);\n }\n };\n input.click();\n }\n\n private importJson(file: File): void {\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.importAction.confirmDialogData)\n .withDefault('text', this.data.baseData.importActionData.confirmDialogData.text)\n .withDefault('title', this.importAction.displayName)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n void this.entityService.import(file);\n }\n });\n }\n\n /**\n * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.\n * @param entity - The entity that should be updated.\n * @param dCol - The display column. Is needed if a custom component was used that handles the click event differently.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n editEntity(entity: EntityType, dCol: DisplayColumn<EntityType>): void {\n if (dCol.disableClick == true) {\n return;\n }\n if (!(this.allowUpdate(entity) || this.allowRead(entity))) {\n return;\n }\n if (!this.data.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.data.baseData.edit) {\n this.data.baseData.edit(new this.data.baseData.EntityClass(entity));\n return;\n }\n if (this.data.baseData.defaultEdit == 'page') {\n this.editDefaultPage(new this.data.baseData.EntityClass(entity));\n return;\n }\n void this.editDefaultDialog(new this.data.baseData.EntityClass(entity));\n }\n\n /**\n * Whether updating the provided entity is allowed.\n * @param entity - The entity that the user wants to edit.\n * @returns True when the user can edit the provided entity and false otherwise.\n */\n allowUpdate(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.data.baseData.allowUpdate(entity);\n });\n }\n\n /**\n * Whether viewing the provided entity is allowed.\n * @param entity - The entity that the user wants to view.\n * @returns True when the user can view the provided entity and false otherwise.\n */\n allowRead(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.data.baseData.allowRead(entity);\n });\n }\n\n private editDefaultPage(entity: EntityType): void {\n void this.router.navigate(['', this.entityService.editBaseRoute, entity.id]);\n }\n\n private async editDefaultDialog(entity: EntityType): Promise<void> {\n const inputDialogData: EditEntityData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n allowUpdate: this.data.baseData.allowUpdate,\n allowDelete: this.data.baseData.allowDelete,\n editData: this.data.editData\n };\n const dialogData: EditEntityDataInternal<EntityType> = new EditEntityDataBuilder(inputDialogData, this.globalConfig).getResult();\n const dialogRef: MatDialogRef<NgxMatEntityEditDialogComponent<BaseEntityType<unknown>>, number> = this.dialog.open(NgxMatEntityEditDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.componentInstance.unsavedChanges.subscribe(res => this.unsavedDialogChanges.emit(res));\n const res: number | undefined = await firstValueFrom(dialogRef.afterClosed());\n this.unsavedDialogChanges.emit(false);\n if (res === 0) {\n const data: EntityType[] = this.dataSource.data;\n data[this.dataSource.data.findIndex((e) => e[this.entityService.idKey] === entity[this.entityService.idKey])] = entity;\n this.dataSource.data = data;\n this.selection.clear();\n }\n }\n\n /**\n * Creates a new Entity. This either calls the create-Method provided by the user or uses a default create-dialog.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n createEntity(): void {\n if (this.allowCreate) {\n if (!this.data.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n const entity: EntityType = new this.data.baseData.EntityClass();\n EntityUtilities.setDefaultValues(entity);\n if (this.data.baseData.create) {\n this.data.baseData.create(entity);\n return;\n }\n if (this.data.baseData.defaultCreate == 'page') {\n this.createDefaultPage();\n return;\n }\n void this.createDefaultDialog(entity);\n }\n }\n\n private createDefaultPage(): void {\n void this.router.navigateByUrl(this.entityService.createBaseRoute);\n }\n\n private async createDefaultDialog(entity: EntityType): Promise<void> {\n const dialogData: CreateEntityDataInternal<EntityType> = new CreateEntityDialogDataBuilder(\n {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n createData: this.data.createData\n },\n this.globalConfig\n ).getResult();\n const dialogRef: MatDialogRef<NgxMatEntityCreateDialogComponent<BaseEntityType<unknown>>> = this.dialog.open(NgxMatEntityCreateDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.componentInstance.unsavedChanges.subscribe(res => this.unsavedDialogChanges.emit(res));\n await firstValueFrom(dialogRef.afterClosed());\n this.unsavedDialogChanges.emit(false);\n }\n\n /**\n * Runs the TableAction for all selected entries.\n * Also handles confirmation with an additional dialog if configured.\n * @param action - The TableAction to run.\n */\n runTableAction(action: TableActionInternal<EntityType>): void {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.selection.selected);\n });\n\n if (!requireConfirmDialog) {\n this.confirmRunTableAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe(res => {\n if (res == true) {\n this.confirmRunTableAction(action);\n }\n });\n }\n\n private confirmRunTableAction(action: TableActionInternal<EntityType>): void {\n void runInInjectionContext(this.injector, async () => {\n await action.action(this.selection.selected);\n });\n }\n\n /**\n * Checks if an TableAction is disabled (e.g. Because no entries have been selected).\n * @param action - The TableAction to check.\n * @returns Whether or not the Action can be used.\n */\n tableActionDisabled(action: TableActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => {\n return !action.enabled(this.selection.selected);\n });\n }\n\n /**\n * Applies the search input to filter the table entries.\n * @param event - The keyup-event which contains the search-string of the user.\n */\n applyFilter(event: Event): void {\n const filterValue: string = (event.target as HTMLInputElement).value;\n this.dataSource.filter = filterValue.trim().toLowerCase();\n }\n\n\n}","<!-- eslint-disable angular/cyclomatic-complexity -->\n<!-- eslint-disable angular/no-call-expression -->\n<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\">\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.tableActions.length\"\n [class.col-lg-2]=\"allowCreate\"\n [class.col-lg-4]=\"!allowCreate\"\n [class.col-md-3]=\"allowCreate\"\n [class.col-md-6]=\"!allowCreate\"\n [class.col-sm-6]=\"allowCreate\"\n [class.col-sm-12]=\"!allowCreate\"\n >\n <button type=\"button\" class=\"actions-button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.baseData.tableActionsLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngIf=\"data.baseData.allowJsonImport\" type=\"button\" mat-menu-item [disabled]=\"tableActionDisabled(importAction)\" (click)=\"runTableAction(importAction)\">\n {{importAction.displayName}}\n </button>\n <button *ngFor=\"let action of data.baseData.tableActions\" type=\"button\" mat-menu-item [disabled]=\"tableActionDisabled(action)\" (click)=\"runTableAction(action)\">\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"allowCreate\"\n [class.col-lg-2]=\"data.baseData.tableActions.length\"\n [class.col-lg-4]=\"!data.baseData.tableActions.length\"\n [class.col-md-3]=\"data.baseData.tableActions.length\"\n [class.col-md-6]=\"!data.baseData.tableActions.length\"\n [class.col-sm-6]=\"data.baseData.tableActions.length\"\n [class.col-sm-12]=\"!data.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" mat-raised-button (click)=\"createEntity()\">\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table matSort [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\"\n [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\" [dynamicStyleClasses]=\"data.baseData.dynamicRowStyleClasses\" [entity]=\"entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(entity) : null\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\"\n [class.enabled]=\"!dCol.disableClick && (allowUpdate(entity) || allowRead(entity))\"\n [dynamicStyleClasses]=\"data.baseData.dynamicRowStyleClasses\" [entity]=\"entity\"\n (click)=\"editEntity(entity, dCol)\"\n >\n <ng-container *ngIf=\"dCol.Component\">\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n </ng-container>\n <ng-container *ngIf=\"!dCol.Component\">\n {{getDisplayColumnValue(entity, dCol)}}\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-spinner *ngIf=\"isLoading && data.baseData.displayLoadingSpinner\">\n </mat-spinner>\n\n <mat-paginator style=\"padding-top: 10px; padding-bottom: 10px;\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n</div>","/**\n * A bootstrap column value (a range from 1 - 12).\n */\nexport type Col = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * The base options for all propertyDecorators.\n */\nexport abstract class PropertyDecoratorConfig<ValueType> {\n /**\n * Whether or not the Property is displayed at all.\n * @default true\n */\n // eslint-disable-next-line typescript/no-explicit-any\n display?: boolean | ((entity: any) => boolean);\n /**\n * The name of the property used as a label for form fields.\n */\n displayName!: string;\n /**\n * Whether or not the Property is required.\n * @default true\n */\n // eslint-disable-next-line typescript/no-explicit-any\n required?: boolean | ((entity: any) => boolean);\n /**\n * Whether or not the property gets omitted when creating new Entities.\n * @default false\n */\n omitForCreate?: boolean;\n /**\n * Whether or not the property gets omitted when updating Entities.\n * @default false\n */\n omitForUpdate?: boolean;\n /**\n * Defines the width of the input property when used inside the default create or edit dialog.\n * Has 3 bootstrap values for different breakpoints for simple responsive design.\n * The first value sets the columns for the screen size lg, the second for md and the third for sm.\n * @default [6, 6, 12]\n */\n defaultWidths?: [Col, Col, Col];\n /**\n * Specifies the how to position this property when using default create/edit dialogs.\n * @default { row: -1, order: -1} (Adds the property at the end)\n */\n position?: Position;\n /**\n * Whether or not this property is readonly.\n * Can either be a boolean or a function returning a boolean.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n isReadOnly?: boolean | ((entity: any) => boolean);\n /**\n * The value that the property should be prefilled with. Only active in create mode.\n */\n default?: ValueType | (() => ValueType);\n /**\n * A function that runs just before the inputChangeEvent every time the property is changed.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n change?: (entity: any) => void;\n}\n\n/**\n * The options for positioning a property when using default create/edit dialogs.\n */\nexport interface Position {\n /**\n * Specifies a tab in which this property is displayed.\n * If no property has the tab metadata specified no tabs are displayed.\n * Ordering is ascending.\n * @default -1 (sets this property in the first tab)\n */\n tab?: number,\n /**\n * Specifies the name of the tab. Can only be set by one property in each tab.\n * Requires \"tab\" to be set.\n * @default `Tab ${numberOfTheTab}`\n */\n tabName?: string,\n /**\n * Specifies the (bootstrap)-row in which this property is displayed.\n * Ordering is ascending.\n * @default -1 (sets this property after the last row)\n */\n row?: number,\n /**\n * Specifies order of the input property inside the specified row.\n * Ordering is ascending.\n * @default -1 (sets this property at the end of the row)\n */\n order?: number\n}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { CreateData, DisplayColumn } from '../../components/table/table-data';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\nimport { DateRange } from '../date/date-decorator.data';\nimport { StringAutocompleteValues } from '../string/string-decorator.data';\n\n/**\n * Interface definition for the @array metadata.\n */\nexport abstract class ArrayDecoratorConfig<ValueType> extends PropertyDecoratorConfig<ValueType> {\n /**\n * The type of the items inside the array.\n */\n itemType!: DecoratorTypes;\n\n /**\n * Whether or not duplicate values are allowed inside the array.\n * @default false\n */\n allowDuplicates?: boolean;\n\n /**\n * The error dialog to display when the user tries to add a duplicate entry.\n */\n duplicatesErrorDialog?: ConfirmDialogData;\n}\n\n/**\n * The dialog data for the entities array edit dialog.\n */\nexport interface EditArrayItemDialogData<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The title of the default edit-dialog.\n */\n title?: (entity: EntityType) => string,\n /**\n * The label on the confirm-button of the default edit-dialog or page. Defaults to \"Save\".\n */\n confirmButtonLabel?: string,\n /**\n * The label on the cancel-button for the default edit-dialog or page. Defaults to \"Cancel\".\n */\n cancelButtonLabel?: string\n}\n\n/**\n * Definition for an array of Entities.\n */\nexport interface EntityArrayDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ArrayDecoratorConfig<EntityType[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.OBJECT,\n\n /**\n * The EntityClass used for generating the create inputs.\n */\n EntityClass: EntityClassNewable<EntityType>,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<EntityType>[],\n\n /**\n * The data for the add-item-dialog.\n * Can be omitted when adding items inline.\n */\n createDialogData?: CreateData,\n\n /**\n * The data for the edit-item-dialog.\n * Can be omitted when adding items inline.\n */\n editDialogData?: EditArrayItemDialogData<EntityType>,\n\n /**\n * Whether or not the form for adding items to the array\n * should be displayed inline.\n * @default true\n */\n createInline?: boolean,\n\n /**\n * The label for the add button when createInline is true.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button when createInline is true.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string\n}\n\n/**\n * Definition for an array of Dates.\n */\nexport interface DateArrayDecoratorConfig extends ArrayDecoratorConfig<Date[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string,\n\n /**\n * A function to get the minimum value of the date.\n */\n min?: (date?: Date) => Date,\n\n /**\n * A function to get the maximum value of the date.\n */\n max?: (date?: Date) => Date,\n\n /**\n * A filter function to do more specific filtering. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date | null | undefined>\n}\n\n/**\n * Definition for an array of DateTimes.\n */\nexport interface DateTimeArrayDecoratorConfig extends ArrayDecoratorConfig<Date[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_TIME,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string,\n\n /**\n * The selectable times.\n */\n times?: DropdownValue<Time>[],\n\n /**\n * The name to use as a label for the time form field.\n * @default 'Time'\n */\n timeDisplayName?: string,\n\n /**\n * A function to get the minimum value of the date.\n */\n minDate?: (date?: Date) => Date,\n\n /**\n * A function to get the maximum value of the date.\n */\n maxDate?: (date?: Date) => Date,\n\n /**\n * A filter function to do more specific date filtering. This could be the removal of e.g. All weekends.\n */\n filterDate?: DateFilterFn<Date | null | undefined>,\n\n /**\n * A function to get the minimum value of the time.\n */\n minTime?: (date?: Date) => Time,\n\n /**\n * A function to get the maximum value of the time.\n */\n maxTime?: (date?: Date) => Time,\n\n /**\n * A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.\n */\n filterTime?: ((time: Time) => boolean) | (() => boolean)\n}\n\n/**\n * Definition for an array of DateRanges.\n */\nexport interface DateRangeArrayDecoratorConfig extends ArrayDecoratorConfig<DateRange[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_RANGE,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<DateRange>[],\n\n /**\n * The label for the add button.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string,\n\n /**\n * A function to get the minimum value of the start date.\n */\n minStart?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the start date.\n */\n maxStart?: (date?: Date) => Date,\n /**\n * A function to get the minimum value of the end date.\n */\n minEnd?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the end date.\n */\n maxEnd?: (date?: Date) => Date,\n /**\n * A filter function to do more specific filtering on the disallowed end date values. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date>,\n /**\n * The placeholder for the start date of the date range picker.\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n * @default \"End\"\n */\n placeholderEnd?: string\n}\n\n/**\n * Definition for an array of strings displayed as a chips list.\n */\nexport interface StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<string[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING,\n\n /**\n * The class for the <i> tag used to remove an entry from the array.\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string,\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp\n}\n\n/**\n * Definition for an array of autocomplete strings displayed as a chips list.\n */\nexport interface AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<string[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING_AUTOCOMPLETE,\n\n /**\n * The class for the <i> tag used to remove an entry from the array.\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string,\n /**\n * The autocomplete values.\n */\n autocompleteValues: StringAutocompleteValues,\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp,\n /**\n * Whether or not valid inputs should be restricted to the autocomplete options.\n * @default false\n */\n restrictToOptions?: boolean\n}","import { AutocompleteStringChipsArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from './array-decorator-internal.data';\nimport { AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting array property metadata.\n * @param metadata - The metadata of the array property.\n * @returns The method that defines the metadata.\n * @throws When the given type of the array-items is unknown.\n */\nexport function array<EntityType extends BaseEntityType<EntityType>>(\n metadata: EntityArrayDecoratorConfig<EntityType>\n | StringChipsArrayDecoratorConfig\n | AutocompleteStringChipsArrayDecoratorConfig\n | DateArrayDecoratorConfig\n | DateTimeArrayDecoratorConfig\n | DateRangeArrayDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.itemType) {\n case DecoratorTypes.OBJECT:\n return baseProperty(new EntityArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults), DecoratorTypes.ARRAY);\n case DecoratorTypes.DATE:\n return baseProperty(new DateArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults), DecoratorTypes.ARRAY_DATE);\n case DecoratorTypes.DATE_TIME:\n return baseProperty(\n new DateTimeArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_DATE_TIME\n );\n case DecoratorTypes.DATE_RANGE:\n return baseProperty(\n new DateRangeArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_DATE_RANGE\n );\n case DecoratorTypes.STRING:\n return baseProperty(\n new StringChipsArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_STRING_CHIPS\n );\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n return baseProperty(\n new AutocompleteStringChipsArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\n );\n default:\n // eslint-disable-next-line typescript/no-explicit-any, typescript/no-unsafe-member-access\n throw new Error(`Unknown itemType ${(metadata as any).itemType}`);\n }\n}","import { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * The Definition for the @boolean metadata.\n */\nabstract class BooleanDecoratorConfig extends PropertyDecoratorConfig<boolean> {\n /**\n * Whether to display the booleans as a checkbox, a toggle button or as a dropdown.\n */\n displayStyle!: 'checkbox' | 'dropdown' | 'toggle';\n}\n\n/**\n * The configuration options for a boolean property displayed in a dropdown.\n */\nexport interface DropdownBooleanDecoratorConfig extends BooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The name of the true value if displayStyle dropdown is used.\n * @default 'Yes'\n */\n dropdownTrue?: string,\n /**\n * The name of the false value if displayStyle dropdown is used.\n * @default 'No'\n */\n dropdownFalse?: string\n}\n\n/**\n * The configuration options for a boolean property displayed as a checkbox.\n */\nexport interface CheckboxBooleanDecoratorConfig extends BooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'checkbox'\n}\n/**\n * The configuration options for a boolean property displayed as a mat-toggle.\n */\nexport interface ToggleBooleanDecoratorConfig extends BooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'toggle'\n}","import { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from './boolean-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting boolean property metadata.\n * @param metadata - The metadata of the boolean property.\n * @returns The method that defines the metadata.\n */\nexport function boolean(\n metadata: CheckboxBooleanDecoratorConfig | ToggleBooleanDecoratorConfig | DropdownBooleanDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(\n new DropdownBooleanDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.BOOLEAN_DROPDOWN\n );\n }\n else if (metadata.displayStyle === 'checkbox') {\n return baseProperty(new CheckboxBooleanDecoratorConfigInternal(metadata), DecoratorTypes.BOOLEAN_CHECKBOX);\n }\n else {\n return baseProperty(new ToggleBooleanDecoratorConfigInternal(metadata), DecoratorTypes.BOOLEAN_TOGGLE);\n }\n}","import { Type } from '@angular/core';\n\nimport { CustomDecoratorConfig } from './custom-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../components/input/base-input.component';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { defaultTrue } from '../../functions/default-true.function';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The default function to use for checking if the value is dirty.\n * @param value - The current value.\n * @param valuePriorChanges - The value before any changes.\n * @returns Whether or not the provided value has been changed.\n */\nfunction defaultIsEqual<ValueType>(value: ValueType, valuePriorChanges: ValueType): boolean {\n return LodashUtilities.isEqual(value, valuePriorChanges);\n}\n\n/**\n * The internal config for the @custom decorator.\n * Sets default values.\n */\nexport class CustomDecoratorConfigInternal<\n EntityType extends BaseEntityType<EntityType>,\n ValueType,\n MetadataType extends BaseEntityType<MetadataType>,\n ComponentType extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, ValueType, MetadataType>\n> extends PropertyDecoratorConfigInternal<ValueType> implements CustomDecoratorConfig<EntityType, ValueType, MetadataType, ComponentType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n component: Type<ComponentType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n isValid: (value: ValueType, omit?: 'create' | 'update') => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n isEqual: (value: ValueType, valuePriorChanges: ValueType, metadata: CustomDecoratorConfig<EntityType, ValueType, MetadataType, ComponentType>) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n customMetadata: MetadataType;\n\n constructor(data: CustomDecoratorConfig<EntityType, ValueType, MetadataType, ComponentType>) {\n super(data);\n this.component = data.component;\n this.isValid = data.isValid ?? defaultTrue;\n this.isEqual = data.isEqual ?? defaultIsEqual;\n this.customMetadata = data.customMetadata;\n }\n}","import { CustomDecoratorConfigInternal } from './custom-decorator-internal.data';\nimport { CustomDecoratorConfig } from './custom-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting custom property metadata.\n * @param metadata - The metadata of the custom property.\n * @param metadataKeysToReset - Any metadata keys which values should be set to undefined on reset.\n * @returns The method that defines the metadata.\n */\nexport function custom<\n ValueType,\n CustomMetadataType extends BaseEntityType<CustomMetadataType>,\n EntityType extends BaseEntityType<EntityType>\n>(\n metadata: CustomDecoratorConfig<\n EntityType,\n ValueType,\n CustomMetadataType,\n // eslint-disable-next-line typescript/no-explicit-any\n any\n >,\n metadataKeysToReset?: string[]\n): (target: object, propertyKey: string) => void {\n return baseProperty<DecoratorTypes.CUSTOM, CustomMetadataType>(\n new CustomDecoratorConfigInternal(metadata),\n DecoratorTypes.CUSTOM,\n metadataKeysToReset\n );\n}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * This is the needed type for an property that should be displayed as a date range.\n */\nexport interface DateRange {\n /**\n * The start date of the range.\n */\n start: Date,\n /**\n * The end date of the range.\n */\n end: Date,\n /**\n * The actual Date values. These are needed if the date range might contain some values that are disabled.\n * E.g. When you build a tool to request vacation you may want the user to select 3 weeks in the range picker\n * but don't want the weekend dates in the final result.\n */\n values: Date[]\n}\n\n/**\n * Definition for the @date metadata.\n */\nabstract class DateDecoratorConfig<ValueType> extends PropertyDecoratorConfig<ValueType> {\n /**\n * How to display the date.\n */\n displayStyle!: 'date' | 'datetime' | 'daterange';\n}\n\n/**\n * The configuration options for a date property displayed as a default single date picker.\n */\nexport interface DefaultDateDecoratorConfig extends DateDecoratorConfig<Date> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'date',\n /**\n * A function to get the minimum value of the date.\n */\n min?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the date.\n */\n max?: (date?: Date) => Date,\n /**\n * A filter function to do more specific filtering. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date | null | undefined>\n}\n\n/**\n * The configuration options for a date property displayed as a date range.\n */\nexport interface DateRangeDateDecoratorConfig extends DateDecoratorConfig<DateRange> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'daterange',\n /**\n * A function to get the minimum value of the start date.\n */\n minStart?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the start date.\n */\n maxStart?: (date?: Date) => Date,\n /**\n * A function to get the minimum value of the end date.\n */\n minEnd?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the end date.\n */\n maxEnd?: (date?: Date) => Date,\n /**\n * A filter function to do more specific filtering on the disallowed end date values. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date>,\n /**\n * The placeholder for the start date of the date range picker.\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n * @default \"End\"\n */\n placeholderEnd?: string\n}\n\n/**\n * The configuration options for a date property displayed as date time.\n */\nexport interface DateTimeDateDecoratorConfig extends DateDecoratorConfig<Date> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'datetime',\n /**\n * The selectable times.\n */\n times?: DropdownValue<Time | undefined>[],\n /**\n * The name to use as a label for the time form field.\n * @default 'Time'\n */\n timeDisplayName?: string,\n /**\n * A function to get the minimum value of the date.\n */\n minDate?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the date.\n */\n maxDate?: (date?: Date) => Date,\n /**\n * A filter function to do more specific date filtering. This could be the removal of e.g. All weekends.\n */\n filterDate?: DateFilterFn<Date | null | undefined>,\n /**\n * A function to get the minimum value of the time.\n */\n minTime?: (date?: Date) => Time,\n /**\n * A function to get the maximum value of the time.\n */\n maxTime?: (date?: Date) => Time,\n /**\n * A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.\n */\n filterTime?: ((time: Time) => boolean) | (() => boolean)\n}","import { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from './date-decorator-internal.data';\nimport { DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting date property metadata.\n * @param metadata - The metadata of the date property.\n * @returns The method that defines the metadata.\n */\nexport function date(\n metadata: DefaultDateDecoratorConfig | DateRangeDateDecoratorConfig | DateTimeDateDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'date') {\n return baseProperty(new DefaultDateDecoratorConfigInternal(metadata), DecoratorTypes.DATE);\n }\n else if (metadata.displayStyle === 'datetime') {\n return baseProperty(\n new DateTimeDateDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.DATE_TIME,\n [EntityUtilities.TIME_KEY]\n );\n }\n else {\n return baseProperty(\n new DateRangeDateDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.DATE_RANGE\n );\n }\n}","import { FileDataWithFile, FileDataWithUrl } from './file-decorator-internal.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * The type of a property annotated with @file.\n */\nexport type FileData = FileDataWithFile | FileDataWithUrl;\n\n/**\n * Definition for the @file metadata.\n */\nabstract class FileDecoratorConfig extends PropertyDecoratorConfig<FileData> {\n /**\n * Specifies whether or not the decorated property can have multiple files.\n */\n multiple!: boolean;\n\n /**\n * The type of the upload.\n */\n type!: 'image' | 'other';\n\n /**\n * The class for the <i> tag used to remove a file from the input.\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string;\n\n /**\n * Whether or not the file should be displayed inside a preview.\n * @default true\n */\n preview?: boolean;\n\n /**\n * Specifies allowed File types like 'image/jpg' etc.\n * Allows every file type if not set.\n */\n allowedMimeTypes?: string[];\n\n /**\n * The error dialog to display when the user inputs files that are not of the allowed mime types.\n */\n mimeTypeErrorDialog?: ConfirmDialogData;\n\n /**\n * The maximum allowed size of a single file in MB.\n * @default 10\n */\n maxSize?: number;\n\n /**\n * The error dialog to display when the user inputs a single file that is bigger than the 'maxSize' value.\n */\n maxSizeErrorDialog?: ConfirmDialogData;\n\n /**\n * The maximum allowed size of all files in MB.\n * @default 100\n */\n maxSizeTotal?: number;\n\n /**\n * The error dialog to display when the user inputs files which are in total bigger than the 'maxSizeTotal' value.\n */\n maxSizeTotalErrorDialog?: ConfirmDialogData;\n\n /**\n * Defines whether or not a dropdown box is displayed.\n * @default\n * true // when multiple is set to true.\n * false // when multiple is set to false.\n */\n dragAndDrop?: boolean;\n}\n\n/**\n * Definition for a default file.\n */\nexport interface DefaultFileDecoratorConfig extends FileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'other',\n // eslint-disable-next-line jsdoc/require-jsdoc\n preview?: false\n}\n\n/**\n * Definition for a image file.\n */\nexport interface ImageFileDecoratorConfig extends FileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'image',\n /**\n * Specifies allowed File types like image/jpg etc. In a comma separated string.\n * @default ['image/*']\n */\n allowedMimeTypes?: string[],\n /**\n * Url to the file that gets displayed in the preview when no file has been selected yet.\n */\n previewPlaceholderUrl?: string\n}","import { DefaultFileDecoratorConfig, FileData, ImageFileDecoratorConfig } from './file-decorator.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * Contains data about a file property where a blob exists.\n */\nexport interface FileDataWithFile {\n /**\n * The name of the file.\n */\n name: string,\n /**\n * The file data itself in form of a blob.\n */\n file: Blob,\n /**\n * The mime type of the file.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n type: string,\n /**\n * The size of the file in bytes.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n size: number,\n /**\n * The url where the blob is saved.\n */\n url?: string\n}\n\n/**\n * Contains data about a file property where no blob exists.\n */\nexport interface FileDataWithUrl {\n /**\n * The name of the file.\n */\n name: string,\n /**\n * The file data itself in form of a blob.\n */\n file?: Blob,\n /**\n * The mime type of the file.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n type: string,\n /**\n * The size of the file in bytes.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n size: number,\n /**\n * The url where the blob is saved.\n */\n url: string\n}\n\n/**\n * The internal DefaultFileDecoratorConfig. Sets default values.\n */\nexport class DefaultFileDecoratorConfigInternal extends PropertyDecoratorConfigInternal<FileData> implements DefaultFileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'other';\n // eslint-disable-next-line jsdoc/require-jsdoc\n preview: false;\n // eslint-disable-next-line jsdoc/require-jsdoc\n multiple: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowedMimeTypes: string[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSize: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotal: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n mimeTypeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotalErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dragAndDrop: boolean;\n\n constructor(data: DefaultFileDecoratorConfig) {\n super(data);\n this.type = data.type;\n this.preview = false;\n this.multiple = data.multiple;\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.allowedMimeTypes = data.allowedMimeTypes ?? ['*'];\n this.maxSize = data.maxSize ?? 10;\n this.maxSizeTotal = data.maxSizeTotal ?? 100;\n this.mimeTypeErrorDialog = data.mimeTypeErrorDialog ?? getDefaultMimeTypeErrorDialogData(data);\n this.maxSizeErrorDialog = data.maxSizeErrorDialog ?? getDefaultMaxSizeErrorDialogData(data);\n this.maxSizeTotalErrorDialog = data.maxSizeTotalErrorDialog ?? getDefaultMaxSizeTotalErrorDialogData(data);\n this.dragAndDrop = data.dragAndDrop ?? data.multiple;\n }\n}\n\n/**\n * The internal ImageFileDecoratorConfig. Sets default values.\n */\nexport class ImageFileDecoratorConfigInternal extends PropertyDecoratorConfigInternal<FileData> implements ImageFileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'image';\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowedMimeTypes: string[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n multiple: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n preview: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n previewPlaceholderUrl?: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSize: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotal: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n mimeTypeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotalErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dragAndDrop: boolean;\n\n constructor(data: ImageFileDecoratorConfig) {\n super(data);\n this.type = data.type;\n this.allowedMimeTypes = data.allowedMimeTypes ?? ['image/*'];\n this.multiple = data.multiple;\n this.preview = data.preview ?? true;\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.maxSize = data.maxSize ?? 10;\n this.maxSizeTotal = data.maxSizeTotal ?? 100;\n this.mimeTypeErrorDialog = data.mimeTypeErrorDialog ?? getDefaultMimeTypeErrorDialogData(data);\n this.maxSizeErrorDialog = data.maxSizeErrorDialog ?? getDefaultMaxSizeErrorDialogData(data);\n this.maxSizeTotalErrorDialog = data.maxSizeTotalErrorDialog ?? getDefaultMaxSizeTotalErrorDialogData(data);\n this.previewPlaceholderUrl = data.previewPlaceholderUrl;\n this.dragAndDrop = data.dragAndDrop ?? data.multiple;\n }\n}\n\n/**\n * Gets the default dialog data for the error dialog to display\n * when the user tries to add a file with a wrong type.\n * @param data - The File Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultMimeTypeErrorDialogData(data: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): ConfirmDialogData {\n return {\n type: data.mimeTypeErrorDialog?.type ?? 'info-only',\n\n text: data.mimeTypeErrorDialog?.text ?? (data.multiple ? ['One of the uploaded files has the wrong type.'] : ['The uploaded file has the wrong type.']),\n title: data.mimeTypeErrorDialog?.title ?? (data.multiple ? 'Error adding files' : 'Error adding file'),\n confirmButtonLabel: data.mimeTypeErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.mimeTypeErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.mimeTypeErrorDialog?.requireConfirmation,\n confirmationText: data.mimeTypeErrorDialog?.confirmationText\n };\n}\n\n/**\n * Gets the default dialog data for the error dialog to display\n * when the user tries to add a single file that is bigger than the allowed maxSize.\n * @param data - The File Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultMaxSizeErrorDialogData(data: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): ConfirmDialogData {\n return {\n type: data.mimeTypeErrorDialog?.type ?? 'info-only',\n\n text: data.mimeTypeErrorDialog?.text ?? (data.multiple ? ['One of the uploaded files is too big'] : ['The uploaded files is too big']),\n title: data.mimeTypeErrorDialog?.title ?? (data.multiple ? 'Error adding files' : 'Error adding file'),\n confirmButtonLabel: data.mimeTypeErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.mimeTypeErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.mimeTypeErrorDialog?.requireConfirmation,\n confirmationText: data.mimeTypeErrorDialog?.confirmationText\n };\n}\n\n/**\n * Gets the default dialog data for the error dialog to display\n * when the user tries to add a single file that is bigger than the allowed maxSize.\n * @param data - The File Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultMaxSizeTotalErrorDialogData(data: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): ConfirmDialogData {\n return {\n type: data.mimeTypeErrorDialog?.type ?? 'info-only',\n text: data.mimeTypeErrorDialog?.text ?? ['The size of all files combined is too big'],\n title: data.mimeTypeErrorDialog?.title ?? (data.multiple ? 'Error adding files' : 'Error adding file'),\n confirmButtonLabel: data.mimeTypeErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.mimeTypeErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.mimeTypeErrorDialog?.requireConfirmation,\n confirmationText: data.mimeTypeErrorDialog?.confirmationText\n };\n}","import { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from './file-decorator-internal.data';\nimport { DefaultFileDecoratorConfig, ImageFileDecoratorConfig } from './file-decorator.data';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting file property metadata.\n * @param metadata - The metadata of the file property.\n * @returns The method that defines the metadata.\n * @throws When an unknown metadata type was provided.\n */\nexport function file(metadata: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): (target: object, propertyKey: string) => void {\n switch (metadata.type) {\n case 'other':\n return baseProperty(\n new DefaultFileDecoratorConfigInternal(metadata),\n DecoratorTypes.FILE_DEFAULT,\n [EntityUtilities.FILENAMES_KEY]\n );\n case 'image':\n return baseProperty(\n new ImageFileDecoratorConfigInternal(metadata),\n DecoratorTypes.FILE_IMAGE,\n [EntityUtilities.FILENAMES_KEY, EntityUtilities.MULTI_PREVIEW_IMAGES_KEY, EntityUtilities.SINGLE_PREVIEW_IMAGE_KEY]\n );\n default:\n // eslint-disable-next-line typescript/no-unsafe-member-access, typescript/no-explicit-any\n throw new Error(`Unknown metadata type ${(metadata as any).type}`);\n }\n}","import { HasManyDecoratorConfigInternal } from './has-many-decorator-internal.data';\nimport { HasManyDecoratorConfig } from './has-many-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting has many property metadata.\n * @param metadata - The metadata of the has many property.\n * @returns The method that defines the metadata.\n */\nexport function hasMany<EntityType extends BaseEntityType<EntityType>, RelatedBaseEntityType extends BaseEntityType<RelatedBaseEntityType>>(\n metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(\n new HasManyDecoratorConfigInternal<EntityType, RelatedBaseEntityType>(\n metadata,\n needsUpdateGlobalDefaults\n ),\n DecoratorTypes.HAS_MANY\n );\n}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type NumberDropdownValues =\n DropdownValue<number | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<number | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<number | undefined>[]>)\n\n/**\n * Definition for the @number metadata.\n */\nabstract class NumberDecoratorConfig extends PropertyDecoratorConfig<number> {\n /**\n * Whether to display the number in a single line or as a dropdown.\n */\n displayStyle!: 'line' | 'dropdown' | 'slider';\n}\n\n/**\n * The configuration options for a number property displayed in a default number input.\n */\nexport interface DefaultNumberDecoratorConfig extends NumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line',\n /**\n * The minimum value of the number.\n */\n min?: number,\n /**\n * The maximum value of the number.\n */\n max?: number\n}\n\n/**\n * The configuration options for a number property displayed in a dropdown.\n */\nexport interface DropdownNumberDecoratorConfig extends NumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value.\n */\n dropdownValues: NumberDropdownValues\n}\n\n/**\n * The configuration options for a number property displayed as a slider input.\n */\nexport interface SliderNumberDecoratorConfig extends NumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'slider',\n /**\n * The minimum value of the number.\n */\n min?: number,\n /**\n * The maximum value of the number.\n */\n max?: number,\n /**\n * How big a single step is at which the thumb label will snap.\n */\n step?: number,\n /**\n * Function that transforms the value to display inside the thumb label.\n */\n formatThumbLabelValue?: (value: number) => string,\n /**\n * Whether or not ticks should be displayed.\n */\n showTickMarks?: boolean\n}","import { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\nimport { dropdownValuesToFunction } from '../../functions/dropdown-values-to-function.function';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class DefaultNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal<number> implements DefaultNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line';\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: number;\n\n constructor(data: DefaultNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.max = data.max;\n this.min = data.min;\n }\n}\n\n/**\n * The internal DropdownNumberDecoratorConfig. Sets default values.\n */\nexport class DropdownNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal<number>\n implements DropdownNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n dropdownValues: ((entity: any) => Promise<DropdownValue<number | undefined>[]>);\n\n constructor(data: DropdownNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = dropdownValuesToFunction(data.dropdownValues);\n }\n}\n\n/**\n * The internal SliderNumberDecoratorConfig. Sets default values.\n */\nexport class SliderNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal<number> implements SliderNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'slider';\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n step?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n formatThumbLabelValue: (value: number) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n showTickMarks?: boolean;\n\n constructor(data: SliderNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.max = data.max;\n this.min = data.min;\n this.step = data.step;\n this.formatThumbLabelValue = data.formatThumbLabelValue ?? defaultFormatThumbLabelValue;\n this.showTickMarks = data.showTickMarks;\n }\n}\n\n/**\n * The default function to format values for the number slider thumb label.\n * @param value - The value of the slider.\n * @returns Just the value without any formatting done.\n */\nexport function defaultFormatThumbLabelValue(value: number): string {\n return value.toString();\n}","import { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from './number-decorator-internal.data';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting number property metadata.\n * @param metadata - The metadata of the number property.\n * @returns The method that defines the metadata.\n */\nexport function number(\n metadata: DefaultNumberDecoratorConfig | DropdownNumberDecoratorConfig | SliderNumberDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.displayStyle) {\n case 'dropdown':\n return baseProperty(new DropdownNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER_DROPDOWN);\n case 'slider':\n return baseProperty(new SliderNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER_SLIDER);\n default:\n return baseProperty(new DefaultNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER);\n }\n}","import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type ObjectDropdownValues<EntityType extends BaseEntityType<EntityType>> =\n DropdownValue<EntityType | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<EntityType | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<EntityType | undefined>[]>)\n\n/**\n * Definition for the @object metadata.\n */\nabstract class ObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends PropertyDecoratorConfig<EntityType> {\n /**\n * The class of the object. Is used to call the constructor so that all metadata is initialized.\n */\n EntityClass!: EntityClassNewable<EntityType>;\n\n /**\n * How to display the object.\n *\n * The objects properties are added as input fields in an section of the entity.\n * Useful if the object only contains a few properties (e.g. A address on a user).\n */\n displayStyle!: 'dropdown' | 'inline';\n\n /**\n * Some properties of the objects entity class that should be omitted.\n */\n omit?: (keyof EntityType)[];\n}\n\n/**\n * The configuration options for a object property.\n */\nexport interface DefaultObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ObjectDecoratorConfig<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'inline'\n}\n\n/**\n * The configuration options for a dropdown object property.\n */\nexport interface DropdownObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ObjectDecoratorConfig<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value.\n * Can also receive a function to determine the values.\n */\n dropdownValues: ObjectDropdownValues<EntityType>\n}","import { DefaultObjectDecoratorConfig, DropdownObjectDecoratorConfig } from './object-decorator.data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { dropdownValuesToFunction } from '../../functions/dropdown-values-to-function.function';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultObjectDecoratorConfig. Sets default values.\n */\nexport class DefaultObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements DefaultObjectDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'inline';\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n omit: (keyof EntityType)[];\n\n constructor(data: DefaultObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.EntityClass = data.EntityClass;\n this.omit = data.omit ?? [];\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n }\n}\n\n/**\n * The internal DropdownObjectDecoratorConfig. Sets default values.\n */\nexport class DropdownObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements DropdownObjectDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n omit: (keyof EntityType)[];\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n dropdownValues: ((entity: any) => Promise<DropdownValue<EntityType | undefined>[]>);\n\n constructor(data: DropdownObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.EntityClass = data.EntityClass;\n this.dropdownValues = dropdownValuesToFunction(data.dropdownValues);\n this.omit = data.omit ?? [];\n this.defaultWidths = data.defaultWidths ?? [6, 6, 12];\n }\n}","import { DefaultObjectDecoratorConfigInternal, DropdownObjectDecoratorConfigInternal } from './object-decorator-internal.data';\nimport { DefaultObjectDecoratorConfig, DropdownObjectDecoratorConfig } from './object-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting object property metadata.\n * @param metadata - The metadata of the object property.\n * @returns The method that defines the metadata.\n */\nexport function object<EntityType extends BaseEntityType<EntityType>>(\n metadata: DefaultObjectDecoratorConfig<EntityType> | DropdownObjectDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n switch (metadata.displayStyle) {\n case 'dropdown':\n return baseProperty(new DropdownObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT_DROPDOWN);\n default:\n return baseProperty(new DefaultObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT);\n }\n}","import { ReferencesManyDecoratorConfigInternal } from './references-many-decorator-internal.data';\nimport { ReferencesManyDecoratorConfig } from './references-many-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting references many property metadata.\n * @param metadata - The metadata of the references many property.\n * @returns The method that defines the metadata.\n */\nexport function referencesMany<EntityType extends BaseEntityType<EntityType>>(\n metadata: ReferencesManyDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(\n new ReferencesManyDecoratorConfigInternal<EntityType>(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.REFERENCES_MANY\n );\n}","import { ReferencesOneDecoratorConfig } from './references-one-decorator.data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { defaultGetEntityForId } from '../references-many/references-many-decorator-internal.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class ReferencesOneDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements ReferencesOneDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n getReferencedEntities: () => Promise<EntityType[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n getDropdownValues: (referencedEntities: EntityType[]) => DropdownValue<string>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n getEntityForId: (entityId: string, allReferencedEntities: EntityType[]) => EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n\n constructor(data: ReferencesOneDecoratorConfig<EntityType>) {\n super(data);\n this.getReferencedEntities = data.getReferencedEntities;\n this.getDropdownValues = data.getDropdownValues;\n this.getEntityForId = data.getEntityForId ?? defaultGetEntityForId;\n this.EntityClass = data.EntityClass;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n }\n}","import { ReferencesOneDecoratorConfigInternal } from './references-one-decorator-internal.data';\nimport { ReferencesOneDecoratorConfig } from './references-one-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting references one property metadata.\n * @param metadata - The metadata of the references one property.\n * @returns The method that defines the metadata.\n */\nexport function referencesOne<EntityType extends BaseEntityType<EntityType>>(\n metadata: ReferencesOneDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(new ReferencesOneDecoratorConfigInternal<EntityType>(metadata), DecoratorTypes.REFERENCES_ONE);\n}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type StringDropdownValues =\n DropdownValue<string | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<string | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<string | undefined>[]>)\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type StringAutocompleteValues =\n string[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => string[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<string[]>)\n\n/**\n * Definition for the @string metadata.\n */\nabstract class StringDecoratorConfig extends PropertyDecoratorConfig<string> {\n /**\n * How to display the string.\n */\n displayStyle!: 'line' | 'textbox' | 'autocomplete' | 'dropdown' | 'password';\n}\n\n/**\n * The configuration options for a string property displayed as a dropdown.\n */\nexport interface DropdownStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value\n * Can also receive a function to determine the values.\n */\n dropdownValues: StringDropdownValues\n}\n\n/**\n * The configuration options for a string property displayed in a default text input.\n */\nexport interface DefaultStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line',\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp\n}\n\n/**\n * The configuration options for a string property displayed in a textbox input.\n */\nexport interface TextboxStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'textbox',\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number\n}\n\n/**\n * The configuration options for a string property displayed in a mat-autocomplete input.\n */\nexport interface AutocompleteStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'autocomplete',\n /**\n * The autocomplete values.\n */\n autocompleteValues: StringAutocompleteValues,\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp,\n /**\n * Whether or not valid inputs should be restricted to the autocomplete options.\n */\n restrictToOptions?: boolean\n}\n\n/**\n * The configuration options for a string property displayed in a password input.\n */\nexport interface PasswordStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'password',\n /**\n * The minimum required length of the password.\n */\n minLength?: number,\n /**\n * The maximum required length of the password.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp,\n /**\n * Whether or not the password needs to be retyped.\n * @default true\n */\n needsConfirmation?: boolean,\n /**\n * Whether or not the password strength should be displayed.\n * @default true\n */\n displayPasswordStrength?: boolean,\n /**\n * The display name of the confirmation password input.\n * @default 'Confirm Password'\n */\n confirmationDisplayName?: string\n}","import { Directive, ElementRef, HostListener } from '@angular/core';\n\n/**\n * A directive that only allows number inputs.\n */\n@Directive({\n selector: '[number]',\n standalone: true\n})\nexport class NumberDirective {\n constructor(private readonly el: ElementRef) {}\n\n /**\n * Prevents the default event when a key is pressed that is not a valid number, eg. 'A', 'B', 'C', 'D' etc.\n * @param e - The keydown event from the user.\n */\n @HostListener('keydown', ['$event'])\n onKeyDown(e: KeyboardEvent): void {\n if (\n !isNaN(parseInt(e.key))\n || ['.', ',', 'Escape', 'Enter', 'Delete', 'Backspace', 'Home', 'End', 'Left', 'Right', 'Tab'].includes(e.key)\n || (e.ctrlKey || e.metaKey) // && ['a', 'c', 'v', 'x', 'z'].includes(e.key)\n ) {\n return;\n }\n e.preventDefault();\n }\n}","/**\n * Public API Surface of ngx-material-entity.\n */\n\n// classes\nexport * from './classes/entity.model';\n// components\nexport * from './components/confirm-dialog/confirm-dialog-data';\nexport * from './components/confirm-dialog/confirm-dialog.component';\nexport * from './components/create-page/create-data.route';\nexport * from './components/create-page/create-page.component';\nexport * from './components/edit-page/edit-data.route';\nexport * from './components/edit-page/edit-page.component';\nexport * from './components/input/base-input.component';\nexport * from './components/input/input.component';\nexport * from './components/table/create-dialog/create-entity-data';\nexport * from './components/table/create-dialog/create-entity-dialog.component';\nexport * from './components/table/default.actions';\nexport * from './components/table/display-column-value/base-display-column-value.component';\nexport * from './components/table/edit-dialog/edit-entity-data';\nexport * from './components/table/edit-dialog/edit-entity-dialog.component';\nexport * from './components/table/table-data';\nexport * from './components/table/table.component';\nexport * from './components/tooltip/tooltip.component';\n// decorators\nexport * from './decorators/array/array-decorator.data';\nexport * from './decorators/array/array.decorator';\nexport * from './decorators/base/decorator-types.enum';\nexport * from './decorators/base/dropdown-value.interface';\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport { Col, Position } from './decorators/base/property-decorator.data';\nexport * from './decorators/boolean/boolean-decorator.data';\nexport * from './decorators/boolean/boolean.decorator';\nexport * from './decorators/custom/custom-decorator.data';\nexport * from './decorators/custom/custom.decorator';\nexport * from './decorators/date/date-decorator.data';\nexport * from './decorators/date/date.decorator';\nexport * from './decorators/file/file-decorator.data';\nexport * from './decorators/file/file.decorator';\nexport * from './decorators/has-many/has-many-decorator.data';\nexport * from './decorators/has-many/has-many.decorator';\nexport * from './decorators/number/number-decorator.data';\nexport * from './decorators/number/number.decorator';\nexport * from './decorators/object/object-decorator.data';\nexport * from './decorators/object/object.decorator';\nexport * from './decorators/references-many/references-many-decorator.data';\nexport * from './decorators/references-many/references-many.decorator';\nexport * from './decorators/references-one/references-one-decorator.data';\nexport * from './decorators/references-one/references-one.decorator';\nexport * from './decorators/string/string-decorator.data';\nexport * from './decorators/string/string.decorator';\n// directives\nexport * from './directives/dynamic-style-class.directive';\nexport * from './directives/included-in.directive';\nexport * from './directives/number.directive';\nexport * from './directives/tooltip.directive';\n// functions\nexport * from './functions/get-validation-error-message.function';\nexport * from './functions/get-validation-errors-tooltip-content.function.ts';\n// services\nexport * from './services/entity.service';\nexport * from './services/unsaved-changes.guard';\n//utilities\nexport * from './utilities/date.utilities';\nexport * from './utilities/entity.utilities';\nexport * from './utilities/file.utilities';\nexport * from './utilities/validation.utilities';\n// default values\nexport * from './global-configuration-values';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i5","i8","i9","i3","i6","i7","i10","i11","i1","i14","i15"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-material-entity.mjs","sources":["../../../projects/ngx-material-entity/src/functions/dropdown-values-to-function.function.ts","../../../projects/ngx-material-entity/src/functions/default-false.function.ts","../../../projects/ngx-material-entity/src/functions/default-true.function.ts","../../../projects/ngx-material-entity/src/decorators/base/property-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/string/string-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/encapsulation/lodash.utilities.ts","../../../projects/ngx-material-entity/src/utilities/date.utilities.ts","../../../projects/ngx-material-entity/src/encapsulation/jszip.utilities.ts","../../../projects/ngx-material-entity/src/utilities/file.utilities.ts","../../../projects/ngx-material-entity/src/decorators/base/decorator-types.enum.ts","../../../projects/ngx-material-entity/src/encapsulation/reflect.utilities.ts","../../../projects/ngx-material-entity/src/utilities/entity.utilities.ts","../../../projects/ngx-material-entity/src/decorators/base/base-property.decorator.ts","../../../projects/ngx-material-entity/src/decorators/string/string.decorator.ts","../../../projects/ngx-material-entity/src/classes/entity.model.ts","../../../projects/ngx-material-entity/src/default-global-configuration-values.ts","../../../projects/ngx-material-entity/src/classes/base.builder.ts","../../../projects/ngx-material-entity/src/functions/get-config-value.function.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/global-configuration-values.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog.component.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog.component.html","../../../projects/ngx-material-entity/src/services/unsaved-changes.guard.ts","../../../projects/ngx-material-entity/src/components/create-page/create-data.route.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-data.builder.ts","../../../projects/ngx-material-entity/src/components/create-page/page-create-data.builder.ts","../../../projects/ngx-material-entity/src/functions/get-validation-errors-tooltip-content.function.ts.ts","../../../projects/ngx-material-entity/src/services/entity.service.ts","../../../projects/ngx-material-entity/src/utilities/validation.utilities.ts","../../../projects/ngx-material-entity/src/decorators/array/array-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/utilities/selection.utilities.ts","../../../projects/ngx-material-entity/src/encapsulation/uuid.utilities.ts","../../../projects/ngx-material-entity/src/components/input/base-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-table.class.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-input/array-date-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-input/array-date-input.component.html","../../../projects/ngx-material-entity/src/components/input/array/array-date-range-input/array-date-range-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-range-input/array-date-range-input.component.html","../../../projects/ngx-material-entity/src/components/input/array/array-date-time-input/array-date-time-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-date-time-input/array-date-time-input.component.html","../../../projects/ngx-material-entity/src/directives/included-in.directive.ts","../../../projects/ngx-material-entity/src/components/input/array/array-string-chips-input/array-string-chips-input.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-string-chips-input/array-string-chips-input.component.html","../../../projects/ngx-material-entity/src/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.ts","../../../projects/ngx-material-entity/src/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.html","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.html","../../../projects/ngx-material-entity/src/decorators/boolean/boolean-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.html","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.ts","../../../projects/ngx-material-entity/src/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.html","../../../projects/ngx-material-entity/src/components/input/custom/custom.component.ts","../../../projects/ngx-material-entity/src/components/input/custom/custom.component.html","../../../projects/ngx-material-entity/src/components/input/date/date-input/date-input.component.ts","../../../projects/ngx-material-entity/src/components/input/date/date-input/date-input.component.html","../../../projects/ngx-material-entity/src/decorators/date/date-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/date/date-range-input/date-range-input.component.ts","../../../projects/ngx-material-entity/src/components/input/date/date-range-input/date-range-input.component.html","../../../projects/ngx-material-entity/src/components/input/date/date-time-input/date-time-input.component.ts","../../../projects/ngx-material-entity/src/components/input/date/date-time-input/date-time-input.component.html","../../../projects/ngx-material-entity/src/directives/drag-drop.directive.ts","../../../projects/ngx-material-entity/src/components/input/file/file-input/file-input.component.ts","../../../projects/ngx-material-entity/src/components/input/file/file-input/file-input.component.html","../../../projects/ngx-material-entity/src/components/input/file/file-default-input/file-default-input.component.ts","../../../projects/ngx-material-entity/src/components/input/file/file-default-input/file-default-input.component.html","../../../projects/ngx-material-entity/src/mocks/placeholder-data.png.ts","../../../projects/ngx-material-entity/src/components/input/file/file-image-input/file-image-input.component.ts","../../../projects/ngx-material-entity/src/components/input/file/file-image-input/file-image-input.component.html","../../../projects/ngx-material-entity/src/components/input/number/number-dropdown-input/number-dropdown-input.component.ts","../../../projects/ngx-material-entity/src/components/input/number/number-dropdown-input/number-dropdown-input.component.html","../../../projects/ngx-material-entity/src/components/input/number/number-input/number-input.component.ts","../../../projects/ngx-material-entity/src/components/input/number/number-input/number-input.component.html","../../../projects/ngx-material-entity/src/components/input/number/number-slider-input/number-slider-input.component.ts","../../../projects/ngx-material-entity/src/components/input/number/number-slider-input/number-slider-input.component.html","../../../projects/ngx-material-entity/src/decorators/references-many/references-many-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/relations/references-many-input/references-many-input.component.ts","../../../projects/ngx-material-entity/src/components/input/relations/references-many-input/references-many-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-autocomplete-input/string-autocomplete-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-autocomplete-input/string-autocomplete-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-dropdown-input/string-dropdown-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-dropdown-input/string-dropdown-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-input/string-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-input/string-input.component.html","../../../projects/ngx-material-entity/src/directives/password-match.directive.ts","../../../projects/ngx-material-entity/src/components/input/string/string-password-input/string-password-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-password-input/string-password-input.component.html","../../../projects/ngx-material-entity/src/components/input/string/string-textbox-input/string-textbox-input.component.ts","../../../projects/ngx-material-entity/src/components/input/string/string-textbox-input/string-textbox-input.component.html","../../../projects/ngx-material-entity/src/functions/is-async-function.function.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-data.builder.ts","../../../projects/ngx-material-entity/src/functions/default-style-classes.function.ts","../../../projects/ngx-material-entity/src/components/table/table-data.builder.ts","../../../projects/ngx-material-entity/src/decorators/has-many/has-many-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/functions/get-validation-error-message.function.ts","../../../projects/ngx-material-entity/src/components/table/display-column-value/display-column-value.component.ts","../../../projects/ngx-material-entity/src/components/table/display-column-value/display-column-value.component.html","../../../projects/ngx-material-entity/src/directives/tooltip.directive.ts","../../../projects/ngx-material-entity/src/components/tooltip/tooltip.component.ts","../../../projects/ngx-material-entity/src/components/tooltip/tooltip.component.html","../../../projects/ngx-material-entity/src/components/input/input.component.ts","../../../projects/ngx-material-entity/src/components/input/input.component.html","../../../projects/ngx-material-entity/src/components/form/form.component.ts","../../../projects/ngx-material-entity/src/components/form/form.component.html","../../../projects/ngx-material-entity/src/components/create-page/create-page.component.ts","../../../projects/ngx-material-entity/src/components/create-page/create-page.component.html","../../../projects/ngx-material-entity/src/components/edit-page/edit-data.route.ts","../../../projects/ngx-material-entity/src/components/edit-page/page-edit-data.builder.ts","../../../projects/ngx-material-entity/src/components/edit-page/edit-page.component.ts","../../../projects/ngx-material-entity/src/components/edit-page/edit-page.component.html","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-data.builder.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-dialog.component.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-dialog.component.html","../../../projects/ngx-material-entity/src/encapsulation/js-2-xml.utilities.ts","../../../projects/ngx-material-entity/src/components/table/default.actions.ts","../../../projects/ngx-material-entity/src/components/table/display-column-value/base-display-column-value.component.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity.builder.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.component.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.component.html","../../../projects/ngx-material-entity/src/directives/dynamic-style-class.directive.ts","../../../projects/ngx-material-entity/src/components/table/table.component.ts","../../../projects/ngx-material-entity/src/components/table/table.component.html","../../../projects/ngx-material-entity/src/decorators/base/property-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/array/array-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/array/array.decorator.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean.decorator.ts","../../../projects/ngx-material-entity/src/decorators/custom/custom-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/custom/custom.decorator.ts","../../../projects/ngx-material-entity/src/decorators/date/date-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/date/date.decorator.ts","../../../projects/ngx-material-entity/src/decorators/file/file-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/file/file-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/file/file.decorator.ts","../../../projects/ngx-material-entity/src/decorators/has-many/has-many.decorator.ts","../../../projects/ngx-material-entity/src/decorators/number/number-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/number/number-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/number/number.decorator.ts","../../../projects/ngx-material-entity/src/decorators/object/object-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/object/object-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/object/object.decorator.ts","../../../projects/ngx-material-entity/src/decorators/references-many/references-many.decorator.ts","../../../projects/ngx-material-entity/src/decorators/references-one/references-one-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/references-one/references-one.decorator.ts","../../../projects/ngx-material-entity/src/decorators/string/string-decorator.data.ts","../../../projects/ngx-material-entity/src/directives/number.directive.ts","../../../projects/ngx-material-entity/src/public-api.ts","../../../projects/ngx-material-entity/src/ngx-material-entity.ts"],"sourcesContent":["import { DropdownValue } from '../decorators/base/dropdown-value.interface';\n\n/**\n * Generic Type for all possible values that can be provided as dropdown values.\n */\nexport type DropdownValues<T> = DropdownValue<T | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<T | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<T | undefined>[]>);\n\n/**\n * Transforms the given dropdown values to an async function.\n * @param dropdownValues - The dropdown values to transform.\n * @returns An abstract function.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport function dropdownValuesToFunction<T>(dropdownValues: DropdownValues<T>): (entity: any) => Promise<DropdownValue<T | undefined>[]> {\n if (Array.isArray(dropdownValues)) {\n return async () => dropdownValues;\n }\n // eslint-disable-next-line typescript/no-explicit-any\n return async (e: any) => await dropdownValues(e);\n}","/**\n * The default false function.\n * A boolean false is resolved to this.\n * @returns False.\n */\nexport function defaultFalse(): boolean {\n return false;\n}","/**\n * The default true function.\n * A boolean true is resolved to this.\n * @returns True.\n */\nexport function defaultTrue(): boolean {\n return true;\n}","import { Col, Position, PropertyDecoratorConfig } from './property-decorator.data';\nimport { defaultFalse } from '../../functions/default-false.function';\nimport { defaultTrue } from '../../functions/default-true.function';\n\n/**\n * The internal Position. Sets default values and validates user input.\n */\nclass PositionInternal implements Position {\n // eslint-disable-next-line jsdoc/require-jsdoc\n row: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n order: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tab: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tabName?: string;\n\n constructor(data?: Position) {\n this.validateInput(data);\n this.row = data?.row ?? -1;\n this.order = data?.order ?? -1;\n this.tab = data?.tab ?? -1;\n this.tabName = data?.tabName;\n }\n\n private validateInput(data?: Position): void {\n if (data?.order != undefined) {\n if (data.order < 1 && data.order != -1) {\n throw new Error('order must be at least 1');\n }\n if (data.order > 12) {\n throw new Error('order cannot be bigger than 12 (the maximum value for a bootstrap column)');\n }\n }\n if (data?.row != undefined && data.row != -1 && data.row < 1) {\n throw new Error('row must be at least 1');\n }\n if (data?.tab != undefined && data.tab != -1 && data.tab < 2) {\n throw new Error('tab must be either -1 for the first tab or at least 2');\n }\n }\n}\n\n/**\n * The internal PropertyDecoratorConfig. Sets default values.\n */\nexport abstract class PropertyDecoratorConfigInternal<ValueType> implements PropertyDecoratorConfig<ValueType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n display: (entity: unknown) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n required: ((entity: unknown) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n omitForCreate: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n omitForUpdate: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n defaultWidths: [Col, Col, Col];\n // eslint-disable-next-line jsdoc/require-jsdoc\n position: PositionInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n isReadOnly: (entity: unknown) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n default?: () => ValueType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n change?: (entity: unknown) => void;\n\n constructor(data: PropertyDecoratorConfig<ValueType>) {\n this.display = this.booleanToFunction(data.display ?? true);\n this.displayName = data.displayName;\n this.required = this.booleanToFunction(data.required ?? true);\n this.omitForCreate = data.omitForCreate ?? false;\n this.omitForUpdate = data.omitForUpdate ?? false;\n this.defaultWidths = data.defaultWidths ?? [6, 6, 12];\n this.position = new PositionInternal(data.position);\n this.isReadOnly = this.booleanToFunction(data.isReadOnly ?? false);\n this.default = this.defaultToFunction(data.default);\n this.change = data.change;\n }\n\n /**\n * Converts the default value to a function or undefined.\n * @param value - The default value provided by the metadata.\n * @returns A function that returns a default value or undefined.\n */\n protected defaultToFunction(value?: ValueType | (() => ValueType)): (() => ValueType) | undefined {\n if (value == undefined) {\n return undefined;\n }\n if (typeof value == 'function') {\n return value as (() => ValueType);\n }\n return () => value;\n }\n\n /**\n * Converts the given boolean or boolean function to a boolean function.\n * @param value - The value to convert.\n * @returns A function that resolves to a boolean.\n */\n protected booleanToFunction(value: boolean | ((entity: unknown) => boolean)): (entity: unknown) => boolean {\n if (typeof value !== 'boolean') {\n return value;\n }\n return value ? defaultTrue : defaultFalse;\n }\n}","import { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, StringAutocompleteValues, TextboxStringDecoratorConfig } from './string-decorator.data';\nimport { dropdownValuesToFunction } from '../../functions/dropdown-values-to-function.function';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DropdownStringDecoratorConfig. Sets default values.\n */\nexport class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string>\n implements DropdownStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n dropdownValues: ((entity: any) => Promise<DropdownValue<string | undefined>[]>);\n\n constructor(data: DropdownStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = dropdownValuesToFunction(data.dropdownValues);\n }\n}\n\n/**\n * The internal DefaultStringDecoratorConfig. Sets default values.\n */\nexport class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string> implements DefaultStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n\n constructor(data: DefaultStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n }\n}\n\n/**\n * The internal TextboxStringDecoratorConfig. Sets default values.\n */\nexport class TextboxStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string> implements TextboxStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'textbox';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n\n constructor(data: TextboxStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n }\n}\n\n/**\n * The internal AutocompleteStringDecoratorConfig. Sets default values.\n */\nexport class AutocompleteStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal<string> implements AutocompleteStringDecoratorConfig {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'autocomplete';\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n autocompleteValues: (entity: any) => Promise<string[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n // eslint-disable-next-line jsdoc/require-jsdoc\n restrictToOptions?: boolean;\n\n constructor(data: AutocompleteStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.autocompleteValues = this.autocompleteValuesToFunction(data.autocompleteValues);\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n this.restrictToOptions = data.restrictToOptions;\n }\n\n // eslint-disable-next-line typescript/no-explicit-any\n private autocompleteValuesToFunction(autocompleteValues: StringAutocompleteValues): (entity: any) => Promise<string[]> {\n if (Array.isArray(autocompleteValues)) {\n return async () => autocompleteValues;\n }\n // eslint-disable-next-line typescript/no-explicit-any\n return async (e: any) => await autocompleteValues(e);\n }\n}\n\n/**\n * The internal PasswordStringDecoratorConfig. Sets default values.\n */\nexport class PasswordStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal<string> implements PasswordStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'password';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n // eslint-disable-next-line jsdoc/require-jsdoc\n needsConfirmation: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmationDisplayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayPasswordStrength: boolean;\n\n constructor(data: PasswordStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n this.needsConfirmation = data.needsConfirmation ?? true;\n this.confirmationDisplayName = data.confirmationDisplayName ?? 'Confirm Password';\n this.displayPasswordStrength = data.displayPasswordStrength ?? true;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n }\n}","import _ from 'lodash';\n\n/**\n * Encapsulates all functionality of lodash.\n */\nexport abstract class LodashUtilities {\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexps,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n * @param value - The value to compare.\n * @param other - The other value to compare.\n * @returns Returns `true` if the values are equivalent, else `false`.\n */\n static isEqual(value: unknown, other: unknown): boolean {\n return _.isEqual(value, other);\n }\n\n /**\n * This method is like _.clone except that it recursively clones value.\n * @param value - The value to recursively clone.\n * @returns Returns the deep cloned value.\n */\n static cloneDeep<T>(value: T): T {\n return _.cloneDeep(value);\n }\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable properties of `object` that are not omitted.\n * @param object - The source object.\n * @param paths - The property names to omit, specified\n * individually or in arrays.\n * @returns Returns the new object.\n */\n static omit<T extends object, K extends keyof T>(object: T | null | undefined, ...paths: _.Many<K>[]): Omit<T, K> {\n return _.omit(object, ...paths);\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n * @param value - The value to check.\n * @returns Returns `true` if `value` is nullish, else `false`.\n */\n // static isNil(value: unknown): value is null | undefined {\n // return isNil(value);\n // }\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of the\n * own and inherited enumerable properties of `object` that `predicate`\n * doesn't return truthy for.\n * @param object - The source object.\n * @param predicate - The function invoked per property.\n * @returns Returns the new object.\n */\n // static omitBy<T extends object>(object: T | null | undefined, predicate: ValueKeyIteratee<T[keyof T]>): PartialObject<T> {\n // return omitBy(object, predicate);\n // }\n\n /**\n * Checks if value is classified as an Array object.\n * @param value - The value to check.\n * @returns Returns true if value is correctly classified, else false.\n */\n static isArray(value?: unknown): value is unknown[] {\n return _.isArray(value);\n }\n\n /* istanbul ignore next */\n /**\n * Checks if value is classified as an object that is not an array.\n * @param value - The value to check.\n * @returns Returns true if value is correctly classified, else false.\n */\n static isObject(value?: unknown): value is object {\n return value !== null\n && typeof value === 'object'\n && !LodashUtilities.isArray(value);\n }\n}","import { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DropdownValue } from '../decorators/base/dropdown-value.interface';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { defaultTrue } from '../functions/default-true.function';\n\nconst DAY_IN_MS: number = 1000 * 60 * 60 * 24;\n\n/**\n * Helper type for hours and minutes.\n */\ntype Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N\n ? Acc[number]\n : Enumerate<N, [...Acc, Acc['length']]>;\n\n/**\n * Helper type for hours and minutes.\n */\ntype Range<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;\n\n/**\n * The possible hour values. Ranges from 0 to 23.\n */\nexport type Hour = Range<0, 24>;\n\n/**\n * The possible minute values. Ranges from 0 to 59.\n */\nexport type Minute = Range<0, 60>;\n\n/**\n * Represents a time value with hours and minutes.\n */\nexport type Time = {\n /**\n * The hours in the 24 hour format.\n */\n hours: Hour,\n /**\n * The minutes of the time.\n */\n minutes: Minute\n};\n\n/**\n * Valid steps from one time value to the next. Needs to be able to divide 60 minutes without remainder.\n */\ntype MinuteSteps = 1 | 2 | 3 | 4 | 5 | 6 | 10 | 12 | 15 | 20 | 30 | 60;\n\n/**\n * Contains Helper Functions for handling date properties.\n */\nexport abstract class DateUtilities {\n\n /**\n * The default filter function to user when none was provided by the user.\n */\n static defaultDateFilter: DateFilterFn<Date | null | undefined> = defaultTrue;\n\n /**\n * Gets the given value as a date value.\n * @param value - The value to get as a date.\n * @returns The given value as a date.\n */\n static asDate(value: unknown): Date {\n return value as Date;\n }\n\n /**\n * Gets the default times used by the DateTime picker when nothing is specified by the user.\n * @param format - The time format. Defaults to 24.\n * @param minuteSteps - The steps from one time value to the next. Defaults to 30.\n * @returns Times in the 24 hour format from 0:00 until 23:30 in 30 minute steps.\n */\n static getDefaultTimes(format: 12 | 24 = 24, minuteSteps: MinuteSteps = 30): DropdownValue<Time>[] {\n const res: DropdownValue<Time>[] = [{ displayName: '-', value: undefined as unknown as Time }];\n for (let hour: Hour = 0; hour < 24; hour++) {\n for (let minute: Minute = 0; minute < 60; minute += minuteSteps) {\n res.push(DateUtilities.getTimeDropdownValue(format, hour as Hour, minute as Minute));\n }\n }\n return res;\n }\n\n private static getTimeDropdownValue(format: 12 | 24, hour: Hour, minute: Minute): DropdownValue<Time> {\n const displayHour: number = DateUtilities.getFormattedHour(format, LodashUtilities.cloneDeep(hour));\n const displayMinute: string = DateUtilities.getFormattedMinute(format, hour, minute);\n return {\n displayName: `${displayHour}:${displayMinute}`,\n value: {\n hours: hour,\n minutes: minute\n }\n };\n }\n\n private static getFormattedHour(format: 12 | 24, hour: number): number {\n if (format === 12 && hour > 12) {\n hour -= 12;\n }\n return hour;\n }\n\n private static getFormattedMinute(format: 12 | 24, hour: number, minute: number): string {\n let res: string = `${minute}`;\n if (format === 12) {\n res = hour > 12 ? `${minute} PM` : `${minute} AM`;\n }\n if (minute.toString().length === 1) {\n res = '0'.concat(res);\n }\n return res;\n }\n\n /**\n * Gets the Time object from the given date.\n * @param value - The date to get the time object from.\n * @returns The Time object build from the date value.\n */\n static getTimeFromDate(value?: Date): Time | undefined {\n if (!value) {\n return undefined;\n }\n return {\n hours: new Date(value).getHours() as Hour,\n minutes: new Date(value).getMinutes() as Minute\n };\n }\n\n /**\n * Gets the dates between the two given gates. Does additional filtering based on the provided DateRange metadata.\n * @param startDate - The start date.\n * @param endDate - The end date.\n * @param filter - The custom filter from the metadata.\n * @returns All dates between the two provided dates. Includes start and end date.\n */\n static getDatesBetween(\n startDate: Date,\n endDate: Date,\n filter?: DateFilterFn<Date>\n ): Date[] {\n const res: Date[] = [];\n while (\n startDate.getFullYear() < endDate.getFullYear()\n || startDate.getMonth() < endDate.getMonth()\n || startDate.getDate() <= endDate.getDate()\n ) {\n res.push(new Date(startDate));\n startDate.setTime(startDate.getTime() + DAY_IN_MS);\n }\n return filter ? res.filter(d => filter(d)) : res;\n }\n\n /**\n * Get all valid times for the dropdown of a datetime property.\n * @param times - All given times to filter.\n * @param date - The date of the datetime.\n * @param min - The function that defines the minimum time.\n * @param max - The function that defines the maximum time.\n * @param filter - A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.\n * @returns All valid dropdown values for the datetime property.\n */\n static getValidTimesForDropdown(\n times: DropdownValue<Time | undefined>[],\n date?: Date,\n min?: (date?: Date) => Time,\n max?: (date?: Date) => Time,\n filter?: ((time: Time) => boolean) | (() => boolean)\n ): DropdownValue<Time | undefined>[] {\n if (min) {\n const minTime: Time = min(date);\n times = times.filter(t => !t.value\n || t.value.hours > minTime.hours\n || (\n t.value.hours === minTime.hours\n && t.value.minutes >= minTime.minutes\n ));\n }\n if (max) {\n const maxTime: Time = max(date);\n times = times.filter(t => !t.value\n || t.value.hours < maxTime.hours\n || (\n t.value.hours === maxTime.hours\n && t.value.minutes <= maxTime.minutes\n ));\n }\n if (filter) {\n times = times.filter(t => !t.value || filter(t.value));\n }\n\n return times;\n }\n\n /**\n * Checks if the time object has processable hours and minutes properties.\n * Doesn't check custom validators like min/max from the metadata configuration.\n * @param time - The time to check.\n * @returns Whether or not the time object is unprocessable.\n */\n static timeIsUnprocessable(time?: Time): boolean {\n return time?.hours == undefined\n || typeof time.hours !== 'number'\n || Number.isNaN(time.hours)\n || time.minutes == undefined\n || typeof time.minutes !== 'number'\n || Number.isNaN(time.minutes);\n }\n}","import JSZip from 'jszip';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type Zip = JSZip;\n\n// TODO: Find a way to use blobs with jest\n/* istanbul ignore next */\n/**\n * Encapsulates JSZip functionality.\n */\nexport abstract class JSZipUtilities {\n /**\n * Generates a new JSZip object that is correctly typed.\n * @returns A new JSZip object.\n */\n static new(): Zip {\n return new JSZip();\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\n\nimport { FileDataWithFile } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { JSZipUtilities, Zip } from '../encapsulation/jszip.utilities';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\n\n/**\n * Provides functionality regarding files.\n */\nexport abstract class FileUtilities {\n /**\n * Gets the accept value for the html input.\n * @param mimeTypes - The mimeTypes to get the accept string from.\n * @returns A comma separated string of all the provided mime types.\n */\n static getAcceptString(mimeTypes?: string[]): string {\n if (!mimeTypes?.length) {\n return '*';\n }\n return mimeTypes.join(', ');\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Reads a url to display the given file.\n * @param file - The file to get the url from.\n * @returns A promise of the url. Undefined if no file was provided.\n */\n static async getDataURLFromFile(file?: Blob): Promise<string | undefined> {\n if (!file) {\n return undefined;\n }\n return new Promise<string>((resolve, reject) => {\n const reader: FileReader = new FileReader();\n reader.onload = e => resolve(e.target?.result as string);\n reader.onerror = e => reject(e);\n reader.readAsDataURL(file);\n });\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Gets a file from the given url.\n * @param url - The url to get the file from.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns A promise of the File.\n */\n private static async getFileFromUrl(url: string, http: HttpClient): Promise<Blob> {\n try {\n return await firstValueFrom(http.get(url, { responseType: 'blob' }));\n }\n catch (error) {\n throw new Error(`Error fetching the file from the url ${url}:\\n ${error}`);\n }\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Gets the file data with the blob from the given File Data.\n * @param data - The File Data to get the file data with blob from.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns FileDataWithFile.\n */\n static async getFileData(data: FileData, http: HttpClient): Promise<FileDataWithFile> {\n if (data.file) {\n return {\n file: data.file,\n name: data.name,\n url: data.url,\n type: data.type,\n size: data.size\n };\n }\n return {\n file: await FileUtilities.getFileFromUrl(data.url as string, http),\n name: data.name,\n url: data.url,\n type: data.type,\n size: data.size\n };\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Downloads a single file from the given File Data.\n * @param fileData - The file data. Needs to contain a blob.\n */\n static downloadSingleFile(fileData: FileDataWithFile): void {\n this.downLoadBlob(fileData.file, fileData.name);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Downloads a blob.\n * @param blob - The blob to download.\n * @param name - The name of the downloaded file.\n */\n static downLoadBlob(blob: Blob, name?: string): void {\n const a: HTMLAnchorElement = document.createElement('a');\n const objectUrl: string = URL.createObjectURL(blob);\n a.href = objectUrl;\n if (name) {\n a.download = name;\n }\n a.click();\n URL.revokeObjectURL(objectUrl);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Downloads multiple files as a zip with the given name.\n * @param name - The name of the zip file to generate.\n * @param multiFileData - The file data array to put in the zip.\n * @param http - The angular HttpClient. Used to fetch files.\n */\n static async downloadMultipleFiles(name: string, multiFileData: FileData[], http: HttpClient): Promise<void> {\n const zip: Zip = JSZipUtilities.new();\n for (let i: number = 0; i < multiFileData.length; i++) {\n multiFileData[i] = await FileUtilities.getFileData(multiFileData[i], http);\n zip.file(multiFileData[i].name, (multiFileData[i] as FileDataWithFile).file);\n }\n const zipBlob: Blob = await zip.generateAsync({ type: 'blob' });\n const fileData: FileDataWithFile = {\n name: name,\n file: zipBlob,\n type: 'application/zip',\n size: zipBlob.size\n };\n FileUtilities.downloadSingleFile(fileData);\n }\n\n /**\n * Checks if the given file has a valid mime type.\n * @param type - The type of the file to check.\n * @param allowedMimeTypes - The allowed mime types.\n * @returns Whether or not the given file has a valid mime type.\n */\n static isMimeTypeValid(type: string, allowedMimeTypes: string[]): boolean {\n if (allowedMimeTypes.includes('*')) {\n return true;\n }\n for (const t of allowedMimeTypes) {\n if (t === type) {\n return true;\n }\n if (t.endsWith('*') && type.startsWith(t.split('*')[0])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Transform the given value to Megabytes.\n * @param value - The original value.\n * @param unit - If the value is B, KB or GB.\n * @returns The given value as bytes.\n */\n static transformToMegaBytes(value: number, unit: 'B' | 'KB' | 'GB'): number {\n const bytes: number = this.transformToBytes(LodashUtilities.cloneDeep(value), unit);\n return bytes / 1000000;\n }\n\n private static transformToBytes(value: number, unit: 'B' | 'KB' | 'GB'): number {\n switch (unit) {\n case 'B':\n return value;\n case 'KB':\n return value * 1000;\n case 'GB':\n return value * 1000000000;\n }\n }\n}","/* eslint-disable stylistic/indent */\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from '../array/array-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from '../boolean/boolean-decorator-internal.data';\nimport { CustomDecoratorConfigInternal } from '../custom/custom-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from '../date/date-decorator-internal.data';\nimport { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from '../file/file-decorator-internal.data';\nimport { HasManyDecoratorConfigInternal } from '../has-many/has-many-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from '../number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal, DropdownObjectDecoratorConfigInternal } from '../object/object-decorator-internal.data';\nimport { ReferencesManyDecoratorConfigInternal } from '../references-many/references-many-decorator-internal.data';\nimport { ReferencesOneDecoratorConfigInternal } from '../references-one/references-one-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../string/string-decorator-internal.data';\n\n/**\n * The enum Values for all the different DecoratorTypes.\n */\nexport enum DecoratorTypes {\n STRING = 'string',\n STRING_DROPDOWN = 'stringDropdown',\n STRING_AUTOCOMPLETE = 'stringAutocomplete',\n STRING_TEXTBOX = 'stringTextbox',\n STRING_PASSWORD = 'stringPassword',\n NUMBER = 'number',\n NUMBER_DROPDOWN = 'numberDropdown',\n NUMBER_SLIDER = 'numberSlider',\n BOOLEAN_CHECKBOX = 'boolean',\n BOOLEAN_TOGGLE = 'booleanToggle',\n BOOLEAN_DROPDOWN = 'booleanDropdown',\n OBJECT = 'object',\n OBJECT_DROPDOWN = 'objectDropdown',\n ARRAY = 'array',\n ARRAY_DATE = 'arrayDate',\n ARRAY_DATE_TIME = 'arrayDateTime',\n ARRAY_DATE_RANGE = 'arrayDateRange',\n ARRAY_STRING_CHIPS = 'arrayStringChips',\n ARRAY_STRING_AUTOCOMPLETE_CHIPS = 'arrayStringAutocompleteChips',\n DATE = 'date',\n DATE_RANGE = 'dateRange',\n DATE_TIME = 'dateTime',\n FILE_DEFAULT = 'fileDefault',\n FILE_IMAGE = 'fileImage',\n REFERENCES_MANY = 'referencesMany',\n REFERENCES_ONE = 'referencesOne',\n HAS_MANY = 'hasMany',\n CUSTOM = 'custom'\n}\n\n/**\n * Gives the metadata-config Type based on the DecoratorTypes enum.\n */\nexport type DecoratorType<T, CustomMetadataType extends Record<string, unknown>> =\n T extends DecoratorTypes.STRING ? DefaultStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_TEXTBOX ? TextboxStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_DROPDOWN ? DropdownStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_AUTOCOMPLETE ? AutocompleteStringDecoratorConfigInternal\n : T extends DecoratorTypes.STRING_PASSWORD ? PasswordStringDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER ? DefaultNumberDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER_DROPDOWN ? DropdownNumberDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER_SLIDER ? SliderNumberDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_CHECKBOX ? CheckboxBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_TOGGLE ? ToggleBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_DROPDOWN ? DropdownBooleanDecoratorConfigInternal\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.OBJECT ? DefaultObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.OBJECT_DROPDOWN ? DropdownObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.ARRAY ? EntityArrayDecoratorConfigInternal<any>\n : T extends DecoratorTypes.ARRAY_DATE ? DateArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_DATE_TIME ? DateTimeArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_DATE_RANGE ? DateRangeArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_STRING_CHIPS ? StringChipsArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS ? AutocompleteStringChipsArrayDecoratorConfigInternal\n : T extends DecoratorTypes.DATE ? DefaultDateDecoratorConfigInternal\n : T extends DecoratorTypes.DATE_RANGE ? DateRangeDateDecoratorConfigInternal\n : T extends DecoratorTypes.DATE_TIME ? DateTimeDateDecoratorConfigInternal\n : T extends DecoratorTypes.FILE_DEFAULT ? DefaultFileDecoratorConfigInternal\n : T extends DecoratorTypes.FILE_IMAGE ? ImageFileDecoratorConfigInternal\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.REFERENCES_MANY ? ReferencesManyDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.REFERENCES_ONE ? ReferencesOneDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.HAS_MANY ? HasManyDecoratorConfigInternal<any, any>\n // eslint-disable-next-line typescript/no-explicit-any\n : T extends DecoratorTypes.CUSTOM ? CustomDecoratorConfigInternal<any, any, CustomMetadataType, any>\n : never;","// eslint-disable-next-line eslintImport/no-unassigned-import\nimport 'reflect-metadata';\n\n/**\n * Encapsulates all functionality of Reflect.\n */\nexport abstract class ReflectUtilities {\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey - A key used to store and retrieve metadata.\n * @param target - The target object on which the metadata is defined.\n * @param propertyKey - The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, undefined.\n */\n static getMetadata<T extends object>(metadataKey: string, target: T, propertyKey: keyof T): unknown {\n return Reflect.getMetadata(metadataKey, target, propertyKey as string);\n }\n\n /**\n * Returns the string and symbol keys of the own properties of an object. The own properties of an object\n * are those that are defined directly on that object, and are not inherited from the object's prototype.\n * @param target - Object that contains the own properties.\n * @returns The keys of the given object.\n */\n static ownKeys<T extends object>(target: T): (keyof T)[] {\n const res: (keyof T)[] = [];\n for (const key in target) {\n res.push(key);\n }\n return res;\n }\n\n /**\n * Gets the property of target, equivalent to `target[propertyKey]`.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - The property name.\n * @returns The property of the target of the given key.\n */\n static get<T extends object>(target: T, propertyKey: keyof T): unknown {\n return Reflect.get(target, propertyKey);\n }\n\n /**\n * Sets the property of target, equivalent to `target[propertyKey] = value`.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - The property name.\n * @param value - The value to set the property to.\n * @returns If setting the value was successful.\n */\n static set<T extends object>(target: T, propertyKey: keyof T, value: unknown): boolean {\n return Reflect.set(target, propertyKey, value);\n }\n\n /**\n * Equivalent to `propertyKey in target`.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - Name of the property.\n * @returns Whether or not the given target has the key.\n */\n static has<T extends object>(target: T, propertyKey: keyof T): boolean {\n return Reflect.has(target, propertyKey);\n }\n\n /**\n * Checks if the targets key entry has a metadata value for the given metadata key.\n * @returns Whether the metadata is null or not.\n * @param metadataKey - The key of the metadata on the property.\n * @param target - Object that contains the property on itself or in its prototype chain.\n * @param propertyKey - The key of the target.\n */\n static hasMetadata<T extends object>(metadataKey: string, target: T, propertyKey: keyof T): boolean {\n return this.getMetadata(metadataKey, target, propertyKey) != undefined;\n }\n\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey - A key used to store and retrieve metadata.\n * @param metadataValue - A value that contains attached metadata.\n * @param target - The target object on which to define metadata.\n * @param propertyKey - The property key for the target.\n */\n static defineMetadata<T extends object>(\n metadataKey: unknown,\n metadataValue: unknown,\n target: T,\n propertyKey: keyof T\n ): void {\n Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey as string);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentInjector, runInInjectionContext } from '@angular/core';\nimport { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DateUtilities } from './date.utilities';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from '../classes/entity.model';\nimport { DateRangeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { DecoratorType, DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { CustomDecoratorConfigInternal } from '../decorators/custom/custom-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal } from '../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../decorators/date/date-decorator.data';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../decorators/object/object-decorator-internal.data';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../encapsulation/reflect.utilities';\n\n/**\n * Shows information about differences between two entities.\n */\nexport interface Difference<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The key where the two entities have different values.\n */\n key: keyof EntityType,\n /**\n * The value before any changes.\n */\n before: unknown,\n /**\n * The current value after changes.\n */\n after: unknown\n}\n\n/**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\nexport abstract class EntityUtilities {\n\n /**\n * The key for all keys of metadata that should be set to undefined when the entity gets reset.\n */\n static readonly METADATA_KEYS_TO_RESET_KEY: string = 'metadataKeysToReset';\n\n /**\n * The key for the metadata that saves the single preview image value on image properties.\n */\n static readonly SINGLE_PREVIEW_IMAGE_KEY: string = 'singlePreviewImage';\n\n /**\n * The key for the metadata that saves the multi preview images value on image properties.\n */\n static readonly MULTI_PREVIEW_IMAGES_KEY: string = 'multiPreviewImages';\n\n /**\n * The key for the metadata that saves the filenames value on file properties.\n */\n static readonly FILENAMES_KEY: string = 'fileNames';\n\n /**\n * The key for the metadata that saves the confirm password value on password properties.\n */\n static readonly CONFIRM_PASSWORD_KEY: string = 'confirmPassword';\n\n /**\n * The key for the metadata that saves the time value on date time properties.\n */\n static readonly TIME_KEY: string = 'time';\n\n /**\n * Gets the properties to omit when updating the entity.\n * @param entity - The entity to get the properties which should be left out for updating from.\n * @returns The properties which should be left out for updating an Entity.\n */\n static getOmitForUpdate<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!metadata || metadata.omitForUpdate) {\n res.push(key);\n }\n }\n return res;\n }\n\n /**\n * Gets the properties to omit when creating new entities.\n * @param entity - The entity to get the properties which should be left out for creating from.\n * @returns The properties which should be left out for creating a new Entity.\n */\n static getOmitForCreate<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!metadata || metadata.omitForCreate) {\n res.push(key);\n }\n }\n return res;\n }\n\n /**\n * Returns the given entity without the values that should be omitted for creation.\n * @param entity - The entity with all its values.\n * @returns The reduced entity object.\n */\n static getWithoutOmitCreateValues<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): Partial<EntityType> {\n return LodashUtilities.omit(entity, this.getOmitForCreate(entity)) as Partial<EntityType>;\n }\n\n /**\n * Returns the given entity without the values that should be omitted for updating.\n * This also handles omitting keys for @object or @array values and removes values that haven't been changed by default.\n * @param entity - The entity with all its values.\n * @param entityPriorChanges - The entity before any changes were applied.\n * @param http - The angular HttpClient. Used to fetch files.\n * @param injector - An angular environment injector.\n * @returns The reduced entity object.\n */\n static async getWithoutOmitUpdateValues<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType,\n http: HttpClient,\n injector: EnvironmentInjector\n ): Promise<Partial<EntityType>> {\n const res: Partial<EntityType> = {};\n for (const key of this.keysOf(entity, injector, false, true)) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n const type: DecoratorTypes | undefined = this.getPropertyType(entity, key);\n if (!await this.isEqual(entity[key], entityPriorChanges[key], metadata, type, http)) {\n switch (type) {\n case DecoratorTypes.OBJECT:\n // eslint-disable-next-line typescript/no-explicit-any\n (res[key] as object) = LodashUtilities.omit(entity[key] as any, this.getOmitForCreate(entity[key]));\n break;\n case DecoratorTypes.ARRAY:\n (res[key] as object[]) = (entity[key] as object[])\n .map(value => LodashUtilities.omit(value, this.getOmitForCreate(value)));\n break;\n default:\n res[key] = entity[key];\n break;\n }\n }\n }\n return res;\n }\n\n /**\n * Sets all default values on the given entity.\n * @param entity - The entity to set the default values on.\n */\n static setDefaultValues<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): void {\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (metadata?.default) {\n // eslint-disable-next-line typescript/no-unsafe-assignment, typescript/no-explicit-any\n entity[key] = metadata.default() as any;\n }\n }\n }\n\n /**\n * Gets all properties on the given entity which are files.\n * @param entity - The entity to check for file properties.\n * @param omit - Whether to leave out values that are omitted for create or delete.\n * @returns The keys of all file properties on the given entity.\n */\n static getFileProperties<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n omit?: 'create' | 'update'\n ): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const type: DecoratorTypes | undefined = this.getPropertyType(entity, key);\n if (type === DecoratorTypes.FILE_DEFAULT || type === DecoratorTypes.FILE_IMAGE) {\n // eslint-disable-next-line stylistic/max-len\n const metadata: PropertyDecoratorConfigInternal<unknown> = this.getPropertyMetadata(entity, key) as PropertyDecoratorConfigInternal<unknown>;\n if (!(metadata.omitForCreate && omit === 'create') && !(metadata.omitForUpdate && omit === 'update')) {\n res.push(key);\n }\n }\n }\n return res;\n }\n\n /**\n * Gets the metadata included in an property.\n * @param entity - The entity with the property to get the metadata from.\n * @param propertyKey - The property on the given Entity to get the metadata from.\n * @param type - For secure Typing, defines the returned PropertyConfig.\n * @returns The metadata of the property.\n * @throws When no metadata can be found for the given property.\n */\n static getPropertyMetadata<\n EntityType extends BaseEntityType<EntityType>,\n T extends DecoratorTypes,\n CustomMetadataType extends Record<string, unknown>\n >(\n entity: EntityType,\n propertyKey: keyof EntityType,\n // eslint-disable-next-line unusedImports/no-unused-vars\n type?: T\n ): DecoratorType<T, CustomMetadataType> | undefined {\n const metadata: unknown = ReflectUtilities.getMetadata('metadata', entity, propertyKey);\n // if (metadata == null) {\n // throw new Error(`Could not find metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`);\n // }\n return metadata as DecoratorType<T, CustomMetadataType> | undefined;\n }\n\n /**\n * Gets the type of the property-metadata.\n * @param entity - The entity with the property to get the type from.\n * @param propertyKey - The property on the given Entity to get the type from.\n * @returns The type of the metadata.\n * @throws Will throw an error if no metadata can be found for the given property.\n */\n static getPropertyType<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType, propertyKey: keyof EntityType\n ): DecoratorTypes | undefined {\n return ReflectUtilities.getMetadata('type', entity, propertyKey) as DecoratorTypes | undefined;\n }\n\n /**\n * Sets all property values based on a given entity data-object.\n * @param target - The target object that needs to be constructed (if called inside an Entity constructor its usually this).\n * @param entity - The data object to get the property values from.\n * @alias new\n * @alias build\n * @alias construct\n */\n static new<EntityType extends BaseEntityType<EntityType>>(target: EntityType, entity?: EntityType): void {\n for (const key in target) {\n const type: DecoratorTypes | undefined = this.getPropertyType(target, key);\n let value: unknown = entity ? ReflectUtilities.get(entity, key) : undefined;\n switch (type) {\n case DecoratorTypes.OBJECT:\n // eslint-disable-next-line typescript/no-explicit-any\n const objectMetadata: DefaultObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n = this.getPropertyMetadata(target, key, DecoratorTypes.OBJECT) as DefaultObjectDecoratorConfigInternal<any>;\n value = new objectMetadata.EntityClass(value as object | undefined);\n break;\n case DecoratorTypes.ARRAY:\n const inputArray: EntityType[] | undefined = value as EntityType[] | undefined;\n const resArray: EntityType[] = [];\n if (inputArray) {\n // eslint-disable-next-line typescript/no-explicit-any\n const arrayMetadata: EntityArrayDecoratorConfigInternal<any>\n // eslint-disable-next-line typescript/no-explicit-any\n = this.getPropertyMetadata(target, key, DecoratorTypes.ARRAY) as EntityArrayDecoratorConfigInternal<any>;\n for (const item of inputArray) {\n const itemWithMetadata: EntityType = new arrayMetadata.EntityClass(item) as EntityType;\n resArray.push(itemWithMetadata);\n }\n }\n value = resArray;\n break;\n default:\n break;\n }\n ReflectUtilities.set(target, key, value);\n }\n }\n // eslint-disable-next-line typescript/member-ordering, jsdoc/require-jsdoc, typescript/typedef\n static construct = this.new;\n // eslint-disable-next-line typescript/member-ordering, jsdoc/require-jsdoc, typescript/typedef\n static build = this.new;\n\n /**\n * Checks if an entity is \"dirty\" (if its values have changed).\n * @param entity - The entity after all changes.\n * @param entityPriorChanges - The entity before the changes.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns Whether or not the entity is dirty.\n */\n static async isDirty<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType,\n http: HttpClient\n ): Promise<boolean> {\n if (!(entityPriorChanges as EntityType | undefined)) {\n return false;\n }\n const differences: Difference<EntityType>[] = await this.getDifferencesBetweenEntities(entity, entityPriorChanges, http);\n return differences.length ? true : false;\n }\n\n /**\n * Gets the differences between the two given entities.\n * @param entity - The entity as is.\n * @param entityPriorChanges - The entity before any changes have been made.\n * @param http - The angular http client, is needed to check if files are equal.\n * @returns The differences as an array consisting of key, before and after.\n */\n static async getDifferencesBetweenEntities<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType,\n http: HttpClient\n ): Promise<Difference<EntityType>[]> {\n const res: Difference<EntityType>[] = [];\n for (const key in entity) {\n const type: DecoratorTypes | undefined = this.getPropertyType(entity, key);\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!await this.isEqual(entity[key], entityPriorChanges[key], metadata, type, http)) {\n res.push({\n key: key,\n before: entityPriorChanges[key],\n after: entity[key]\n });\n }\n else {\n // This is needed to set blob file data so that it is only requested once.\n entityPriorChanges[key] = LodashUtilities.cloneDeep(entity[key]);\n }\n }\n return res;\n }\n\n /**\n * Checks if two given values are equal.\n * It uses the isEqual method from LodashUtilities and extends it with functionality regarding Dates.\n * @param value - The updated value.\n * @param valuePriorChanges - The value before any changes.\n * @param metadata - The metadata of the property.\n * @param type - The type of the property.\n * @param http - The angular HttpClient. Used to fetch files.\n * @returns Whether or not the given values are equal.\n */\n static async isEqual(\n value: unknown,\n valuePriorChanges: unknown,\n metadata: PropertyDecoratorConfigInternal<unknown> | undefined,\n type: DecoratorTypes | undefined,\n http: HttpClient\n ): Promise<boolean> {\n switch (type) {\n case DecoratorTypes.DATE_RANGE:\n return this.isEqualDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeDateDecoratorConfigInternal).filter\n );\n case DecoratorTypes.DATE:\n return this.isEqualDate(value, valuePriorChanges);\n case DecoratorTypes.DATE_TIME:\n return this.isEqualDateTime(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE:\n case DecoratorTypes.ARRAY_DATE_TIME:\n return this.isEqualArrayDate(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE_RANGE:\n return this.isEqualArrayDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeArrayDecoratorConfigInternal).filter\n );\n case DecoratorTypes.ARRAY_STRING_CHIPS:\n case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS:\n return this.isEqualArrayString(value, valuePriorChanges);\n case DecoratorTypes.FILE_IMAGE:\n case DecoratorTypes.FILE_DEFAULT:\n return this.isEqualFile(value, valuePriorChanges, (metadata as DefaultFileDecoratorConfigInternal).multiple, http);\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line typescript/no-explicit-any\n return this.isEqualCustom(value, valuePriorChanges, metadata as CustomDecoratorConfigInternal<any, any, any, any>);\n default:\n return LodashUtilities.isEqual(value, valuePriorChanges);\n }\n }\n\n private static isEqualArrayString(value: unknown, valuePriorChanges: unknown): boolean | PromiseLike<boolean> {\n let stringArray: string[] | undefined = LodashUtilities.cloneDeep(value as string[] | undefined);\n if (stringArray) {\n stringArray = stringArray.sort();\n }\n let stringArrayPriorChanges: string[] | undefined = LodashUtilities.cloneDeep(valuePriorChanges as string[] | undefined);\n if (stringArrayPriorChanges) {\n stringArrayPriorChanges = stringArrayPriorChanges.sort();\n }\n return LodashUtilities.isEqual(stringArray, stringArrayPriorChanges);\n }\n\n private static isEqualArrayDate(value: unknown, valuePriorChanges: unknown): boolean {\n let newValue: Date[] | undefined = LodashUtilities.cloneDeep(value as Date[] | undefined);\n if (newValue) {\n newValue = newValue.map(v => new Date(v)).sort();\n }\n let newValuePriorChanges: Date[] | undefined = LodashUtilities.cloneDeep(valuePriorChanges as Date[] | undefined);\n if (newValuePriorChanges) {\n newValuePriorChanges = newValuePriorChanges.map(v => new Date(v)).sort();\n }\n return LodashUtilities.isEqual(newValue, newValuePriorChanges);\n }\n\n private static isEqualArrayDateRange(value: unknown, valuePriorChanges: unknown, filter?: DateFilterFn<Date>): boolean {\n let dateRanges: DateRange[] | undefined = LodashUtilities.cloneDeep(value as DateRange[] | undefined);\n if (dateRanges) {\n dateRanges = dateRanges.sort();\n }\n let dateRangesPriorChanges: DateRange[] | undefined = LodashUtilities.cloneDeep(valuePriorChanges as DateRange[] | undefined);\n if (dateRangesPriorChanges) {\n dateRangesPriorChanges = dateRangesPriorChanges.sort();\n }\n if (dateRanges?.length !== dateRangesPriorChanges?.length) {\n return false;\n }\n if (dateRanges?.length) {\n for (let i: number = 0; i < dateRanges?.length; i++) {\n if (!this.isEqualDateRange(dateRanges?.[i], dateRangesPriorChanges?.[i], filter)) {\n return false;\n }\n }\n }\n return true;\n }\n\n private static isEqualDateTime(value: unknown, valuePriorChanges: unknown): boolean {\n const date: Date = new Date(value as Date);\n const datePriorChanges: Date = new Date(valuePriorChanges as Date);\n return LodashUtilities.isEqual(date, datePriorChanges);\n }\n\n private static isEqualDate(value: unknown, valuePriorChanges: unknown): boolean {\n const date: Date = new Date(value as Date);\n const datePriorChanges: Date = new Date(valuePriorChanges as Date);\n date.setHours(0, 0, 0, 0);\n datePriorChanges.setHours(0, 0, 0, 0);\n return LodashUtilities.isEqual(date, datePriorChanges);\n }\n\n private static isEqualDateRange(value: unknown, valuePriorChanges: unknown, filter?: DateFilterFn<Date>): boolean {\n const dateRange: Partial<DateRange> | undefined = LodashUtilities.cloneDeep(value) as Partial<DateRange> | undefined;\n if (dateRange?.start) {\n dateRange.start = new Date(dateRange.start);\n }\n if (dateRange?.end) {\n dateRange.end = new Date(dateRange.end);\n }\n if (dateRange?.start && dateRange.end) {\n dateRange.values = DateUtilities.getDatesBetween(\n dateRange.start,\n dateRange.end,\n filter\n );\n }\n // eslint-disable-next-line stylistic/max-len\n const dateRangePriorChanges: Partial<DateRange> | undefined = LodashUtilities.cloneDeep(valuePriorChanges) as Partial<DateRange> | undefined;\n if (dateRangePriorChanges?.start) {\n dateRangePriorChanges.start = new Date(dateRangePriorChanges.start);\n }\n if (dateRangePriorChanges?.end) {\n dateRangePriorChanges.end = new Date(dateRangePriorChanges.end);\n }\n if (dateRangePriorChanges?.start && dateRangePriorChanges.end) {\n dateRangePriorChanges.values = DateUtilities.getDatesBetween(\n dateRangePriorChanges.start,\n dateRangePriorChanges.end,\n filter\n );\n }\n return LodashUtilities.isEqual(dateRange, dateRangePriorChanges);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n // eslint-disable-next-line sonar/cognitive-complexity\n private static async isEqualFile(value: unknown, valuePriorChanges: unknown, multiple: boolean, http: HttpClient): Promise<boolean> {\n if (value == undefined) {\n return valuePriorChanges == undefined;\n }\n if (valuePriorChanges == undefined) {\n return false;\n }\n const files: FileData[] = multiple ? (value as FileData[]).sort() : [value as FileData].sort();\n const filesPriorChanges: FileData[] = multiple ? (valuePriorChanges as FileData[]).sort() : [valuePriorChanges as FileData].sort();\n if (files.length !== filesPriorChanges.length) {\n return false;\n }\n for (let i: number = 0; i < files.length; i++) {\n // checks this before actually getting any files due to performance reasons.\n if (!LodashUtilities.isEqual(LodashUtilities.omit(files[i], 'file'), LodashUtilities.omit(filesPriorChanges[i], 'file'))) {\n return false;\n }\n if (filesPriorChanges[i].file && !files[i].file) {\n files[i] = await FileUtilities.getFileData(files[i], http);\n value = files[i];\n }\n if (files[i].file && !filesPriorChanges[i].file) {\n filesPriorChanges[i] = await FileUtilities.getFileData(filesPriorChanges[i], http);\n valuePriorChanges = filesPriorChanges[i];\n }\n if (!LodashUtilities.isEqual(await files[i].file?.text(), await filesPriorChanges[i].file?.text())) {\n return false;\n }\n }\n return true;\n }\n\n private static isEqualCustom(\n value: unknown,\n valuePriorChanges: unknown,\n // eslint-disable-next-line typescript/no-explicit-any\n metadata: CustomDecoratorConfigInternal<any, any, any, any>\n ): boolean {\n return metadata.isEqual(value, valuePriorChanges, metadata);\n }\n\n /**\n * Compare function for sorting entity keys by their order value.\n * @param a - First key of entity.\n * @param b - Second key of entity.\n * @param entity - Current entity (used to get metadata of entity keys).\n * @returns 0 if both values have the same order, a negative value if 'a' comes before 'b', a positive value if 'a' comes behind 'b'.\n */\n static compareOrder<EntityType extends BaseEntityType<EntityType>>(\n a: keyof EntityType,\n b: keyof EntityType,\n entity: EntityType\n ): number {\n const metadataA: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, a);\n const metadataB: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, b);\n\n if (!metadataA || !metadataB) {\n return 0;\n }\n\n if (metadataA.position.order === -1) {\n if (metadataB.position.order === -1) {\n return 0;\n }\n return 1;\n }\n else if (metadataB.position.order === -1) {\n return -1;\n }\n return metadataA.position.order - metadataB.position.order;\n }\n\n /**\n * Gets the bootstrap column classes for \"lg\", \"md\" and \"sm\".\n * @param entity - Entity to get the bootstrap column values of the key.\n * @param key - Key of the property to get bootstrap column values from.\n * @returns Bootstrap column classes.\n * @throws When no metadata for the given key was found.\n */\n static getWidthClasses<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, key: keyof EntityType): string {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n if (!metadata) {\n throw new Error(`Could not get metadata for property \"${key.toString()}\"`);\n }\n return `col-lg-${metadata.defaultWidths[0]} col-md-${metadata.defaultWidths[1]} col-sm-${metadata.defaultWidths[2]}`;\n }\n\n /**\n * Resets all changes on an entity.\n * @param entity - The entity to reset.\n * @param entityPriorChanges - The entity before any changes.\n */\n static resetChangesOnEntity<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, entityPriorChanges: EntityType): void {\n for (const key in entityPriorChanges) {\n ReflectUtilities.set(entity, key, ReflectUtilities.get(entityPriorChanges, key));\n if (ReflectUtilities.hasMetadata(this.METADATA_KEYS_TO_RESET_KEY, entity, key)) {\n for (const k of (ReflectUtilities.getMetadata(this.METADATA_KEYS_TO_RESET_KEY, entity, key) as string[])) {\n if (ReflectUtilities.hasMetadata(k, entity, key)) {\n ReflectUtilities.defineMetadata(k, undefined, entity, key);\n }\n }\n }\n }\n }\n\n private static getEntityRows<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n tab: number,\n hideOmitForCreate: boolean,\n hideOmitForEdit: boolean,\n additionalOmitValues: (keyof EntityType)[],\n injector: EnvironmentInjector\n ): EntityRow<EntityType>[] {\n const res: EntityRow<EntityType>[] = [];\n\n const keys: (keyof EntityType)[] = this.keysOf(entity, injector, hideOmitForCreate, hideOmitForEdit)\n .filter(k => !additionalOmitValues.includes(k));\n const numberOfRows: number = this.getNumberOfRows<EntityType>(keys, entity, tab);\n for (let i: number = 1; i <= numberOfRows; i++) {\n const row: EntityRow<EntityType> = {\n row: i,\n keys: this.getKeysForRow<EntityType>(keys, entity, i, tab)\n };\n res.push(row);\n }\n\n if (this.getKeysForRow<EntityType>(keys, entity, -1, tab).length) {\n const lastRow: EntityRow<EntityType> = {\n row: numberOfRows + 1,\n keys: this.getKeysForRow<EntityType>(keys, entity, -1, tab)\n };\n res.push(lastRow);\n }\n\n return res;\n }\n\n /**\n * Gets the tabs that are used to display the given entity.\n * @param entity - The entity to get the rows from.\n * @param injector - An angular environment injector.\n * @param hideOmitForCreate - Whether or not keys with the metadata omitForCreate should be filtered out.\n * @param hideOmitForEdit - Whether or not keys with the metadata omitForUpdate should be filtered out.\n * @param additionalOmitKeys - Additional omit values.\n * @returns The sorted Tabs containing the rows and the keys to display in that row.\n */\n static getEntityTabs<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false,\n additionalOmitKeys: (keyof EntityType)[] = []\n ): EntityTab<EntityType>[] {\n const res: EntityTab<EntityType>[] = [];\n const keys: (keyof EntityType)[] = this.keysOf(entity, injector, hideOmitForCreate, hideOmitForEdit)\n .filter(k => !additionalOmitKeys.includes(k));\n const numberOfTabs: number = this.getNumberOfTabs<EntityType>(keys, entity);\n\n const firstTabRows: EntityRow<EntityType>[] = this.getEntityRows<EntityType>(\n entity,\n -1,\n hideOmitForCreate,\n hideOmitForEdit,\n additionalOmitKeys,\n injector\n );\n if (firstTabRows.length) {\n const firstTab: EntityTab<EntityType> = {\n tabName: this.getFirstTabName(entity),\n tab: -1,\n rows: firstTabRows\n };\n res.push(firstTab);\n }\n\n for (let i: number = 2; i <= numberOfTabs; i++) {\n const rows: EntityRow<EntityType>[] = this.getEntityRows<EntityType>(\n entity, i, hideOmitForCreate, hideOmitForEdit, additionalOmitKeys, injector\n );\n if (rows.length) {\n const tab: EntityTab<EntityType> = {\n tabName: this.getTabName(entity, i),\n tab: i,\n rows: rows\n };\n res.push(tab);\n }\n }\n\n return res;\n }\n\n private static getKeysForRow<EntityType extends BaseEntityType<EntityType>>(\n keys: (keyof EntityType)[],\n entity: EntityType,\n row: number,\n tab: number\n ): (keyof EntityType)[] {\n return keys\n .filter(k => this.getPropertyMetadata(entity, k)?.position.row === row)\n .filter(k => this.getPropertyMetadata(entity, k)?.position.tab === tab)\n .sort((a, b) => this.compareOrder(a, b, entity));\n }\n\n private static getNumberOfRows<EntityType extends BaseEntityType<EntityType>>(\n keys: (keyof EntityType)[],\n entity: EntityType,\n tab: number\n ): number {\n return (keys\n .filter(k => this.getPropertyMetadata(entity, k)?.position.tab === tab)\n .map(k => this.getPropertyMetadata(entity, k)?.position.row) as number[])\n .sort((a, b) => a > b ? -1 : 1)[0];\n }\n\n private static getNumberOfTabs<EntityType extends BaseEntityType<EntityType>>(keys: (keyof EntityType)[], entity: EntityType): number {\n return (keys\n .filter(k => this.getPropertyMetadata(entity, k) != undefined)\n .map(k => this.getPropertyMetadata(entity, k)?.position.tab) as number[])\n .sort((a, b) => a > b ? -1 : 1)[0];\n }\n\n private static getTabName<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, tab: number): string {\n const providedTabName: string | undefined = ReflectUtilities.ownKeys(entity)\n .map(k => this.getPropertyMetadata(entity, k))\n .find(m => m?.position.tab === tab && m.position.tabName)?.position.tabName;\n return providedTabName ?? `Tab ${tab}`;\n }\n\n private static getFirstTabName<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): string {\n const providedTabName: string | undefined = ReflectUtilities.ownKeys(entity)\n .map(k => this.getPropertyMetadata(entity, k))\n .find(m => m?.position.tabName && m.position.tab === -1)?.position.tabName;\n return providedTabName ?? 'Tab 1';\n }\n\n /**\n * Gets the keys of the provided entity correctly typed.\n * @param entity - The entity to get the keys of.\n * @param injector - An angular environment injector.\n * @param hideOmitForCreate - Whether or not keys with the metadata omitForCreate should be filtered out.\n * @param hideOmitForEdit - Whether or not keys with the metadata omitForUpdate should be filtered out.\n * @returns An array of keys of the entity.\n */\n static keysOf<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false\n ): (keyof EntityType)[] {\n let keys: (keyof EntityType)[] = ReflectUtilities.ownKeys(entity);\n const dontDisplayKeys: (keyof EntityType)[] = this.getDontDisplayKeys(entity, injector);\n keys = keys.filter(k => !dontDisplayKeys.includes(k));\n if (hideOmitForCreate) {\n const omitForCreateKeys: (keyof EntityType)[] = this.getOmitForCreate(entity);\n keys = keys.filter(k => !omitForCreateKeys.includes(k));\n }\n if (hideOmitForEdit) {\n const omitForUpdateKeys: (keyof EntityType)[] = this.getOmitForUpdate(entity);\n keys = keys.filter(k => !omitForUpdateKeys.includes(k));\n }\n return keys;\n }\n\n private static getDontDisplayKeys<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector\n ): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key in entity) {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = this.getPropertyMetadata(entity, key);\n // eslint-disable-next-line typescript/strict-boolean-expressions\n if (runInInjectionContext(injector, () => !metadata?.display(entity))) {\n res.push(key);\n }\n }\n return res;\n }\n}\n\n/**\n * A row that contains information about how to display an entity.\n */\nexport interface EntityRow<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The row in which this should be displayed.\n */\n row: number,\n /**\n * The keys of the values that should be displayed in that row.\n */\n keys: (keyof EntityType)[]\n}\n\n/**\n * A tab that contains all the information about how to display an entity.\n */\nexport interface EntityTab<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The tab in which the rows should be displayed.\n */\n tab: number,\n /**\n * The name to display inside the tab.\n */\n tabName: string,\n /**\n * The rows that should be displayed inside this tab,.\n */\n rows: EntityRow<EntityType>[]\n}","import { DecoratorType, DecoratorTypes } from './decorator-types.enum';\nimport { ReflectUtilities } from '../../encapsulation/reflect.utilities';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\n\n/**\n * The base decorator for setting metadata on properties.\n * @param metadata - The metadata to define.\n * @param type - The type of metadata.\n * @param metadataKeysToReset - Any metadata keys which values should be set to undefined on reset.\n * @returns The method that sets the metadata.\n */\nexport function baseProperty<\n T extends DecoratorTypes,\n CustomMetadataType extends Record<string, unknown>\n>(metadata: DecoratorType<T, CustomMetadataType>, type: T, metadataKeysToReset?: string[]) {\n return function(target: object, propertyKey: string) {\n ReflectUtilities.defineMetadata('metadata', metadata, target, propertyKey as keyof object);\n ReflectUtilities.defineMetadata('type', type, target, propertyKey as keyof object);\n ReflectUtilities.defineMetadata(\n EntityUtilities.METADATA_KEYS_TO_RESET_KEY,\n metadataKeysToReset,\n target,\n propertyKey as keyof object\n );\n };\n}","import { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from './string-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting string Property metadata.\n * @param metadata - The metadata of the string property.\n * @returns The method that defines the metadata.\n */\nexport function string(\n metadata: DropdownStringDecoratorConfig | AutocompleteStringDecoratorConfig\n | DefaultStringDecoratorConfig | TextboxStringDecoratorConfig | PasswordStringDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.displayStyle) {\n case 'dropdown':\n return baseProperty(new DropdownStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_DROPDOWN);\n case 'autocomplete':\n return baseProperty(new AutocompleteStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_AUTOCOMPLETE);\n case 'textbox':\n return baseProperty(new TextboxStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_TEXTBOX);\n case 'password':\n return baseProperty(\n new PasswordStringDecoratorConfigInternal(metadata),\n DecoratorTypes.STRING_PASSWORD,\n [EntityUtilities.CONFIRM_PASSWORD_KEY]\n );\n default:\n return baseProperty(new DefaultStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentInjector } from '@angular/core';\n\nimport { string } from '../decorators/string/string.decorator';\nimport { EntityService } from '../services/entity.service';\n\n/**\n * The newable type used whenever an entity class is passed to create an entity and initialize its metadata.\n */\nexport type EntityClassNewable<EntityType extends BaseEntityType<EntityType>> = new(data?: EntityType) => EntityType;\n\n/**\n * The newable type used whenever an entity service class is passed.\n */\n// eslint-disable-next-line stylistic/max-len\nexport type EntityServiceClassNewable<EntityType extends BaseEntityType<EntityType>> = new (http: HttpClient, injector: EnvironmentInjector) => EntityService<EntityType>;\n\n/**\n * The Generic Base EntityType.\n */\nexport type BaseEntityType<T> = { [K in keyof T]: unknown };\n\n/**\n * A base Entity class with a builtin id.\n */\nexport abstract class Entity {\n /**\n * A unique identifier for the Entity.\n */\n @string({\n omitForCreate: true,\n omitForUpdate: true,\n display: false,\n displayStyle: 'line',\n displayName: 'ID',\n required: true\n })\n readonly id!: string;\n\n constructor(entity?: Entity) {\n this.id = entity?.id as string;\n }\n}","/* istanbul ignore file */\nimport { NgxGlobalDefaultValues } from './global-configuration-values';\n\n/**\n * The default configuration values of the library.\n */\nexport const defaultGlobalDefaults: NgxGlobalDefaultValues = {\n createLabel: 'Create',\n editLabel: 'Edit',\n cancelLabel: 'Cancel',\n addLabel: 'Add',\n deleteLabel: 'Delete',\n backLabel: 'Back',\n actionsLabel: 'Actions',\n searchLabel: 'Search',\n dropdownTrue: 'Yes',\n dropdownFalse: 'No',\n confirmLabel: 'Confirm',\n defaultConfirmDialogText: ['Do you really want to do this?'],\n defaultConfirmDialogTitle: 'Confirmation',\n confirmSaveText: ['Do you really want to save all changes?'],\n saveLabel: 'Save',\n confirmDeleteText: ['Do you really want to delete this entity?'],\n confirmUnsavedChangesLabel: 'Leave',\n confirmUnsavedChangesDialogLabel: 'Close',\n confirmUnsavedChangesTitle: 'Unsaved Changes',\n confirmUnsavedChangesText: ['You have unsaved changes that will be deleted when you leave this page.', 'Continue?'],\n confirmUnsavedChangesDialogText: ['You have unsaved changes that will be deleted when you close this dialog.', 'Continue?'],\n addArrayItemTitle: 'Add to array',\n confirmCreateText: ['Do you really want to create this entity?'],\n confirmMultiSelectActionText: selectedEntries => [`Do you really want to run this action on ${selectedEntries.length} entries?`],\n confirmBaseActionText: ['Do you really want to run this action?'],\n confirmImportJsonText: ['Do you really want to import entities from the provided file?'],\n defaultEditMethod: 'dialog',\n defaultCreateMethod: 'dialog',\n emptyArrayErrorMessage: 'Needs to contain at least one value',\n removeLabel: 'Remove',\n timeLabel: 'Time',\n startLabel: 'Start',\n endLabel: 'End',\n duplicateErrorText: ['Adding duplicate entries to the array is not allowed.'],\n duplicateErrorTitle: 'Error adding duplicate item',\n editTitle: () => 'Edit',\n selectLabel: 'Select',\n addAllLabel: 'Add all'\n};\n\n/**\n * The key for a config value that still needs an update.\n */\nexport const CONFIG_NEEDS_UPDATE_KEY: string = 'NEEDS_UPDATE';\n\n/**\n * The global defaults for a configuration that needs update.\n */\nexport const needsUpdateGlobalDefaults: NgxGlobalDefaultValues = {\n createLabel: CONFIG_NEEDS_UPDATE_KEY,\n editLabel: CONFIG_NEEDS_UPDATE_KEY,\n cancelLabel: CONFIG_NEEDS_UPDATE_KEY,\n addLabel: CONFIG_NEEDS_UPDATE_KEY,\n deleteLabel: CONFIG_NEEDS_UPDATE_KEY,\n backLabel: CONFIG_NEEDS_UPDATE_KEY,\n actionsLabel: CONFIG_NEEDS_UPDATE_KEY,\n searchLabel: CONFIG_NEEDS_UPDATE_KEY,\n dropdownTrue: CONFIG_NEEDS_UPDATE_KEY,\n dropdownFalse: CONFIG_NEEDS_UPDATE_KEY,\n confirmLabel: CONFIG_NEEDS_UPDATE_KEY,\n defaultConfirmDialogText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n defaultConfirmDialogTitle: CONFIG_NEEDS_UPDATE_KEY,\n saveLabel: CONFIG_NEEDS_UPDATE_KEY,\n confirmSaveText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmDeleteText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmUnsavedChangesLabel: CONFIG_NEEDS_UPDATE_KEY,\n confirmUnsavedChangesDialogLabel: CONFIG_NEEDS_UPDATE_KEY,\n confirmUnsavedChangesTitle: CONFIG_NEEDS_UPDATE_KEY,\n confirmUnsavedChangesText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmUnsavedChangesDialogText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n addArrayItemTitle: CONFIG_NEEDS_UPDATE_KEY,\n confirmCreateText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmMultiSelectActionText: () => CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmBaseActionText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n confirmImportJsonText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n defaultEditMethod: CONFIG_NEEDS_UPDATE_KEY as 'dialog' | 'page',\n defaultCreateMethod: CONFIG_NEEDS_UPDATE_KEY as 'dialog' | 'page',\n emptyArrayErrorMessage: CONFIG_NEEDS_UPDATE_KEY,\n removeLabel: CONFIG_NEEDS_UPDATE_KEY,\n timeLabel: CONFIG_NEEDS_UPDATE_KEY,\n startLabel: CONFIG_NEEDS_UPDATE_KEY,\n endLabel: CONFIG_NEEDS_UPDATE_KEY,\n duplicateErrorText: CONFIG_NEEDS_UPDATE_KEY as unknown as string[],\n duplicateErrorTitle: CONFIG_NEEDS_UPDATE_KEY,\n editTitle: CONFIG_NEEDS_UPDATE_KEY as unknown as () => string,\n selectLabel: CONFIG_NEEDS_UPDATE_KEY,\n addAllLabel: CONFIG_NEEDS_UPDATE_KEY\n};","import { BaseEntityType } from './entity.model';\nimport { CONFIG_NEEDS_UPDATE_KEY } from '../default-global-configuration-values';\nimport { NgxGlobalDefaultValues } from '../global-configuration-values';\n\n/**\n * The abstract BaseBuilder class.\n */\nexport abstract class BaseBuilder<InternalType extends InputType, InputType extends BaseEntityType<InputType>> {\n\n private readonly data: InternalType;\n private readonly inputData?: InputType;\n /**\n * The global configuration, is used for providing default values to fallback to.\n */\n protected readonly globalConfig: NgxGlobalDefaultValues;\n\n protected constructor(globalConfig: NgxGlobalDefaultValues, data?: InputType) {\n this.globalConfig = globalConfig;\n this.validateInput(data);\n this.inputData = data;\n this.data = this.generateBaseData(data);\n return this;\n }\n\n /**\n * Generates the internal data from the given user inputs.\n * @param data - The input from the user.\n * @returns The internal data.\n */\n protected abstract generateBaseData(data?: InputType): InternalType;\n\n /**\n * Used to validate the user input in the constructor.\n * @param data - The user input.\n */\n // eslint-disable-next-line unusedImports/no-unused-vars\n protected validateInput(data?: InputType): void {\n // By default, no validation is done\n }\n\n /**\n * Sets the value for the given key if no user value was provided.\n * @param key - The key to set the default value for.\n * @param value - The value to set when nothing was provided.\n * @returns The Builder.\n */\n withDefault(key: keyof InputType, value: Omit<InternalType[keyof InputType], 'undefined'>): BaseBuilder<InternalType, InputType> {\n if (this.inputData?.[key] == undefined || this.inputData[key] === CONFIG_NEEDS_UPDATE_KEY) {\n this.data[key] = value as InternalType[keyof InputType];\n }\n return this;\n }\n\n /**\n * Method used to get the final build value after applying all chaining.\n * @returns The build value.\n */\n getResult(): InternalType {\n return this.data;\n }\n}","import { CONFIG_NEEDS_UPDATE_KEY } from '../default-global-configuration-values';\n\n/**\n * Gets either the provided value or the default value, depending on if and what has been provided.\n * @param defaultValue - The default value to fallback when nothing has been provided.\n * @param value - The specific value configured by the user.\n * @returns Value if it is not null and not the CONFIG_NEEDS_UPDATE_KEY, defaultValue otherwise.\n */\nexport function getConfigValue<ValueType>(defaultValue: ValueType, value?: ValueType): ValueType {\n if (value != undefined && value !== CONFIG_NEEDS_UPDATE_KEY) {\n return value;\n }\n return defaultValue;\n}","import { ConfirmDialogData, ConfirmDialogTypes } from './confirm-dialog-data';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { CONFIG_NEEDS_UPDATE_KEY } from '../../default-global-configuration-values';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\n\n/**\n * The internal ConfirmDialogData. Requires all default values the user can leave out.\n */\nexport class ConfirmDialogDataInternal implements ConfirmDialogData {\n // eslint-disable-next-line jsdoc/require-jsdoc\n text: string[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: ConfirmDialogTypes;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmation: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmationText?: string;\n\n constructor(\n text: string[],\n type: ConfirmDialogTypes,\n confirmButtonLabel: string,\n cancelButtonLabel: string,\n title: string,\n requireConfirmation: boolean,\n confirmationText?: string\n ) {\n this.text = text;\n this.type = type;\n this.confirmButtonLabel = confirmButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.title = title;\n this.requireConfirmation = requireConfirmation;\n this.confirmationText = confirmationText;\n }\n}\n\n/**\n * The Builder for the ConfirmDialogData. Sets default values.\n */\nexport class ConfirmDialogDataBuilder extends BaseBuilder<ConfirmDialogDataInternal, ConfirmDialogData> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: ConfirmDialogData) {\n super(globalConfig, data);\n }\n\n protected override generateBaseData(data?: ConfirmDialogData): ConfirmDialogDataInternal {\n return new ConfirmDialogDataInternal(\n getConfigValue(this.globalConfig.defaultConfirmDialogText, data?.text),\n data?.type ?? 'default',\n getConfigValue(this.globalConfig.confirmLabel, data?.confirmButtonLabel),\n getConfigValue(this.globalConfig.cancelLabel, data?.cancelButtonLabel),\n getConfigValue(this.globalConfig.defaultConfirmDialogTitle, data?.title),\n data?.requireConfirmation ?? false,\n data?.confirmationText\n );\n }\n\n protected override validateInput(data?: ConfirmDialogData): void {\n if (!data) {\n return;\n }\n if (data.requireConfirmation === true && !data.confirmationText) {\n throw new Error(\n 'Missing required Input data \"confirmationText\". You can only omit this value when \"requireConfirmation\" is false.'\n );\n }\n if (data.requireConfirmation !== true && data.confirmationText) {\n throw new Error('The \"confirmationText\" will never be shown because \"requireConfirmation\" is not set to true');\n }\n if (data.type === 'info-only' && data.cancelButtonLabel && data.cancelButtonLabel !== CONFIG_NEEDS_UPDATE_KEY) {\n throw new Error(`The \"cancelButtonLabel\" \"${data.cancelButtonLabel}\" will never be shown because \"type\" is set to \"info-only\"`);\n }\n }\n}","/* istanbul ignore file */\nimport { InjectionToken, inject } from '@angular/core';\n\nimport { defaultGlobalDefaults } from './default-global-configuration-values';\n\n/**\n * All configurable default values.\n */\nexport interface NgxGlobalDefaultValues {\n /**\n * The label for create buttons.\n * @default 'Create'\n */\n createLabel: string,\n /**\n * The label for edit buttons.\n * @default 'Edit'\n */\n editLabel: string,\n /**\n * The label for save buttons.\n * @default 'Save'\n */\n saveLabel: string,\n /**\n * The label for cancel buttons.\n * @default 'Cancel'\n */\n cancelLabel: string,\n /**\n * The label for add buttons.\n * @default 'Add'\n */\n addLabel: string,\n /**\n * The label for delete buttons.\n * @default 'Delete'\n */\n deleteLabel: string,\n /**\n * The label for back buttons.\n * @default 'Back'\n */\n backLabel: string,\n /**\n * The label for actions.\n * @default 'Actions'\n */\n actionsLabel: string,\n /**\n * The label for searches.\n * @default 'Search'\n */\n searchLabel: string,\n /**\n * The display value for the \"true\" value in dropdowns.\n * @default 'Yes'\n */\n dropdownTrue: string,\n /**\n * The display value for the \"false\" value in dropdowns.\n * @default 'No'\n */\n dropdownFalse: string,\n /**\n * The label for confirm buttons.\n * @default 'Confirm'\n */\n confirmLabel: string,\n /**\n * The title for a confirm dialog.\n * @default 'Confirmation'\n */\n defaultConfirmDialogTitle: string,\n /**\n * The text for a confirm dialog.\n * @default ['Do you really want to do this?']\n */\n defaultConfirmDialogText: string[],\n /**\n * The text for confirming a save action.\n * @default ['Do you really want to save all changes?']\n */\n confirmSaveText: string[],\n /**\n * The text for confirming a delete action.\n * @default ['Do you really want to delete this entity?']\n */\n confirmDeleteText: string[],\n /**\n * The label for the button to leave without changes.\n * @default 'Leave'\n */\n confirmUnsavedChangesLabel: string,\n /**\n * The label for the button to close a dialog without changes.\n * @default 'Close'\n */\n confirmUnsavedChangesDialogLabel: string,\n /**\n * The title for confirming to leave without changes.\n * @default 'Unsaved Changes'\n */\n confirmUnsavedChangesTitle: string,\n /**\n * The text for confirming to leave a page without changes.\n * @default ['You have unsaved changes that will be deleted when you leave this page.', 'Continue?']\n */\n confirmUnsavedChangesText: string[],\n /**\n * The text for confirming to leave a dialog without changes.\n * @default ['You have unsaved changes that will be deleted when you close this dialog.', 'Continue?']\n */\n confirmUnsavedChangesDialogText: string[],\n /**\n * The title for the add array item dialog.\n * @default 'Add to array'\n */\n addArrayItemTitle: string,\n /**\n * The text for confirming a create action.\n * @default ['Do you really want to create this entity?']\n */\n confirmCreateText: string[],\n /**\n * The text for confirming a multi select action.\n * @default selectedEntries => [`Do you really want to run this action on ${selectedEntries.length} entries?`]\n */\n confirmMultiSelectActionText: (selectedEntries: unknown[]) => string[],\n /**\n * The text for confirming a base action.\n * @default ['Do you really want to run this action?']\n */\n confirmBaseActionText: string[],\n /**\n * The text for confirming the json import.\n * @default ['Do you really want to import entities from the provided file?']\n */\n confirmImportJsonText: string[],\n /**\n * How table entities are edited by default.\n * @default 'dialog'\n */\n defaultEditMethod: 'dialog' | 'page',\n /**\n * How table entities are created by default.\n * @default 'dialog'\n */\n defaultCreateMethod: 'dialog' | 'page',\n /**\n * The error message to display when an array property is required and empty.\n * @default 'Needs to contain at least one value'\n */\n emptyArrayErrorMessage: string,\n /**\n * The label for remove actions.\n * @default 'Remove'\n */\n removeLabel: string,\n /**\n * The label for time values.\n * Mainly used inside date properties.\n * @default 'Time'\n */\n timeLabel: string,\n /**\n * The label for the date range start.\n * @default 'Start'\n */\n startLabel: string,\n /**\n * The label for the date range end.\n * @default 'End'\n */\n endLabel: string,\n /**\n * The error text for duplicate entries inside an array.\n * @default ['Adding duplicate entries to the array is not allowed.']\n */\n duplicateErrorText: string[],\n /**\n * The error title for duplicate entries inside an array.\n * @default 'Error adding duplicate item'\n */\n duplicateErrorTitle: string,\n /**\n * The title for editing an entities.\n * @default () => 'Edit'\n */\n editTitle: (entity: unknown) => string,\n /**\n * The label for an select action, eg. Dropdowns.\n * @default 'Select'\n */\n selectLabel: string,\n /**\n * The label for an \"Add all\" button.\n * @default 'Add all'\n */\n addAllLabel: string\n\n}\n\n/**\n * The provider for global configuration values.\n */\n// eslint-disable-next-line stylistic/max-len\nexport const NGX_GLOBAL_DEFAULT_VALUES: InjectionToken<Partial<NgxGlobalDefaultValues>> = new InjectionToken<Partial<NgxGlobalDefaultValues>>(\n 'NGX_GLOBAL_DEFAULT_VALUES',\n {\n providedIn: 'root',\n factory: () => {\n return {};\n }\n }\n);\n\n/**\n * The internal values consisting of default ones and values provided by the user in NGX_GLOBAL_DEFAULT_VALUES.\n */\nexport const NGX_COMPLETE_GLOBAL_DEFAULT_VALUES: InjectionToken<NgxGlobalDefaultValues> = new InjectionToken<NgxGlobalDefaultValues>(\n 'NGX_COMPLETE_GLOBAL_DEFAULT_VALUES',\n {\n providedIn: 'root',\n factory: () => {\n const userValues: Partial<NgxGlobalDefaultValues> = inject(NGX_GLOBAL_DEFAULT_VALUES);\n return {\n ...defaultGlobalDefaults,\n ...userValues\n };\n }\n }\n);","import { NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { ConfirmDialogData } from './confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from './confirm-dialog-data.builder';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\n\n/**\n * The Dialog used whenever confirmation by the user is required (e.g. When the user tries to delete an entity).\n *\n * Can be customized with the MAT_DIALOG_DATA \"inputData\". Customization options are defined in \"ConfirmDialogData\".\n */\n@Component({\n selector: 'ngx-mat-entity-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatDialogModule,\n FormsModule,\n MatCheckboxModule,\n MatButtonModule\n ]\n})\nexport class NgxMatEntityConfirmDialogComponent implements OnInit {\n\n /**\n * Whether or not the user needs to tick a checkbox to enable the confirm button.\n */\n confirm: boolean = false;\n\n /**\n * The configuration data of the dialog.\n */\n data!: ConfirmDialogDataInternal;\n\n constructor(\n private readonly dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: ConfirmDialogData,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n ngOnInit(): void {\n this.data = new ConfirmDialogDataBuilder(this.globalConfig, this.inputData).getResult();\n this.dialogRef.disableClose = true;\n }\n\n /**\n * Closes the dialog with true to signal that the action should be run.\n */\n confirmAction(): void {\n this.dialogRef.close(true);\n }\n\n /**\n * Closes the dialog.\n */\n cancel(): void {\n this.dialogRef.close(false);\n }\n}","@if (data.title) {\n <h2 mat-dialog-title>{{data.title}}</h2>\n}\n\n<mat-dialog-content>\n @for (paragraph of data.text; track $index) {\n <p>{{paragraph}}</p>\n }\n @if (data.requireConfirmation) {\n <div class=\"checkbox-wrapper\">\n <mat-checkbox name=\"confirm\" [(ngModel)]=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (data.type === 'delete') {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"confirm-button\" [disabled]=\"data.requireConfirmation && !confirm\" (click)=\"confirmAction()\">\n {{data.confirmButtonLabel}}\n </button>\n }\n @if (data.type !== 'delete') {\n <button type=\"button\" mat-raised-button class=\"confirm-button\" [disabled]=\"data.requireConfirmation && !confirm\" (click)=\"confirmAction()\">\n {{data.confirmButtonLabel}}\n </button>\n }\n @if (data.type !== 'info-only') {\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.cancelButtonLabel}}\n </button>\n }\n</mat-dialog-actions>","import { CanDeactivateFn } from '@angular/router';\n\n/**\n * Interface definition for a page that can work with the UnsavedChangesGuard.\n */\nexport interface UnsavedChangesPage {\n /**\n * Whether the page can be left without confirmation of unsaved changes.\n * @returns Whether or not the page can be left without confirmation.\n */\n canDeactivate: () => boolean,\n /**\n * Opens the confirm dialog for navigating with unsaved changes.\n * @returns The the promise boolean result of the confirm dialog.\n */\n openConfirmNavigationDialog: () => Promise<boolean>\n}\n\n/**\n * A guard that checks if the user has unsaved changes and then prompts a confirmation from him.\n * Is used by the ngx-material-entity edit and create pages.\n * @param component - The component, can be either an edit or create page.\n * @returns An observable containing whether or not the user can continue.\n */\nexport const UnsavedChangesGuard: CanDeactivateFn<UnsavedChangesPage> = async (component: UnsavedChangesPage) => {\n if (component.canDeactivate()) {\n return true;\n }\n return await component.openConfirmNavigationDialog();\n};","import { EnvironmentProviders, Provider, Type } from '@angular/core';\nimport { DefaultExport, Route } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { UnsavedChangesGuard } from '../../services/unsaved-changes.guard';\n\n/**\n * The definition for a route to use with the \"NgxMatEntityCreatePageComponent\".\n */\nexport interface CreateDataRoute extends Route {\n // eslint-disable-next-line jsdoc/require-jsdoc, stylistic/max-len\n loadComponent: () => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>,\n // eslint-disable-next-line jsdoc/require-jsdoc\n providers: (Provider | EnvironmentProviders)[],\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string,\n // eslint-disable-next-line jsdoc/require-jsdoc\n path: string\n}\n\n/**\n * The default data for a create route.\n */\nexport const defaultCreateDataRoute: Omit<CreateDataRoute, 'providers'> = {\n // eslint-disable-next-line promise/prefer-await-to-then\n loadComponent: () => import('./create-page.component').then(m => m.NgxMatEntityCreatePageComponent),\n title: 'Create',\n path: 'entities/create',\n canDeactivate: [UnsavedChangesGuard]\n};","import { BaseBuilder } from '../../../classes/base.builder';\nimport { getConfigValue } from '../../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateData } from '../table-data';\n\n/**\n * The internal CreateData. Requires all default values the user can leave out.\n */\nexport class CreateDataInternal implements CreateData {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createRequiresConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmCreateDialogData: ConfirmDialogDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogData;\n\n constructor(\n title: string,\n createButtonLabel: string,\n cancelButtonLabel: string,\n createRequiresConfirmDialog: boolean,\n confirmCreateDialogData: ConfirmDialogDataInternal,\n unsavedChangesRequireConfirmDialog: boolean,\n confirmUnsavedChangesDialogData: ConfirmDialogDataInternal\n ) {\n this.title = title;\n this.createButtonLabel = createButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.createRequiresConfirmDialog = createRequiresConfirmDialog;\n this.confirmCreateDialogData = confirmCreateDialogData;\n this.unsavedChangesRequireConfirmDialog = unsavedChangesRequireConfirmDialog;\n this.confirmUnsavedChangesDialogData = confirmUnsavedChangesDialogData;\n }\n}\n\n/**\n * The Builder for the CreateData. Sets default values.\n */\nexport class CreateDataBuilder extends BaseBuilder<CreateDataInternal, CreateData> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: CreateData) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: CreateData): CreateDataInternal {\n // eslint-disable-next-line stylistic/max-len\n const confirmCreateDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmCreateDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n // eslint-disable-next-line stylistic/max-len\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmUnsavedChangesDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n return new CreateDataInternal(\n getConfigValue(this.globalConfig.createLabel, data?.title),\n getConfigValue(this.globalConfig.createLabel, data?.createButtonLabel),\n getConfigValue(this.globalConfig.cancelLabel, data?.cancelButtonLabel),\n data?.createRequiresConfirmDialog ?? false,\n confirmCreateDialogData,\n data?.unsavedChangesRequireConfirmDialog ?? true,\n confirmUnsavedChangesDialogData\n );\n }\n}","import { PageCreateData } from './create-page.component';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateDataBuilder, CreateDataInternal } from '../table/create-dialog/create-data.builder';\nimport { CreateEntityDataInternal } from '../table/create-dialog/create-entity-data.builder';\n\n// eslint-disable-next-line jsdoc/require-jsdoc, stylistic/max-len\nexport type PageCreateDataInternal<EntityType extends BaseEntityType<EntityType>> = Omit<CreateEntityDataInternal<EntityType>, 'entity' | 'EntityServiceClass'> & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayLoadingSpinner: boolean,\n // eslint-disable-next-line jsdoc/require-jsdoc\n createData: CreateDataInternal & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogDataInternal,\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean\n }\n};\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport class PageCreateDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<PageCreateDataInternal<EntityType>, PageCreateData<EntityType>> {\n\n constructor(data: PageCreateData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: PageCreateData<EntityType>): PageCreateDataInternal<EntityType> {\n const createData: CreateDataInternal = new CreateDataBuilder(this.globalConfig, data.createData)\n .withDefault('cancelButtonLabel', this.globalConfig.backLabel)\n .getResult();\n\n // eslint-disable-next-line stylistic/max-len\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data.createData?.confirmUnsavedChangesDialogData)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesLabel)\n .getResult();\n\n return {\n createData: {\n ...createData,\n confirmUnsavedChangesDialogData: confirmUnsavedChangesDialogData,\n unsavedChangesRequireConfirmDialog: data.createData?.unsavedChangesRequireConfirmDialog ?? true\n },\n displayLoadingSpinner: data.displayLoadingSpinner ?? true\n };\n }\n}","import { InjectionToken, inject } from '@angular/core';\n\nimport { ValidationError } from '../utilities/validation.utilities';\n\n/**\n * Provider for the validation errors tooltip title.\n */\nexport const NgxValidationErrorsTooltipTitle: InjectionToken<string> = new InjectionToken(\n 'Provider for the validation errors tooltip title.',\n {\n providedIn: 'root',\n factory: () => 'Validation Errors:'\n }\n);\n\n/**\n * The default function that gets the validation errors tooltip content.\n * @param validationErrors - All validation errors for which the tooltip content should be generated.\n * @returns A html string, containing a list of the name of each invalid property.\n */\nexport function getValidationErrorsTooltipContent(validationErrors: ValidationError[]): string {\n const title: string = inject(NgxValidationErrorsTooltipTitle);\n let res: string = `${title}\\n<br>\\n<ul style=\"margin-bottom: 0px; padding-left: 16px;\">`;\n for (const error of validationErrors) {\n res = res.concat(`\\n\\t<li>${error.property}</li>`);\n }\n res = res.concat('\\n</ul>');\n return res;\n}","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentInjector } from '@angular/core';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\n\nimport { BaseEntityType } from '../classes/entity.model';\nimport { DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { EntityUtilities } from '../utilities/entity.utilities';\nimport { FileUtilities } from '../utilities/file.utilities';\n\n/**\n * A generic EntityService class.\n * Offers basic CRUD-functionality.\n * You should create a service for every Entity you have.\n * If you extend from this you need to make sure that the extended Service can be injected.\n */\nexport abstract class EntityService<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The base url used for api requests. If u want to have more control over this,\n * you can override the create, read, update and delete methods.\n *\n * Create Sends a POST-Request to baseUrl.\n *\n * Read Sends a GET-Request to baseUrl.\n *\n * Update Sends a PATCH-Request to baseUrl/{id}.\n *\n * Delete Sends a DEL-Request to baseUrl/{id}.\n */\n abstract readonly baseUrl: string;\n\n /**\n * The default route segment that comes before the id when editing an entity in a separate page, if no extra route has been provided.\n */\n readonly editBaseRoute: string = 'entities';\n\n /**\n * The complete route that is used to create an entity in a separate page, if no extra route has been provided.\n */\n readonly createBaseRoute: string = 'entities/create';\n\n /**\n * The key which holds the id value.\n * @default 'id'\n */\n readonly idKey: keyof EntityType = 'id' as keyof EntityType;\n\n /**\n * A subject of all the entity values.\n * Can be subscribed to when you want to do a specific thing whenever the entities change.\n */\n readonly entitiesSubject: BehaviorSubject<EntityType[]> = new BehaviorSubject<EntityType[]>([]);\n\n /**\n * When frequently trying to find a single entity by an id (eg. When nesting relations)\n * you might send a lot of unnecessary requests.\n * Therefore the findById method tries to look in the already existing entities first,\n * IF the entities have been requested in the last READ_EXPIRATION_IN_MS milliseconds.\n * @default 900000 (5 minutes)\n */\n protected readonly READ_EXPIRATION_IN_MS: number = 900000;\n\n /**\n * Gets the entities in an array from the internal entitiesSubject.\n * @returns The current entities in form of an array.\n */\n get entities(): EntityType[] {\n return this.entitiesSubject.value;\n }\n\n /**\n * The last time that the entities have been requested from the api.\n */\n lastRead?: Date;\n\n constructor(protected readonly http: HttpClient, protected readonly injector: EnvironmentInjector) {}\n\n /**\n * Creates a new Entity and pushes it to the entities array.\n * @param entity - The data of the entity to create.\n * All values that should be omitted will be removed from it inside this method.\n * @param baseUrl - The base url to send the post request to.\n * This can be used if you want to create an entity belonging to another, like \"customers/{id}/invoices\".\n * @returns A Promise of the created entity.\n */\n async create(entity: EntityType, baseUrl: string = this.baseUrl): Promise<EntityType> {\n const body: Partial<EntityType> = EntityUtilities.getWithoutOmitCreateValues(entity);\n const filePropertyKeys: (keyof EntityType)[] = EntityUtilities.getFileProperties(entity);\n if (!filePropertyKeys.length) {\n return await this.createWithJson(body, baseUrl);\n }\n return await this.createWithFormData(body, filePropertyKeys, entity, baseUrl);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Imports everything from the provided json file.\n * @param file - The json file to import from.\n * @returns All entities that have been imported.\n */\n async import(file: File): Promise<EntityType[]> {\n const formData: FormData = new FormData();\n formData.append('import', file);\n const result: EntityType[] = await firstValueFrom(this.http.post<EntityType[]>(`${this.baseUrl}/import`, formData));\n this.entities.push(...result);\n this.entitiesSubject.next(this.entities);\n return result;\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Creates the entity with form data when the entity contains files in contrast to creating it with a normal json body.\n * All file values are stored inside their respective property key and their name.\n * Form data is able to handle setting multiple files to the same key.\n * @param body - The body Of the request.\n * @param filePropertyKeys - All property keys that are files and need to be added to the form data.\n * @param entity - The entity to create. This is needed in addition to the body because the body doesn't contain any metadata.\n * @param baseUrl - The base url to send the post request to.\n * This can be used if you want to create an entity belonging to another, like \"customers/{id}/invoices\".\n * @returns The created entity from the server.\n */\n protected async createWithFormData(\n body: Partial<EntityType>,\n filePropertyKeys: (keyof EntityType)[],\n entity: EntityType,\n baseUrl: string = this.baseUrl\n ): Promise<EntityType> {\n const formData: FormData = new FormData();\n formData.append('body', JSON.stringify(LodashUtilities.omit(body, filePropertyKeys)));\n for (const key of filePropertyKeys) {\n const metadata: DefaultFileDecoratorConfigInternal = EntityUtilities.getPropertyMetadata(\n entity,\n key,\n DecoratorTypes.FILE_DEFAULT\n ) as DefaultFileDecoratorConfigInternal;\n if (metadata.multiple) {\n const fileDataValues: FileData[] = body[key] as FileData[];\n for (const value of fileDataValues) {\n formData.append(key as string, (await FileUtilities.getFileData(value, this.http)).file, value.name);\n }\n }\n else {\n const fileData: FileData = body[key] as FileData;\n formData.append(key as string, (await FileUtilities.getFileData(fileData, this.http)).file, fileData.name);\n }\n }\n const e: EntityType | undefined = await firstValueFrom(this.http.post<EntityType | undefined>(baseUrl, formData));\n if (!e) {\n throw new Error(`\n The created entity was not returned in the response.\n If you want to provide a logic that allows that\n you need to override the create methods of this class.\n `);\n }\n this.entities.push(e);\n this.entitiesSubject.next(this.entities);\n return e;\n }\n\n /**\n * Creates the entity with a normal json body in contrast to creating it with form data when the entity contains files.\n * @param body - The body Of the request.\n * @param baseUrl - The base url to send the post request to.\n * This can be used if you want to create an entity belonging to another, like \"customers/{id}/invoices\".\n * @returns The created entity from the server.\n */\n protected async createWithJson(body: Partial<EntityType>, baseUrl: string = this.baseUrl): Promise<EntityType> {\n const e: EntityType | undefined = await firstValueFrom(this.http.post<EntityType | undefined>(baseUrl, body));\n if (!e) {\n throw new Error(`\n The created entity was not returned in the response.\n If you want to provide a logic that allows that\n you need to override the create methods of this class.\n `);\n }\n this.entities.push(e);\n this.entitiesSubject.next(this.entities);\n return e;\n }\n\n /**\n * Gets all existing entities and pushes them to the entities array.\n * @param baseUrl - The base url for the request. Defaults to the baseUrl on the service.\n * @returns A Promise of all received Entities.\n */\n async read(baseUrl = this.baseUrl): Promise<EntityType[]> {\n const e: EntityType[] = await firstValueFrom(this.http.get<EntityType[]>(baseUrl));\n this.entitiesSubject.next(e);\n this.lastRead = new Date();\n return e;\n }\n\n /**\n * Tries to find an entity with the given id.\n * @param id - The id of the entity to find.\n * @returns The found entity.\n */\n async findById(id: EntityType[keyof EntityType]): Promise<EntityType> {\n if (\n this.lastRead == undefined\n || (Date.now() - this.lastRead.getTime()) > this.READ_EXPIRATION_IN_MS\n ) {\n return firstValueFrom(this.http.get<EntityType>(`${this.baseUrl}/${id}`));\n }\n return this.entities.find(e => e[this.idKey] === id) ?? firstValueFrom(this.http.get<EntityType>(`${this.baseUrl}/${id}`));\n }\n\n /**\n * Updates a specific Entity.\n * @param entity - The updated Entity\n * All values that should be omitted will be removed from it inside this method.\n * @param entityPriorChanges - The current Entity.\n * It Is used to get changed values and only update them instead of sending the whole entity data.\n */\n async update(entity: EntityType, entityPriorChanges: EntityType): Promise<void> {\n const filePropertyKeys: (keyof EntityType)[] = EntityUtilities.getFileProperties(entityPriorChanges);\n const body: Partial<EntityType> = await this.entityToUpdateRequestBody(entity, entityPriorChanges);\n if (!filePropertyKeys.length) {\n await this.updateWithJson(body, entityPriorChanges[this.idKey]);\n return;\n }\n await this.updateWithFormData(body, filePropertyKeys, entity, entityPriorChanges[this.idKey]);\n }\n\n /**\n * Builds the update request body from the given entity before and after its changes.\n * @param entity - The entity with changed values.\n * @param entityPriorChanges - The entity before any changes.\n * @returns A partial of only the changed values.\n */\n protected async entityToUpdateRequestBody(entity: EntityType, entityPriorChanges: EntityType): Promise<Partial<EntityType>> {\n return await EntityUtilities.getWithoutOmitUpdateValues(entity, entityPriorChanges, this.http, this.injector);\n }\n\n // TODO: Find a way to use blobs with jest\n /* istanbul ignore next */\n /**\n * Updates the entity with form data when the entity contains files in contrast to creating it with a normal json body.\n * All file values are stored inside their respective property key and their name.\n * Form data is able to handle setting multiple files to the same key.\n * @param body - The request body. Already contains only properties that have changed.\n * @param filePropertyKeys - The keys of all properties which are files and need to separately be appended to the form data.\n * @param entity - The original entity. Is needed to get the metadata of all the files.\n * @param id - The id of the entity to update.\n */\n protected async updateWithFormData(\n body: Partial<EntityType>,\n filePropertyKeys: (keyof EntityType)[],\n entity: EntityType,\n id: EntityType[keyof EntityType]\n ): Promise<void> {\n const formData: FormData = new FormData();\n formData.append('body', JSON.stringify(LodashUtilities.omit(body, filePropertyKeys)));\n for (const key of filePropertyKeys) {\n const metadata: DefaultFileDecoratorConfigInternal = EntityUtilities.getPropertyMetadata(\n entity,\n key,\n DecoratorTypes.FILE_DEFAULT\n ) as DefaultFileDecoratorConfigInternal;\n if (metadata.multiple) {\n const fileDataValues: FileData[] = body[key] as FileData[];\n for (const value of fileDataValues) {\n formData.append(key as string, (await FileUtilities.getFileData(value, this.http)).file, value.name);\n }\n }\n else {\n const fileData: FileData = body[key] as FileData;\n formData.append(key as string, (await FileUtilities.getFileData(fileData, this.http)).file, fileData.name);\n }\n }\n const updatedEntity: EntityType | undefined = await firstValueFrom(\n this.http.patch<EntityType | undefined>(`${this.baseUrl}/${id}`, formData)\n );\n if (!updatedEntity) {\n // eslint-disable-next-line no-console\n console.warn('The updated entity was not returned in the response. Applying the changes from the request body.');\n for (const key in body) {\n this.entities[this.entities.findIndex(e => e[this.idKey] === id)][key]\n = body[key] as EntityType[Extract<keyof EntityType, string>];\n }\n this.entitiesSubject.next(this.entities);\n return;\n }\n this.entities[this.entities.findIndex(e => e[this.idKey] === id)] = updatedEntity;\n this.entitiesSubject.next(this.entities);\n }\n\n /**\n * Updates the entity with a normal json body in contrast to updating it with form data when the entity contains files.\n * @param body - The body of the Request. Has already removed all unnecessary values.\n * @param id - The id of the entity to update.\n */\n protected async updateWithJson(body: Partial<EntityType>, id: EntityType[keyof EntityType]): Promise<void> {\n const updatedEntity: EntityType | undefined = await firstValueFrom(\n this.http.patch<EntityType | undefined>(`${this.baseUrl}/${id}`, body)\n );\n if (!updatedEntity) {\n // eslint-disable-next-line no-console\n console.warn('The updated entity was not returned in the response. Applying the changes from the request body.');\n const foundEntity: EntityType = this.entities[this.entities.findIndex(e => e[this.idKey] === id)];\n for (const key in body) {\n foundEntity[key]\n = body[key] as EntityType[Extract<keyof EntityType, string>];\n }\n this.entitiesSubject.next(this.entities);\n return;\n }\n this.entities[this.entities.findIndex(e => e[this.idKey] === id)] = updatedEntity;\n this.entitiesSubject.next(this.entities);\n }\n\n /**\n * Deletes a specific Entity.\n * @param entity - The entity to delete.\n */\n async delete(entity: EntityType): Promise<void> {\n await firstValueFrom(this.http.delete<void>(`${this.baseUrl}/${entity[this.idKey]}`));\n // the == comparison instead of === is to catch ids that are numbers.\n this.entities.splice(this.entities.findIndex(e => e[this.idKey] === entity[this.idKey]), 1);\n this.entitiesSubject.next(this.entities);\n }\n}","import { EnvironmentInjector } from '@angular/core';\n\nimport { DateUtilities, Time } from './date.utilities';\nimport { EntityUtilities } from './entity.utilities';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from '../classes/entity.model';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { ToggleBooleanDecoratorConfigInternal } from '../decorators/boolean/boolean-decorator-internal.data';\nimport { CustomDecoratorConfigInternal } from '../decorators/custom/custom-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from '../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../decorators/date/date-decorator.data';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { DefaultNumberDecoratorConfigInternal } from '../decorators/number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../decorators/object/object-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../decorators/string/string-decorator-internal.data';\nimport { LodashUtilities } from '../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../encapsulation/reflect.utilities';\n\n/**\n * A validation error reported by the validation utilities.\n * Consists of the property name where the error originated from and a message.\n */\nexport interface ValidationError {\n /**\n * The property name on which the error occurred. This is the displayName value.\n */\n property: string,\n /**\n * The validation error message.\n */\n message: string\n}\n\n/**\n * Contains HelperMethods around handling Validation of entities and properties.\n */\nexport abstract class ValidationUtilities {\n /**\n * Checks if the values on an entity are valid.\n * Also checks all the validators given by the metadata (\"required\", \"maxLength\" etc.).\n * @param entity - The entity to validate.\n * @param injector - An angular environment injector.\n * @param omit - Whether to check for creating or editing validity.\n * @returns Whether or not the entity is valid.\n */\n static async isEntityValid<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n omit?: 'create' | 'update'\n ): Promise<boolean> {\n return (await this.getEntityValidationErrors(entity, injector, omit)).length === 0;\n }\n\n /**\n * Gets all validation errors on the given entity.\n * @param entity - The entity to validate.\n * @param injector - An angular environment injector.\n * @param omit - What keys not to check. An empty value means no keys are omitted.\n * @returns An array of validation errors on the provided entity.\n */\n static async getEntityValidationErrors<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n injector: EnvironmentInjector,\n omit?: 'create' | 'update'\n ): Promise<ValidationError[]> {\n const res: ValidationError[] = [];\n for (const key of EntityUtilities.keysOf(entity, injector)) {\n const err: ValidationError | undefined = await this.getPropertyValidationError(entity, key, omit);\n if (err) {\n res.push(err);\n }\n }\n return res;\n }\n\n // /**\n // * Checks if a single property value is valid.\n // *\n // * @param entity - The entity where the property is from.\n // * @param key - The name of the property.\n // * @param omit - Whether to check if the given entity is valid for creation or updating.\n // * @returns Whether or not the property value is valid.\n // * @throws Throws when it extracts an unknown metadata type.\n // */\n // static isPropertyValid<EntityType extends BaseEntityType<EntityType>>(\n // entity: EntityType,\n // key: keyof EntityType,\n // omit?: 'create' | 'update'\n // ): boolean {\n // return this.getPropertyValidationError(entity, key, omit) == null;\n // }\n\n /**\n * Validates the property on the given entity with the given key.\n * @param entity - The entity on which the property to check is.\n * @param key - The key of the property to validate.\n * @param omit - What keys not to check. An empty value means no keys are omitted.\n * @returns A validation error when the property is not valid, undefined otherwise.\n * @throws When the type of the property is not known.\n */\n // eslint-disable-next-line sonar/cognitive-complexity\n static async getPropertyValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n key: keyof EntityType,\n omit?: 'create' | 'update'\n ): Promise<ValidationError | undefined> {\n const type: DecoratorTypes | undefined = EntityUtilities.getPropertyType(entity, key);\n if (type == undefined) {\n return undefined;\n }\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(entity, key, type);\n\n // istanbul ignore next\n if (metadata == undefined) {\n return undefined;\n }\n\n if (metadata.omitForCreate && omit === 'create') {\n return undefined;\n }\n if (metadata.omitForUpdate && omit === 'update') {\n return undefined;\n }\n if (type !== DecoratorTypes.HAS_MANY && metadata.required(entity) && (entity[key] == undefined || entity[key] === '')) {\n return {\n property: metadata.displayName,\n message: 'required'\n };\n }\n if (!metadata.required(entity) && (entity[key] == undefined || entity[key] === '')) {\n return undefined;\n }\n switch (type) {\n case DecoratorTypes.BOOLEAN_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.BOOLEAN_CHECKBOX:\n case DecoratorTypes.BOOLEAN_TOGGLE:\n const entityBoolean: boolean = entity[key] as boolean;\n const booleanMetadata: ToggleBooleanDecoratorConfigInternal = metadata as ToggleBooleanDecoratorConfigInternal;\n return this.getBooleanValidationError(entity, entityBoolean, booleanMetadata);\n case DecoratorTypes.STRING_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.STRING:\n const entityString: string = entity[key] as string;\n const stringMetadata: DefaultStringDecoratorConfigInternal = metadata as DefaultStringDecoratorConfigInternal;\n return this.getStringValidationError(entityString, stringMetadata);\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n const entityAutocompleteString: string = entity[key] as string;\n // eslint-disable-next-line stylistic/max-len\n const stringAutocompleteMetadata: AutocompleteStringDecoratorConfigInternal = metadata as AutocompleteStringDecoratorConfigInternal;\n return this.getAutocompleteStringValidationError(entity, entityAutocompleteString, stringAutocompleteMetadata);\n case DecoratorTypes.STRING_TEXTBOX:\n const entityTextbox: string = entity[key] as string;\n const textboxMetadata: TextboxStringDecoratorConfigInternal = metadata as TextboxStringDecoratorConfigInternal;\n return this.getTextboxValidationError(entityTextbox, textboxMetadata);\n case DecoratorTypes.STRING_PASSWORD:\n const entityPassword: string = entity[key] as string;\n const passwordMetadata: PasswordStringDecoratorConfigInternal = metadata as PasswordStringDecoratorConfigInternal;\n const confirmPassword: string = ReflectUtilities.getMetadata(EntityUtilities.CONFIRM_PASSWORD_KEY, entity, key) as string;\n return this.getPasswordValidationError(entityPassword, passwordMetadata, confirmPassword);\n case DecoratorTypes.NUMBER_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.NUMBER:\n case DecoratorTypes.NUMBER_SLIDER:\n const entityNumber: number = entity[key] as number;\n const numberMetadata: DefaultNumberDecoratorConfigInternal = metadata as DefaultNumberDecoratorConfigInternal;\n return this.getNumberValidationError(entityNumber, numberMetadata);\n case DecoratorTypes.OBJECT:\n const entityObject: EntityType = entity[key] as EntityType;\n for (const parameterKey in entityObject) {\n const value: unknown = entityObject[parameterKey];\n if (\n !(metadata as DefaultObjectDecoratorConfigInternal<EntityType>).omit.includes(parameterKey)\n && !(!metadata.required(entity) && (value == undefined || value == ''))\n ) {\n const err: ValidationError | undefined = await this.getPropertyValidationError(entityObject, parameterKey, omit);\n if (err) {\n return {\n property: metadata.displayName,\n message: `${err.property} is invalid: ${err.message}`\n };\n }\n }\n }\n break;\n case DecoratorTypes.OBJECT_DROPDOWN:\n // Because only valid values can be selected, this is always true when it has a value\n return undefined;\n case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS:\n const stringAutocompleteArray: string[] = entity[key] as string[];\n // eslint-disable-next-line stylistic/max-len\n const stringAutocompleteArrayMetadata: AutocompleteStringChipsArrayDecoratorConfigInternal = metadata as AutocompleteStringChipsArrayDecoratorConfigInternal;\n // eslint-disable-next-line stylistic/max-len\n return await this.getArrayStringAutocompleteChipsValidationError(entity, stringAutocompleteArrayMetadata, stringAutocompleteArray);\n case DecoratorTypes.ARRAY_STRING_CHIPS:\n case DecoratorTypes.ARRAY_DATE:\n case DecoratorTypes.ARRAY_DATE_TIME:\n case DecoratorTypes.ARRAY_DATE_RANGE:\n case DecoratorTypes.ARRAY:\n const entityArray: unknown[] = entity[key] as unknown[];\n // eslint-disable-next-line stylistic/max-len\n const arrayMetadata: EntityArrayDecoratorConfigInternal<EntityType> = metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (arrayMetadata.required(entity) && !entityArray.length) {\n return {\n property: metadata.displayName,\n message: 'no items in array'\n };\n }\n break;\n case DecoratorTypes.DATE:\n const entityDate: Date = new Date(entity[key] as Date);\n const dateMetadata: DefaultDateDecoratorConfigInternal = metadata as DefaultDateDecoratorConfigInternal;\n return this.getDateValidationError(entityDate, dateMetadata);\n case DecoratorTypes.DATE_RANGE:\n const entityDateRange: DateRange = LodashUtilities.cloneDeep(entity[key] as DateRange);\n const dateRangeMetadata: DateRangeDateDecoratorConfigInternal = metadata as DateRangeDateDecoratorConfigInternal;\n return this.getDateRangeValidationError(entity, entityDateRange, dateRangeMetadata);\n case DecoratorTypes.DATE_TIME:\n const entityDateTime: Date = new Date(entity[key] as Date);\n const dateTimeMetadata: DateTimeDateDecoratorConfigInternal = metadata as DateTimeDateDecoratorConfigInternal;\n const hasTime: boolean = ReflectUtilities.hasMetadata(EntityUtilities.TIME_KEY, entity, key);\n return this.getDateTimeValidationError(entityDateTime, dateTimeMetadata, hasTime);\n case DecoratorTypes.FILE_DEFAULT:\n case DecoratorTypes.FILE_IMAGE:\n const entityFile: FileData | FileData[] = entity[key] as FileData | FileData[];\n const entityFileMetadata: DefaultFileDecoratorConfigInternal = metadata as DefaultFileDecoratorConfigInternal;\n return this.getFileDataValidationError(entityFile, entityFileMetadata);\n case DecoratorTypes.REFERENCES_MANY:\n case DecoratorTypes.REFERENCES_ONE:\n case DecoratorTypes.HAS_MANY:\n break;\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line typescript/no-explicit-any, stylistic/max-len\n const customMetadata: CustomDecoratorConfigInternal<EntityType, any, any, any> = metadata as CustomDecoratorConfigInternal<EntityType, any, any, any>;\n if (!customMetadata.isValid(entity[key], omit)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n break;\n default:\n throw new Error(`Could not validate the input because the DecoratorType ${type} is not known`);\n }\n return undefined;\n }\n\n private static async getArrayStringAutocompleteChipsValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n metadata: AutocompleteStringChipsArrayDecoratorConfigInternal,\n stringAutocompleteArray: string[]\n ): Promise<ValidationError | undefined> {\n if (metadata.required(entity) && !stringAutocompleteArray.length) {\n return {\n property: metadata.displayName,\n message: 'no items in array'\n };\n }\n if (metadata.restrictToOptions == true) {\n const autocompleteValues: string[] = await metadata.autocompleteValues(entity);\n for (const value of stringAutocompleteArray) {\n if (!autocompleteValues.includes(value)) {\n return {\n property: metadata.displayName,\n message: `The value \"${value}\" needs to be one of the provided values`\n };\n }\n }\n }\n return undefined;\n }\n\n private static getBooleanValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n value: boolean,\n metadata: ToggleBooleanDecoratorConfigInternal\n ): ValidationError | undefined {\n if (metadata.required(entity) && !value) {\n return {\n property: metadata.displayName,\n message: 'not selected'\n };\n }\n return undefined;\n }\n\n private static getStringValidationError(value: string, metadata: DefaultStringDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n return undefined;\n }\n\n private static async getAutocompleteStringValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n value: string,\n metadata: AutocompleteStringDecoratorConfigInternal\n ): Promise<ValidationError | undefined> {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n if (metadata.restrictToOptions == true && !(await metadata.autocompleteValues(entity)).includes(value)) {\n return {\n property: metadata.displayName,\n message: 'Needs to be one of the provided values'\n };\n }\n return undefined;\n }\n\n private static getTextboxValidationError(value: string, metadata: TextboxStringDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n return undefined;\n }\n\n private static getPasswordValidationError(\n value: string,\n metadata: PasswordStringDecoratorConfigInternal,\n confirmPassword: string\n ): ValidationError | undefined {\n if (value !== confirmPassword) {\n return {\n property: metadata.displayName,\n message: 'passwords need to match'\n };\n }\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.maxLength} characters`\n };\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.minLength} characters`\n };\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n return undefined;\n }\n\n private static getNumberValidationError(value: number, metadata: DefaultNumberDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.max && value > metadata.max) {\n return {\n property: metadata.displayName,\n message: `needs to be smaller than ${metadata.max}`\n };\n }\n if (metadata.min && value < metadata.min) {\n return {\n property: metadata.displayName,\n message: `needs to be bigger than ${metadata.min}`\n };\n }\n return undefined;\n }\n\n private static getDateValidationError(value: Date, metadata: DefaultDateDecoratorConfigInternal): ValidationError | undefined {\n if (metadata.min && value.getTime() < metadata.min(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `needs to be after ${formatDate(metadata.min(value))}`\n };\n }\n if (metadata.max && value.getTime() > metadata.max(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `needs to be before ${formatDate(metadata.max(value))}`\n };\n }\n if (metadata.filter && !metadata.filter(value)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n return undefined;\n }\n\n // eslint-disable-next-line sonar/cognitive-complexity\n private static getDateRangeValidationError<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n value: Partial<DateRange>,\n metadata: DateRangeDateDecoratorConfigInternal\n ): ValidationError | undefined {\n if (metadata.required(entity) && (value.start == undefined || value.end == undefined || value.values == undefined)) {\n return {\n property: metadata.displayName,\n message: 'required'\n };\n }\n if (value.start) {\n value.start = new Date(value.start);\n if (metadata.minStart && value.start.getTime() < metadata.minStart(value.start).getTime()) {\n return {\n property: metadata.displayName,\n message: `start date needs to be after ${formatDate(metadata.minStart(value.start))}`\n };\n }\n if (metadata.maxStart && value.start.getTime() > metadata.maxStart(value.start).getTime()) {\n return {\n property: metadata.displayName,\n message: `start date needs to be before ${formatDate(metadata.maxStart(value.start))}`\n };\n }\n if (metadata.filter && !metadata.filter(value.start)) {\n return {\n property: metadata.displayName,\n message: 'start date invalid'\n };\n }\n }\n\n if (value.end) {\n value.end = new Date(value.end);\n if (metadata.minEnd && value.end.getTime() < metadata.minEnd(value.end).getTime()) {\n return {\n property: metadata.displayName,\n message: `end date needs to be after ${formatDate(metadata.minEnd(value.end))}`\n };\n }\n if (metadata.maxEnd && value.end.getTime() > metadata.maxEnd(value.end).getTime()) {\n return {\n property: metadata.displayName,\n message: `end date needs to be before ${formatDate(metadata.maxEnd(value.end))}`\n };\n }\n if (metadata.filter && !metadata.filter(value.end)) {\n return {\n property: metadata.displayName,\n message: 'end date invalid'\n };\n }\n }\n\n if (metadata.filter && value.values) {\n for (const date of value.values) {\n if (!metadata.filter(date)) {\n return {\n property: metadata.displayName,\n message: `value ${formatDate(date)} invalid`\n };\n }\n }\n }\n return undefined;\n }\n\n // eslint-disable-next-line sonar/cognitive-complexity\n private static getDateTimeValidationError(\n value: Date,\n metadata: DateTimeDateDecoratorConfigInternal,\n hasTime: boolean\n ): ValidationError | undefined {\n if (!hasTime) {\n return {\n property: metadata.displayName,\n message: 'no time'\n };\n }\n if (metadata.minDate && value.getTime() < metadata.minDate(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `date needs to be after ${formatDate(metadata.minDate(value))}`\n };\n }\n if (metadata.maxDate && value.getTime() > metadata.maxDate(value).getTime()) {\n return {\n property: metadata.displayName,\n message: `date needs to be before ${formatDate(metadata.maxDate(value))}`\n };\n }\n if (metadata.filterDate && !metadata.filterDate(value)) {\n return {\n property: metadata.displayName,\n message: 'invalid date'\n };\n }\n const time: Time = DateUtilities.getTimeFromDate(value) as Time;\n if (metadata.minTime) {\n const minTime: Time = metadata.minTime(value);\n if (\n !(\n time.hours > minTime.hours\n || (\n time.hours === minTime.hours\n && time.minutes >= minTime.minutes\n )\n )\n ) {\n return {\n property: metadata.displayName,\n message: `time needs to be after ${minTime.hours}:${minTime.minutes}`\n };\n }\n }\n if (metadata.maxTime) {\n const maxTime: Time = metadata.maxTime(value);\n if (\n !(\n time.hours < maxTime.hours\n || (\n time.hours === maxTime.hours\n && time.minutes <= maxTime.minutes\n )\n )\n ) {\n return {\n property: metadata.displayName,\n message: `time needs to be before ${maxTime.hours}:${maxTime.minutes}`\n };\n }\n }\n if (metadata.filterTime && !metadata.filterTime(time)) {\n return {\n property: metadata.displayName,\n message: 'invalid time'\n };\n }\n return undefined;\n }\n\n private static getFileDataValidationError(\n value: FileData | FileData[],\n metadata: DefaultFileDecoratorConfigInternal\n ): ValidationError | undefined {\n const files: FileData[] = metadata.multiple ? value as FileData[] : [value as FileData];\n let fileSizeTotal: number = 0;\n for (const file of files) {\n if (!file.name || (!file.file && !file.url)) {\n return {\n property: metadata.displayName,\n message: 'invalid'\n };\n }\n if (!FileUtilities.isMimeTypeValid(file.type, metadata.allowedMimeTypes)) {\n return {\n property: metadata.displayName,\n message: `mimetype needs to be one of ${metadata.allowedMimeTypes}`\n };\n }\n if (FileUtilities.transformToMegaBytes(file.size, 'B') > metadata.maxSize) {\n return {\n property: metadata.displayName,\n message: `file needs to be smaller than ${metadata.maxSize} MB`\n };\n }\n fileSizeTotal += file.size;\n if (FileUtilities.transformToMegaBytes(fileSizeTotal, 'B') > metadata.maxSizeTotal) {\n return {\n property: metadata.displayName,\n message: `The size of all files combined needs to be smaller than ${metadata.maxSizeTotal}`\n };\n }\n }\n return undefined;\n }\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction padTo2Digits(num: number): string {\n return num.toString().padStart(2, '0');\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction formatDate(date: Date): string {\n return [\n padTo2Digits(date.getDate()),\n padTo2Digits(date.getMonth() + 1),\n date.getFullYear()\n ].join('/');\n}","import { DateFilterFn } from '@angular/material/datepicker';\n\nimport { ArrayDecoratorConfig, AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EditArrayItemDialogData, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder } from '../../components/confirm-dialog/confirm-dialog-data.builder';\nimport { CreateData, DisplayColumn } from '../../components/table/table-data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { DateUtilities, Time } from '../../utilities/date.utilities';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DateRange } from '../date/date-decorator.data';\nimport { StringAutocompleteValues } from '../string/string-decorator.data';\n\n/**\n * The internal dialog data for the entities array edit dialog.\n * Sets default values.\n */\nexport class EditArrayItemDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditArrayItemDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: (entity: EntityType) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: EditArrayItemDialogData<EntityType>) {\n this.title = getConfigValue(globalConfig.editTitle, data?.title);\n this.confirmButtonLabel = getConfigValue(globalConfig.saveLabel, data?.confirmButtonLabel);\n this.cancelButtonLabel = getConfigValue(globalConfig.cancelLabel, data?.cancelButtonLabel);\n }\n}\n\n/**\n * The internal EntityArrayDecoratorConfig. Sets default values.\n */\nexport class EntityArrayDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType[]> implements EntityArrayDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.OBJECT;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData?: CreateData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editDialogData: EditArrayItemDialogDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createInline: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n\n constructor(data: EntityArrayDecoratorConfig<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.createInline = data.createInline ?? true;\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.EntityClass = data.EntityClass;\n this.displayColumns = data.displayColumns;\n this.createInline = data.createInline ?? true;\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.editDialogData = new EditArrayItemDialogDataInternal(globalConfig, data.editDialogData);\n }\n}\n\n/**\n * The internal DateArrayDecoratorConfig. Sets default values.\n */\nexport class DateArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date[]> implements DateArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<Date>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date | null | undefined>;\n\n constructor(data: DateArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.min = data.min;\n this.max = data.max;\n this.filter = data.filter;\n }\n}\n\n/**\n * The internal DateTimeArrayDecoratorConfig. Sets default values.\n */\nexport class DateTimeArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date[]> implements DateTimeArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_TIME;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<Date>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n times: DropdownValue<Time>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n timeDisplayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterDate?: DateFilterFn<Date | null | undefined>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterTime?: ((time: Time) => boolean) | (() => boolean);\n\n constructor(data: DateTimeArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = getConfigValue(globalConfig.timeLabel, data.timeDisplayName);\n this.minDate = data.minDate;\n this.maxDate = data.maxDate;\n this.filterDate = data.filterDate;\n this.minTime = data.minTime;\n this.maxTime = data.maxTime;\n this.filterTime = data.filterTime;\n }\n}\n\n/**\n * The internal DateRangeArrayDecoratorConfig. Sets default values.\n */\nexport class DateRangeArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<DateRange[]>\n implements DateRangeArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_RANGE;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<DateRange>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n missingErrorMessage: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderStart: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderEnd: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date>;\n\n constructor(data: DateRangeArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.missingErrorMessage = getConfigValue(globalConfig.emptyArrayErrorMessage, data.missingErrorMessage);\n this.placeholderStart = getConfigValue(globalConfig.startLabel, data.placeholderStart);\n this.placeholderEnd = getConfigValue(globalConfig.endLabel, data.placeholderEnd);\n this.minStart = data.minStart;\n this.maxStart = data.maxStart;\n this.minEnd = data.minEnd;\n this.maxEnd = data.maxEnd;\n this.filter = data.filter;\n }\n}\n\n/**\n * The internal StringChipsArrayDecoratorConfig. Sets default values.\n */\nexport class StringChipsArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal<string[]>\n implements StringChipsArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n\n constructor(data: StringChipsArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.maxLength = data.maxLength;\n this.minLength = data.minLength;\n this.regex = data.regex;\n this.defaultWidths = data.defaultWidths ?? [6, 12, 12];\n }\n}\n\n/**\n * The internal AutocompleteStringChipsArrayDecoratorConfig. Sets default values.\n */\nexport class AutocompleteStringChipsArrayDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal<string[]> implements AutocompleteStringChipsArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n autocompleteValues: (entity: any) => Promise<string[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING_AUTOCOMPLETE;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDuplicates: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n duplicatesErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxLength?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n regex?: RegExp;\n // eslint-disable-next-line jsdoc/require-jsdoc\n restrictToOptions?: boolean;\n\n constructor(data: AutocompleteStringChipsArrayDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.autocompleteValues = this.autocompleteValuesToFunction(data.autocompleteValues);\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data, globalConfig);\n this.maxLength = data.maxLength;\n this.minLength = data.minLength;\n this.regex = data.regex;\n this.restrictToOptions = data.restrictToOptions;\n this.defaultWidths = data.defaultWidths ?? [6, 12, 12];\n }\n\n // eslint-disable-next-line typescript/no-explicit-any\n private autocompleteValuesToFunction(autocompleteValues: StringAutocompleteValues): (entity: any) => Promise<string[]> {\n if (Array.isArray(autocompleteValues)) {\n return async () => autocompleteValues;\n }\n // eslint-disable-next-line typescript/no-explicit-any\n return async (e: any) => await autocompleteValues(e);\n }\n}\n\n/**\n * Gets the default dialog data for the error dialog to display when the user tries to add a duplicate value.\n * @param data - The Array Decorator data.\n * @param globalConfig - The global configuration of default values.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultDuplicateErrorDialogData(\n data: ArrayDecoratorConfig<unknown[]>,\n globalConfig: NgxGlobalDefaultValues\n): ConfirmDialogData {\n return new ConfirmDialogDataBuilder(globalConfig, data.duplicatesErrorDialog)\n .withDefault('type', 'info-only')\n .withDefault('text', globalConfig.duplicateErrorText)\n .withDefault('title', globalConfig.duplicateErrorTitle)\n .getResult();\n}","import { SelectionModel } from '@angular/cdk/collections';\nimport { MatTableDataSource } from '@angular/material/table';\n\n/**\n * Provides functionality around material selections inside of tables.\n */\nexport abstract class SelectionUtilities {\n\n /**\n * Checks if all items in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n * @param selection - The selection to check.\n * @param dataSource - The dataSource of the selection.\n * @returns Whether or not all items in the table have been selected.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n static isAllSelected(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): boolean {\n const numSelected: number = selection.selected.length;\n const numRows: number = dataSource.data.length;\n return numSelected === numRows;\n }\n\n /**\n * Toggles all items in the table.\n * @param selection - The selection to toggle.\n * @param dataSource - The dataSource of the selection.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n static masterToggle(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): void {\n if (SelectionUtilities.isAllSelected(selection, dataSource)) {\n selection.clear();\n }\n else {\n for (const row of dataSource.data) {\n selection.select(row);\n }\n }\n }\n\n /**\n * Removes all selected entries from the array.\n * @param selection - The selection containing the items to remove.\n * @param values - The values of the dataSource.\n * @param dataSource - The dataSource.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n static remove(selection: SelectionModel<any>, values: any[], dataSource: MatTableDataSource<any>): void {\n for (const s of selection.selected) {\n values.splice(values.indexOf(s), 1);\n }\n dataSource.data = values;\n selection.clear();\n }\n}","import * as uuid from 'uuid';\n\n/**\n * Encapsulates functionality of the uuid package.\n */\nexport abstract class UUIDUtilities {\n /**\n * Creates a new v4 uuid.\n * @returns The created uuid.\n */\n static create(): string {\n return uuid.v4();\n }\n}","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { DecoratorType, DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { UUIDUtilities } from '../../encapsulation/uuid.utilities';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\n\n/**\n * The abstract base class of any ngx-mat-entity input.\n * Extend from this when implementing your own custom decorator.\n *\n * It already provides:\n *\n * - entity: The entity which the property is on. (type-safe due to the Generic \"EntityType\")\n * - key: The key of the property. (type-safe due to the Generic \"EntityType\")\n * - getValidationErrorMessage: The function that generates the error message when the input is invalid.\n * - isReadOnly: Whether or not the input is read only. Can be used to disable elements.\n * - propertyValue: Just the typed version of the property, its the same as entity[key].\n * - metadata: The metadata of the property. (type-safe due to the Generic \"CustomMetadataType\")\n * - ngOnInit: Gets the metadata for the property, be aware of this when overriding this method.\n * - emitChange: Should be called when the input has changed. This is needed to trigger validation and dirty checks.\n */\n// eslint-disable-next-line angular/prefer-standalone\n@Component({\n selector: 'ngx-mat-entity-base-input',\n template: ''\n})\nexport abstract class NgxMatEntityBaseInputComponent<\n EntityType extends BaseEntityType<EntityType>,\n Type extends DecoratorTypes,\n ValueType,\n CustomMetadataType extends BaseEntityType<CustomMetadataType> = {}\n> implements OnInit {\n /**\n * The entity that the property to display as an input comes from.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n /**\n * The key of the property to build the input for.\n */\n @Input({ required: true })\n key!: keyof EntityType;\n\n /**\n * The function that generates the error message when the input is invalid.\n */\n @Input({ required: true })\n getValidationErrorMessage!: (model: NgModel) => string;\n\n /**\n * Whether or not the input should be readonly.\n * In that case it is disabled, but most of the disabled-styling is overridden.\n */\n @Input({ required: true })\n isReadOnly!: boolean;\n\n /**\n * Emits when the property value has changed.\n */\n @Output()\n readonly inputChangeEvent: EventEmitter<void> = new EventEmitter<void>();\n\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * The property value of entity[key] correctly typed.\n * Uses getters and setters so that inputs are always linked to the original value.\n */\n get propertyValue(): ValueType | undefined {\n return this.entity[this.key] as ValueType | undefined;\n }\n\n set propertyValue(value: ValueType | undefined) {\n (this.entity[this.key] as ValueType | undefined) = value;\n this.metadata.change?.(this.entity);\n }\n\n /**\n * The metadata of the property.\n */\n metadata!: DecoratorType<Type, CustomMetadataType>;\n\n /**\n * A unique name for inputs. Includes a uuid.\n */\n name!: string;\n\n ngOnInit(): void {\n // eslint-disable-next-line stylistic/max-len\n const foundMetadata: DecoratorType<Type, CustomMetadataType> | undefined = EntityUtilities.getPropertyMetadata(this.entity, this.key);\n if (!foundMetadata) {\n throw new Error(`No metadata was found for the key \"${String(this.key)}\"`);\n }\n this.metadata = foundMetadata;\n this.name = this.key.toString() + UUIDUtilities.create();\n }\n\n /**\n * Should emit when the input has changed. This is needed to trigger validation and dirty checks.\n */\n emitChange(): void {\n this.inputChangeEvent.emit();\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { LodashUtilities } from '../../../encapsulation/lodash.utilities';\nimport { EntityUtilities } from '../../../utilities/entity.utilities';\nimport { SelectionUtilities } from '../../../utilities/selection.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { DisplayColumn } from '../../table/table-data';\nimport { NgxMatEntityBaseInputComponent } from '../base-input.component';\n\ntype ArrayTableType = DecoratorTypes.ARRAY | DecoratorTypes.ARRAY_DATE\n | DecoratorTypes.ARRAY_DATE_RANGE | DecoratorTypes.ARRAY_DATE_TIME;\n\n/**\n * The base component needed for all arrays that are displayed as a table.\n */\n// eslint-disable-next-line angular/prefer-standalone\n@Component({\n selector: 'ngx-mat-entity-array-table',\n template: ''\n})\nexport abstract class ArrayTableComponent<ValueType, EntityType extends BaseEntityType<EntityType>, ArrayType extends ArrayTableType>\n extends NgxMatEntityBaseInputComponent<EntityType, ArrayType, ValueType[]> implements OnInit {\n\n input?: ValueType = undefined;\n dataSource: MatTableDataSource<ValueType> = new MatTableDataSource();\n selection: SelectionModel<ValueType> = new SelectionModel<ValueType>(true, []);\n displayedColumns!: string[];\n\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n constructor(private readonly matDialog: MatDialog, private readonly injector: EnvironmentInjector, private readonly http: HttpClient) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.propertyValue = this.propertyValue ?? [];\n const givenDisplayColumns: string[] = this.metadata.displayColumns.map((v) => v.displayName);\n if (givenDisplayColumns.find(s => s === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved.\n Please choose a different name.`\n );\n }\n this.displayedColumns = this.isReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.dataSource.data = this.propertyValue;\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entity - The entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entity: ValueType, displayColumn: DisplayColumn<ValueType>): unknown {\n return runInInjectionContext(this.injector, () => displayColumn.value(entity));\n }\n\n /**\n * Tries to add an item to the array.\n */\n add(): void {\n if (this.input == undefined) {\n return;\n }\n if (\n !this.metadata.allowDuplicates\n && this.propertyValue?.find(\n async v => await EntityUtilities.isEqual(this.input, v, this.metadata, this.metadata.itemType, this.http)\n ) != undefined\n ) {\n this.matDialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.duplicatesErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n return;\n }\n this.propertyValue?.push(LodashUtilities.cloneDeep(this.input));\n this.dataSource.data = this.propertyValue ?? [];\n this.resetInput();\n this.emitChange();\n }\n\n /**\n * Is split up from the add method to override this functionality more easily.\n */\n protected resetInput(): void {\n this.input = undefined;\n }\n\n /**\n * Removes all selected entries from the entity array.\n */\n remove(): void {\n SelectionUtilities.remove(this.selection, this.propertyValue as [], this.dataSource);\n this.emitChange();\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-date-input',\n templateUrl: './array-date-input.component.html',\n styleUrls: ['./array-date-input.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatFormFieldModule,\n FormsModule,\n MatDatepickerModule,\n MatTableModule,\n MatCheckboxModule,\n MatInputModule,\n NgFor,\n MatButtonModule\n ]\n})\nexport class ArrayDateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n constructor(\n matDialog: MatDialog,\n injector: EnvironmentInjector,\n http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super(matDialog, injector, http);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateArrayDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors\"\n (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">{{metadata.missingErrorMessage}}</div>\n }\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateRangeArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-date-range-input',\n templateUrl: './array-date-range-input.component.html',\n styleUrls: ['./array-date-range-input.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatFormFieldModule,\n MatDatepickerModule,\n FormsModule,\n MatTableModule,\n MatCheckboxModule,\n MatButtonModule,\n NgFor\n ]\n})\nexport class ArrayDateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<DateRange, EntityType, DecoratorTypes.ARRAY_DATE_RANGE> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n constructor(\n matDialog: MatDialog,\n injector: EnvironmentInjector,\n http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super(matDialog, injector, http);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateRangeArrayDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n this.input = {\n start: undefined as unknown as Date,\n end: undefined as unknown as Date,\n values: undefined as unknown as Date[]\n };\n }\n\n /**\n * Adds a DateRange to the array.\n */\n addDateRange(): void {\n if (this.input && this.dateRangeStart && this.dateRangeEnd) {\n this.input.start = new Date(this.dateRangeStart);\n this.input.end = new Date(this.dateRangeEnd);\n const values: Date[] = DateUtilities.getDatesBetween(\n this.input.start,\n this.input.end,\n this.metadata.filter\n );\n this.input.values = values.length ? values : undefined as unknown as Date[];\n this.add();\n }\n }\n\n protected override resetInput(): void {\n this.input = undefined;\n this.dateRangeStart = undefined;\n this.dateRangeEnd = undefined;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n \n @if (startModel.errors) {\n <mat-error>{{getValidationErrorMessage(startModel)}}</mat-error>\n }\n @if (!startModel.errors && endModel.errors) {\n <mat-error>{{getValidationErrorMessage(endModel)}}</mat-error>\n }\n </mat-form-field>\n \n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"addDateRange()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">\n {{metadata.missingErrorMessage}}\n </div>\n }\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateTimeArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities, Time } from '../../../../utilities/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-date-time-input',\n templateUrl: './array-date-time-input.component.html',\n styleUrls: ['./array-date-time-input.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n MatFormFieldModule,\n FormsModule,\n MatDatepickerModule,\n MatSelectModule,\n MatTableModule,\n MatCheckboxModule,\n MatInputModule,\n MatButtonModule,\n NgFor\n ]\n})\nexport class ArrayDateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE_TIME> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n dateTime?: Date;\n time?: Time;\n timeDropdownValues!: DropdownValue<Time>[];\n\n constructor(\n matDialog: MatDialog,\n injector: EnvironmentInjector,\n http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super(matDialog, injector, http);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateTimeArrayDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n this.time = DateUtilities.getTimeFromDate(this.entity[this.key] as Date);\n this.timeDropdownValues = this.metadata.times;\n if (this.entity[this.key] != undefined) {\n this.dateTime = new Date(this.entity[this.key] as Date);\n }\n }\n\n protected override resetInput(): void {\n this.input = undefined;\n this.time = undefined;\n }\n\n /**\n * Adds a date time to the array.\n */\n addDateTime(): void {\n if (this.input && this.time) {\n this.input = new Date(this.input);\n this.input.setHours(this.time.hours, this.time.minutes, 0, 0);\n this.add();\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n @if (!isReadOnly) {\n <div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\n [(ngModel)]=\"input\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"time\"\n >\n @for (validTime of DateUtilities.getValidTimesForDropdown(metadata.times, input, metadata.minTime, metadata.maxTime, metadata.filterTime); track $index) {\n <mat-option [value]=\"validTime.value\">{{validTime.displayName}}</mat-option>\n }\n \n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n }\n\n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [disabled]=\"!dataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\" (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (metadata.required(entity) && !dataSource.data.length) {\n <div class=\"array-error\">{{metadata.missingErrorMessage}}</div>\n }\n</div>","/* eslint-disable unicorn/no-null */\nimport { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n/**\n * A Validator that checks if the input value is one of the provided values of the \"includedIn\" array.\n */\n@Directive({\n selector: '[includedIn]',\n providers: [{ provide: NG_VALIDATORS, useExisting: IncludedInValidatorDirective, multi: true }],\n standalone: true\n})\nexport class IncludedInValidatorDirective implements Validator {\n\n /**\n * The values that are valid for the input.\n */\n @Input()\n includedIn!: unknown[] | undefined;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n validate(control: AbstractControl<unknown>): ValidationErrors | null {\n if (!this.includedIn?.length || !Boolean(control.value)) {\n return null;\n }\n return this.includedIn.includes(control.value) ? null : { includedIn: { value: control.value, validValues: this.includedIn } };\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { UUIDUtilities } from '../../../../encapsulation/uuid.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-string-chips-input',\n templateUrl: './array-string-chips-input.component.html',\n styleUrls: ['./array-string-chips-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatChipsModule,\n FormsModule,\n MatInputModule,\n NgFor\n ]\n})\nexport class ArrayStringChipsInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.ARRAY_STRING_CHIPS, string[]> implements OnInit {\n\n uuid2: string = UUIDUtilities.create();\n chipsInput: string = '';\n\n /**\n * Handles adding strings to the chipsArray.\n * Checks validation and also creates a new array if it is undefined.\n * This is needed because two things are validated: The array itself\n * and the contents of the array. And we need a way to display an\n * mat-error. As the only validation for the array is whether or not\n * it contains values, we can set it to undefined when the last element is removed\n * (removeStringChipArrayValue). That way we can use the \"required\" validator.\n * @param event - The event that fires when a new chip is completed.\n * @param invalid - Whether or not the input is invalid.\n */\n addStringChipArrayValue(event: MatChipInputEvent, invalid: boolean): void {\n if (invalid || !event.value) {\n return;\n }\n\n const value: string = event.value.trim();\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n\n event.chipInput?.clear();\n this.chipsInput = '';\n\n this.emitChange();\n }\n\n /**\n * Removes the given value from the array.\n * Sets the array to undefined if it is now empty.\n * This is needed because two things are validated: The array itself\n * and the contents of the array. And we need a way to display an\n * mat-error. As the only validation for the array is whether or not\n * it is empty, setting it to undefined here enables us to use the \"required\" validator.\n * @param value - The string to remove from the array.\n */\n removeStringChipArrayValue(value: string): void {\n this.propertyValue?.splice(this.propertyValue.indexOf(value), 1);\n this.propertyValue = this.propertyValue?.length ? this.propertyValue : undefined;\n\n this.emitChange();\n }\n\n setValidationErrors(model: NgModel, chipsModel: NgModel): void {\n if (chipsModel.errors) {\n model.control.setErrors(chipsModel.errors);\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\" [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n @for (value of propertyValue; track $index) {\n <mat-chip-row (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n }\n <input #chipsModel=\"ngModel\"\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [(ngModel)]=\"chipsInput\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal } from '../../../../decorators/array/array-decorator-internal.data';\nimport { IncludedInValidatorDirective } from '../../../../directives/included-in.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ArrayStringChipsInputComponent } from '../array-string-chips-input/array-string-chips-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'array-string-autocomplete-chips',\n templateUrl: './array-string-autocomplete-chips.component.html',\n styleUrls: ['./array-string-autocomplete-chips.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatChipsModule,\n FormsModule,\n MatAutocompleteModule,\n IncludedInValidatorDirective,\n MatInputModule,\n NgFor\n ]\n})\nexport class ArrayStringAutocompleteChipsComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayStringChipsInputComponent<EntityType> implements OnInit {\n\n filteredAutocompleteStrings!: string[];\n autocompleteStrings: string[] = [];\n\n get autocompleteMetadata(): AutocompleteStringChipsArrayDecoratorConfigInternal {\n return this.metadata as unknown as AutocompleteStringChipsArrayDecoratorConfigInternal;\n }\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n void runInInjectionContext(this.injector, async () => {\n this.autocompleteStrings = await this.autocompleteMetadata.autocompleteValues(this.entity);\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n });\n }\n\n /**\n * Handles adding a string to the array when an autocomplete value has been selected.\n * @param event - The autocomplete selected event.\n * @param chipsInput - The element where the user typed the value.\n * @param model - The model of the string array.\n * @param chipsModel - The model of the single string input.\n */\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement, model: NgModel, chipsModel: NgModel): void {\n // validation is not needed as selected options are all valid.\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(event.option.value as string);\n chipsInput.value = '';\n this.chipsInput = '';\n this.filterAutocompleteStrings(this.chipsInput);\n chipsModel.control.updateValueAndValidity();\n model.control.updateValueAndValidity();\n this.setValidationErrors(model, chipsModel);\n this.emitChange();\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input: string): void {\n const filterValue: string = input.toLowerCase();\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(filterValue));\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"setValidationErrors(model, chipsModel)\"\n >\n @for (value of propertyValue; track $index) {\n <mat-chip-row (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n </mat-chip-row>\n }\n <input #chipsModel=\"ngModel\"\n #chipsElement\n matInput\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n [name]=\"uuid2\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [includedIn]=\"autocompleteMetadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"chipsInput\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event, !!chipsModel.errors)\"\n />\n </mat-chip-grid>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement, model, chipsModel)\">\n @for (value of filteredAutocompleteStrings; track $index) {\n <mat-option [value]=\"value\">{{value}}</mat-option>\n }\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'boolean-checkbox-input',\n templateUrl: './boolean-checkbox-input.component.html',\n styleUrls: ['./boolean-checkbox-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatCheckboxModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class BooleanCheckboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_CHECKBOX, boolean> implements OnInit {\n\n updatePropertyValue(): void {\n this.propertyValue = this.propertyValue != undefined ? !this.propertyValue : true;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-checkbox\n color=\"primary\"\n [disabled]=\"isReadOnly\"\n [class.disabled]=\"isReadOnly\"\n [class.mat-checkbox-disabled]=\"false\"\n [checked]=\"propertyValue\"\n (click)=\"model.control.markAsTouched(); updatePropertyValue(); emitChange();\"\n >\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <input #model=\"ngModel\" matInput\n hidden\n [name]=\"name\"\n [pattern]=\"metadata.required(entity) ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DropdownBooleanDecoratorConfig. Sets default values.\n */\nexport class DropdownBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal<boolean>\n implements DropdownBooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownTrue: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownFalse: string;\n\n constructor(data: DropdownBooleanDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownTrue = getConfigValue(globalConfig.dropdownTrue, data.dropdownTrue);\n this.dropdownFalse = getConfigValue(globalConfig.dropdownFalse, data.dropdownFalse);\n }\n}\n\n/**\n * The internal CheckboxBooleanDecoratorConfig. Sets default values.\n */\nexport class CheckboxBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal<boolean>\n implements CheckboxBooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'checkbox';\n\n constructor(data: CheckboxBooleanDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.required = this.booleanToFunction(data.required ?? false);\n }\n}\n\n/**\n * The internal ToggleBooleanDecoratorConfig. Sets default values.\n */\nexport class ToggleBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal<boolean> implements ToggleBooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'toggle';\n\n // eslint-disable-next-line sonar/no-identical-functions\n constructor(data: ToggleBooleanDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.required = this.booleanToFunction(data.required ?? false);\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownBooleanDecoratorConfigInternal } from '../../../../decorators/boolean/boolean-decorator-internal.data';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'boolean-dropdown-input',\n templateUrl: './boolean-dropdown-input.component.html',\n styleUrls: ['./boolean-dropdown-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class BooleanDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_DROPDOWN, boolean> implements OnInit {\n\n constructor(\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DropdownBooleanDecoratorConfigInternal(this.metadata, this.globalConfig);\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select\n #model=\"ngModel\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (selectionChange)=\"emitChange()\"\n >\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadata.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadata.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'boolean-toggle-input',\n templateUrl: './boolean-toggle-input.component.html',\n styleUrls: ['./boolean-toggle-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSlideToggleModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class BooleanToggleInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_TOGGLE, boolean> implements OnInit {\n\n updatePropertyValue(): void {\n this.propertyValue = this.propertyValue != undefined ? !this.propertyValue : true;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-slide-toggle\n color=\"primary\"\n [disabled]=\"isReadOnly\"\n [checked]=\"propertyValue\"\n (click)=\"model.control.markAsTouched(); updatePropertyValue(); emitChange();\"\n >\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <input #model=\"ngModel\" matInput\n hidden\n [name]=\"name\"\n [pattern]=\"metadata.required(entity) ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, ComponentRef, OnInit, Type, ViewContainerRef } from '@angular/core';\n\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'custom-input',\n templateUrl: './custom.component.html',\n styleUrls: ['./custom.component.scss'],\n standalone: true\n})\nexport class CustomInputComponent<\n EntityType extends BaseEntityType<EntityType>,\n MetadataType extends BaseEntityType<MetadataType>,\n ValueType,\n ComponentType extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, ValueType, MetadataType>\n> extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, ValueType, MetadataType> implements OnInit {\n\n component!: ComponentRef<ComponentType>;\n\n constructor(private readonly viewContainerRef: ViewContainerRef) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.component = this.viewContainerRef.createComponent<ComponentType>(this.metadata.component as Type<ComponentType>);\n this.component.instance.entity = this.entity;\n this.component.instance.key = this.key;\n this.component.instance.getValidationErrorMessage = this.getValidationErrorMessage;\n this.component.instance.inputChangeEvent.subscribe(this.inputChangeEvent);\n this.component.instance.isReadOnly = this.isReadOnly;\n }\n}","","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'date-input',\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatDatepickerModule,\n MatInputModule,\n FormsModule\n ]\n})\nexport class DateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE, Date> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ? metadata.min(propertyValue) : undefined\"\n [max]=\"metadata.max ? metadata.max(propertyValue) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? DateUtilities.defaultDateFilter\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { DateFilterFn } from '@angular/material/datepicker';\n\nimport { DateRange, DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { DateUtilities, Time } from '../../utilities/date.utilities';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultDateDecoratorConfig. Sets default values.\n */\nexport class DefaultDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date> implements DefaultDateDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'date';\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date | null | undefined>;\n\n constructor(data: DefaultDateDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.max = data.max;\n this.min = data.min;\n this.filter = data.filter;\n }\n}\n\n/**\n * The internal DateRangeDateDecoratorConfig. Sets default values.\n */\nexport class DateRangeDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal<DateRange>\n implements DateRangeDateDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'daterange';\n // eslint-disable-next-line jsdoc/require-jsdoc\n minStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxStart?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxEnd?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filter?: DateFilterFn<Date>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderStart: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n placeholderEnd: string;\n\n constructor(data: DateRangeDateDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.minStart = data.minStart;\n this.maxStart = data.maxStart;\n this.minEnd = data.minEnd;\n this.maxEnd = data.maxEnd;\n this.filter = data.filter;\n this.placeholderStart = getConfigValue(globalConfig.startLabel, data.placeholderStart);\n this.placeholderEnd = getConfigValue(globalConfig.endLabel, data.placeholderEnd);\n }\n}\n\n/**\n * The internal DateTimeDateDecoratorConfig. Sets default values.\n */\nexport class DateTimeDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal<Date> implements DateTimeDateDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'datetime';\n // eslint-disable-next-line jsdoc/require-jsdoc\n times: DropdownValue<Time | undefined>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n timeDisplayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxDate?: (date?: Date) => Date;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterDate?: DateFilterFn<Date | null | undefined>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n minTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxTime?: (date?: Date) => Time;\n // eslint-disable-next-line jsdoc/require-jsdoc\n filterTime?: ((time: Time) => boolean) | (() => boolean);\n\n constructor(data: DateTimeDateDecoratorConfig, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = getConfigValue(globalConfig.timeLabel, data.timeDisplayName);\n this.minDate = data.minDate;\n this.maxDate = data.maxDate;\n this.filterDate = data.filterDate;\n this.minTime = data.minTime;\n this.maxTime = data.maxTime;\n this.filterTime = data.filterTime;\n this.defaultWidths = [6, 12, 12];\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DateFilterFn, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateRangeDateDecoratorConfigInternal } from '../../../../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities } from '../../../../utilities/date.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'date-range-input',\n templateUrl: './date-range-input.component.html',\n styleUrls: ['./date-range-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatDatepickerModule,\n FormsModule,\n NgFor,\n NgIf\n ]\n})\nexport class DateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_RANGE, DateRange> implements OnInit {\n\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n defaultDateFilter: DateFilterFn<Date | null | undefined> = DateUtilities.defaultDateFilter;\n\n constructor(\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateRangeDateDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n // this.dateRange = LodashUtilities.cloneDeep(this.propertyValue) ?? EMPTY_DATERANGE;\n if (this.propertyValue?.start) {\n this.dateRangeStart = new Date(this.propertyValue.start);\n }\n if (this.propertyValue?.end) {\n this.dateRangeEnd = new Date(this.propertyValue.end);\n }\n this.setDateRangeValues();\n }\n\n /**\n * Updates the date range values based on the start and end date.\n */\n setDateRangeValues(): void {\n if (this.dateRangeStart && this.dateRangeEnd) {\n const values: Date[] = DateUtilities.getDatesBetween(\n new Date(this.dateRangeStart),\n new Date(this.dateRangeEnd),\n this.metadata.filter\n );\n this.propertyValue = {\n start: new Date(this.dateRangeStart),\n end: new Date(this.dateRangeEnd),\n values: values.length ? values : (undefined as unknown as Date[])\n };\n }\n else if (!this.dateRangeStart && !this.dateRangeEnd) {\n this.propertyValue = undefined;\n }\n else if (this.dateRangeStart) {\n this.propertyValue = {\n start: new Date(this.dateRangeStart),\n end: undefined as unknown as Date,\n values: undefined as unknown as Date[]\n };\n }\n else if (this.dateRangeEnd) {\n this.propertyValue = {\n start: undefined as unknown as Date,\n end: new Date(this.dateRangeEnd),\n values: undefined as unknown as Date[]\n };\n }\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required(entity)\" [dateFilter]=\"metadata.filter ?? defaultDateFilter\" [disabled]=\"isReadOnly\">\n <input #startModel=\"ngModel\"\n matStartDate\n [name]=\"name + 'start'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minStart ? metadata.minStart(dateRangeStart) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(dateRangeStart) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n [(ngModel)]=\"dateRangeStart\"\n (dateChange)=\"setDateRangeValues()\"\n >\n <input #endModel=\"ngModel\"\n matEndDate\n [name]=\"name + 'end'\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minEnd ? metadata.minEnd(dateRangeEnd) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(dateRangeEnd) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n [(ngModel)]=\"dateRangeEnd\"\n (dateChange)=\"setDateRangeValues()\"\n >\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n\n @if (startModel.errors) {\n <mat-error >{{getValidationErrorMessage(startModel)}}</mat-error>\n }\n @if (!startModel.errors && endModel.errors) {\n <mat-error >{{getValidationErrorMessage(endModel)}}</mat-error>\n }\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor } from '@angular/common';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DateFilterFn, MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { DateTimeDateDecoratorConfigInternal } from '../../../../decorators/date/date-decorator-internal.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { defaultTrue } from '../../../../functions/default-true.function';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { DateUtilities, Time } from '../../../../utilities/date.utilities';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'date-time-input',\n templateUrl: './date-time-input.component.html',\n styleUrls: ['./date-time-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n MatDatepickerModule,\n FormsModule,\n MatSelectModule,\n NgFor\n ]\n})\nexport class DateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_TIME, Date> implements OnInit {\n\n DateUtilities: typeof DateUtilities = DateUtilities;\n\n timeDropdownValues!: DropdownValue<Time | undefined>[];\n\n get time(): Time | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.TIME_KEY, this.entity, this.key) as Time | undefined;\n }\n\n set time(value: Time | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.TIME_KEY, value, this.entity, this.key);\n }\n\n defaultDateFilter: DateFilterFn<Date | null | undefined> = defaultTrue;\n\n constructor(\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new DateTimeDateDecoratorConfigInternal(this.metadata, this.globalConfig);\n this.time = DateUtilities.getTimeFromDate(this.propertyValue);\n this.timeDropdownValues = this.metadata.times;\n if (this.propertyValue) {\n this.propertyValue = new Date(this.propertyValue);\n }\n }\n\n /**\n * Checks if two times are equal. Is needed for the dropdown.\n * @param time1 - The first time to compare.\n * @param time2 - The second time to compare.\n * @returns Whether or not the time objects are the same.\n */\n compareTimes(time1?: Time, time2?: Time): boolean {\n return !!time1 && !!time2 && time1.hours === time2.hours && time1.minutes === time2.minutes;\n }\n\n /**\n * Sets the time on a datetime property.\n */\n setTime(): void {\n if (!this.propertyValue) {\n this.emitChange();\n return;\n }\n this.propertyValue = new Date(this.propertyValue);\n if (this.time?.hours != undefined && this.time?.minutes != undefined) {\n this.propertyValue.setHours(this.time.hours, this.time.minutes, 0, 0);\n }\n else {\n this.propertyValue.setHours(0, 0, 0, 0);\n }\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"date-time\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.minDate ? metadata.minDate(propertyValue) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(propertyValue) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? defaultDateFilter\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (dateChange)=\"setTime()\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <mat-form-field class=\"timepicker\">\n <mat-label>{{metadata.timeDisplayName}}</mat-label>\n <mat-select\n #timeModel=\"ngModel\"\n [name]=\"name + 'time'\"\n [required]=\"metadata.required(entity)\"\n [compareWith]=\"compareTimes\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"time\"\n (selectionChange)=\"setTime()\"\n >\n @for (validTime of DateUtilities.getValidTimesForDropdown(metadata.times, propertyValue, metadata.minTime, metadata.maxTime, metadata.filterTime); track $index) {\n <mat-option [value]=\"validTime.value\">{{validTime.displayName}}</mat-option>\n }\n </mat-select>\n <mat-error>{{getValidationErrorMessage(timeModel)}}</mat-error>\n </mat-form-field>\n</div>","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n/**\n * Adds drag and drop functionality to an element.\n */\n@Directive({\n selector: '[dragDrop]',\n standalone: true\n})\nexport class DragDropDirective {\n /**\n * Emits the dropped files to the parent.\n */\n @Output()\n readonly files: EventEmitter<File[]> = new EventEmitter<File[]>();\n\n constructor() { }\n\n /**\n * Prevents the event default.\n * @param evt - The Event when dragged files hover over the parent.\n */\n @HostListener('dragover', ['$event'])\n onDragOver(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n /**\n * Prevents the event default.\n * @param evt - The Event when dragged files leave the parent.\n */\n @HostListener('dragleave', ['$event'])\n onDragLeave(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n /**\n * Prevents the event default and emits the dropped files with the output.\n * @param evt - The Event when files are dropped.\n */\n @HostListener('drop', ['$event'])\n onDrop(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.dataTransfer && evt.dataTransfer.files.length > 0) {\n this.files.emit(Array.from(evt.dataTransfer.files));\n }\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DefaultFileDecoratorConfigInternal, FileDataWithFile, ImageFileDecoratorConfigInternal } from '../../../../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { DragDropDirective } from '../../../../directives/drag-drop.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { FileUtilities } from '../../../../utilities/file.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../../confirm-dialog/confirm-dialog.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrls: ['./file-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatChipsModule,\n FormsModule,\n NgIf,\n NgFor,\n DragDropDirective,\n MatButtonModule\n ]\n})\nexport class FileInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n get filenames(): string[] | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.FILENAMES_KEY, this.entity, this.key) as string[] | undefined;\n }\n set filenames(value: string[] | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.FILENAMES_KEY, value, this.entity, this.key);\n }\n\n FileUtilities: typeof FileUtilities = FileUtilities;\n\n @Input({ required: true })\n propertyValue!: FileData | FileData[] | undefined;\n\n @Input({ required: true })\n entity!: EntityType;\n\n @Input({ required: true })\n key!: keyof EntityType;\n\n @Input({ required: true })\n metadata!: DefaultFileDecoratorConfigInternal | ImageFileDecoratorConfigInternal;\n\n @Input({ required: true })\n getValidationErrorMessage!: (model: NgModel) => string;\n\n @Input({ required: true })\n isReadOnly!: boolean;\n\n @Output()\n readonly fileDataChangeEvent: EventEmitter<FileData | FileData[]> = new EventEmitter<FileData | FileData[]>();\n\n acceptString!: string;\n\n constructor(private readonly dialog: MatDialog, private readonly http: HttpClient) { }\n\n ngOnInit(): void {\n if (this.metadata.multiple) {\n this.initMultiFile();\n }\n else {\n this.initSingleFile();\n }\n this.fileDataChangeEvent.emit(this.propertyValue);\n this.acceptString = FileUtilities.getAcceptString(this.metadata.allowedMimeTypes);\n }\n\n private initMultiFile(): void {\n if (this.propertyValue) {\n this.filenames = (this.propertyValue as FileData[]).map(f => f.name);\n }\n }\n\n private initSingleFile(): void {\n if (this.propertyValue) {\n this.filenames = [(this.propertyValue as FileData).name];\n }\n }\n\n async setFileFromInput(event: Event): Promise<void> {\n const files: FileList | [] = (event.target as HTMLInputElement).files ?? [];\n await this.setFile(Array.from(files));\n }\n\n async setFile(files: File[]): Promise<void> {\n // validation done inline\n if (files.find(f => !FileUtilities.isMimeTypeValid(f.type, this.metadata.allowedMimeTypes))) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.mimeTypeErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n this.resetFileInputs();\n return;\n }\n if (files.find(f => FileUtilities.transformToMegaBytes(f.size, 'B') > this.metadata.maxSize)) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.maxSizeErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n this.resetFileInputs();\n return;\n }\n let fileSizeTotal: number = 0;\n for (const file of files) {\n fileSizeTotal += file.size;\n }\n if (FileUtilities.transformToMegaBytes(fileSizeTotal, 'B') > this.metadata.maxSizeTotal) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadata.maxSizeTotalErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n this.resetFileInputs();\n return;\n }\n await (this.metadata.multiple ? this.setMultiFile(Array.from(files)) : this.setSingleFile(files[0]));\n this.fileDataChangeEvent.emit(this.propertyValue);\n }\n\n private resetFileInputs(): void {\n this.filenames = undefined;\n this.propertyValue = undefined;\n this.fileDataChangeEvent.emit(this.propertyValue);\n }\n\n private async setMultiFile(files: File[]): Promise<void> {\n this.propertyValue = this.propertyValue ?? [];\n for (const file of files) {\n const fileData: FileData = {\n file: file,\n name: file.name,\n type: file.type,\n size: file.size\n };\n (this.propertyValue as FileData[]).push(fileData);\n }\n this.filenames = (this.propertyValue as FileData[]).map(f => f.name);\n }\n\n private async setSingleFile(file: File): Promise<void> {\n this.propertyValue = {\n file: file,\n name: file.name,\n type: file.type,\n size: file.size\n };\n this.filenames = [this.propertyValue.name];\n }\n\n removeFile(name: string): void {\n if (this.isReadOnly) {\n return;\n }\n if (this.metadata.multiple) {\n this.filenames?.splice(this.filenames.indexOf(name), 1);\n if (!this.filenames?.length) {\n this.filenames = undefined;\n }\n const fileDataToRemove: FileData = (this.propertyValue as FileData[]).find(f => f.name === name) as FileData;\n (this.propertyValue as FileData[]).splice((this.propertyValue as FileData[]).indexOf(fileDataToRemove), 1);\n if (!(this.propertyValue as FileData[]).length) {\n this.propertyValue = undefined;\n }\n }\n else {\n this.filenames = undefined;\n this.propertyValue = undefined;\n }\n this.fileDataChangeEvent.emit(this.propertyValue);\n }\n\n async downloadFile(name: string): Promise<void> {\n if (this.metadata.multiple && (this.propertyValue as FileData[]).length) {\n const foundFileData: FileData = (this.propertyValue as FileData[]).find(f => f.name === name) as FileData;\n // the index need to be saved in a constant because we edit foundFileData\n // => .indexOf() returns undefined.\n const index: number = (this.propertyValue as FileData[]).indexOf(foundFileData);\n (this.propertyValue as FileData[])[index] = await FileUtilities.getFileData(foundFileData, this.http);\n FileUtilities.downloadSingleFile((this.propertyValue as FileData[])[index] as FileDataWithFile);\n }\n else if (this.propertyValue) {\n this.propertyValue = await FileUtilities.getFileData(this.propertyValue as FileData, this.http);\n FileUtilities.downloadSingleFile(this.propertyValue);\n }\n }\n\n downloadAllEnabled(): boolean {\n if (!this.metadata.multiple) {\n return false;\n }\n if (!this.propertyValue) {\n return false;\n }\n return !((this.propertyValue as FileData[]).length < 2);\n }\n\n async downloadAll(): Promise<void> {\n if ((this.propertyValue as FileData[]).length) {\n await FileUtilities.downloadMultipleFiles(\n this.metadata.displayName,\n LodashUtilities.cloneDeep(this.propertyValue as FileData[]),\n this.http\n );\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<input #fileInput\n type=\"file\" hidden\n [multiple]=\"metadata.multiple\"\n [accept]=\"acceptString\"\n (change)=\"setFileFromInput($event)\"\n>\n\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-grid #chipGrid\n #model=\"ngModel\" name=\"file\" [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"filenames\"\n >\n @for (name of filenames; track $index) {\n <mat-chip-row (removed)=\"removeFile(name)\">\n {{name}}\n <span class=\"mat-mdc-chip-remove mat-mdc-chip-trailing-icon ngx-mat-grey\" (click)=\"downloadFile(name)\">\n <i class=\"fas fa-download\"></i>\n </span>\n @if (!isReadOnly) {\n <button type=\"button\" matChipRemove>\n <i [class]=\"metadata.deleteIcon\"></i>\n </button>\n }\n </mat-chip-row>\n }\n <input hidden [matChipInputFor]=\"chipGrid\" [readonly]=\"true\">\n </mat-chip-grid>\n @if (downloadAllEnabled()) {\n <button type=\"button\" class=\"ngx-mat-grey\" mat-icon-button matSuffix (click)=\"downloadAll()\">\n <i class=\"fas fa-file-zipper\"></i>\n </button>\n }\n <button type=\"button\" class=\"ngx-mat-grey\" mat-icon-button matSuffix [disabled]=\"isReadOnly\" (click)=\"fileInput.click()\">\n <i class=\"fas\" [class.fa-plus-circle]=\"metadata.multiple\" [class.fa-upload]=\"!metadata.multiple\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>\n\n@if (metadata.dragAndDrop && !isReadOnly) {\n <div class=\"drag-drop\" dragDrop (files)=\"setFile($event)\">\n <button type=\"button\" mat-icon-button [disabled]=\"isReadOnly\" (click)=\"fileInput.click()\">\n <i class=\"fas fa-file-arrow-up ngx-mat-grey\"></i>\n </button>\n </div>\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\nimport { FileInputComponent } from '../file-input/file-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'file-default-input',\n templateUrl: './file-default-input.component.html',\n styleUrls: ['./file-default-input.component.scss'],\n standalone: true,\n imports: [FileInputComponent]\n})\nexport class FileDefaultInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_DEFAULT, FileData | FileData[]> implements OnInit {\n\n async refreshFileData(fileData?: FileData | FileData[]): Promise<void> {\n this.propertyValue = fileData;\n this.emitChange();\n }\n}","<div [class.file-input]=\"metadata.dragAndDrop\" [class.mat-elevation-z8]=\"metadata.dragAndDrop\">\n <file-input\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n [entity]=\"entity\"\n [key]=\"key\"\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n >\n </file-input>\n</div>","// eslint-disable-next-line jsdoc/require-jsdoc, stylistic/max-len\nexport const PLACEHOLDER: string = 'data:image/png;base64,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';","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { PLACEHOLDER } from '../../../../mocks/placeholder-data.png';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { FileUtilities } from '../../../../utilities/file.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\nimport { FileInputComponent } from '../file-input/file-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'file-image-input',\n templateUrl: './file-image-input.component.html',\n styleUrls: ['./file-image-input.component.scss'],\n standalone: true,\n imports: [\n FileInputComponent,\n NgIf\n ]\n})\nexport class FileImageInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_IMAGE, FileData | FileData[]> implements OnInit {\n\n get multiPreviewImages(): string[] | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.MULTI_PREVIEW_IMAGES_KEY, this.entity, this.key) as string[] | undefined;\n }\n set multiPreviewImages(value: string[] | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.MULTI_PREVIEW_IMAGES_KEY, value, this.entity, this.key);\n }\n\n get singlePreviewImage(): string | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.SINGLE_PREVIEW_IMAGE_KEY, this.entity, this.key) as string | undefined;\n }\n set singlePreviewImage(value: string | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.SINGLE_PREVIEW_IMAGE_KEY, value, this.entity, this.key);\n }\n\n imageIndex: number = 0;\n placeHolder: string = PLACEHOLDER;\n\n constructor(private readonly http: HttpClient) {\n super();\n }\n\n private async setSinglePreviewImage(): Promise<void> {\n if (this.propertyValue) {\n this.propertyValue = await FileUtilities.getFileData(this.propertyValue as FileData, this.http);\n this.singlePreviewImage = await FileUtilities.getDataURLFromFile(this.propertyValue.file);\n }\n else {\n this.singlePreviewImage = undefined;\n }\n }\n\n private async setMultiPreviewImages(index: number): Promise<void> {\n const multiFileData: FileData[] | undefined = this.propertyValue as FileData[] | undefined;\n const previewImages: string[] = [];\n if (multiFileData?.length) {\n for (let i: number = 0; i < multiFileData.length; i++) {\n if (i === index) {\n multiFileData[index] = await FileUtilities.getFileData(multiFileData[index], this.http);\n previewImages.push(await FileUtilities.getDataURLFromFile(multiFileData[index].file) as string);\n }\n else {\n previewImages.push('empty');\n }\n }\n }\n this.multiPreviewImages = previewImages;\n }\n\n async refreshFileData(fileData?: FileData | FileData[]): Promise<void> {\n this.propertyValue = fileData;\n this.emitChange();\n if (this.metadata.multiple) {\n fileData = (fileData as FileData[] | undefined);\n if (!fileData?.[this.imageIndex]) {\n this.imageIndex = 0;\n }\n await this.setMultiPreviewImages(this.imageIndex);\n }\n else {\n await this.setSinglePreviewImage();\n }\n }\n\n async prev(): Promise<void> {\n if (this.imageIndex <= 0) {\n return;\n }\n await this.setMultiPreviewImages(this.imageIndex - 1);\n this.imageIndex--;\n }\n\n async next(): Promise<void> {\n if (!this.multiPreviewImages?.length) {\n return;\n }\n if (this.imageIndex === (this.multiPreviewImages.length - 1)) {\n return;\n }\n await this.setMultiPreviewImages(this.imageIndex + 1);\n this.imageIndex++;\n }\n\n async setIndex(index: number): Promise<void> {\n await this.setMultiPreviewImages(index);\n this.imageIndex = index;\n }\n}"," \n<!-- eslint-disable angular/prefer-ngsrc -->\n<!-- eslint-disable angular/alt-text -->\n \n@if (!metadata.dragAndDrop && !metadata.preview) {\n <file-input\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n [entity]=\"entity\"\n [key]=\"key\"\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n >\n </file-input>\n}\n \n@if (metadata.dragAndDrop || metadata.preview) {\n <div class=\"file-input mat-elevation-z8\">\n <file-input\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n [entity]=\"entity\"\n [key]=\"key\"\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n >\n </file-input>\n\n @if (metadata.preview) {\n @if (metadata.multiple) {\n <div class=\"image-preview\">\n @if (multiPreviewImages?.[imageIndex]) {\n <img class=\"mat-elevation-z2\" [src]=\"multiPreviewImages?.[imageIndex]\">\n }\n @else {\n <img class=\"mat-elevation-z2\" [src]=\"metadata.previewPlaceholderUrl ?? placeHolder\">\n }\n </div>\n \n <div class=\"preview-nav\">\n <i class=\"fas fa-angle-left left-button\" [class.disabled]=\"imageIndex === 0\" (click)=\"prev()\"></i>\n @if (\n multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (multiPreviewImages.length - 1)\n ) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex-4)\">\n <div class=\"image-index\">{{imageIndex - 3}}</div>\n </div>\n }\n @if (\n multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (multiPreviewImages.length - 2)\n || imageIndex === (multiPreviewImages.length - 1)\n )\n ) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex-3)\">\n <div class=\"image-index\">{{imageIndex - 2}}</div>\n </div>\n }\n @if (multiPreviewImages?.[imageIndex-2]) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex-2)\">\n <div class=\"image-index\">{{imageIndex - 1}}</div>\n </div>\n }\n @if (multiPreviewImages?.[imageIndex-1]) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex-1)\">\n <div class=\"image-index\">{{imageIndex}}</div>\n </div>\n } \n <div class=\"dot selected disabled\">\n <div class=\"image-index\">{{imageIndex + 1}}</div>\n </div>\n @if (multiPreviewImages?.[imageIndex+1]) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex+1)\">\n <div class=\"image-index\">{{imageIndex + 2}}</div>\n </div>\n }\n @if (multiPreviewImages?.[imageIndex+2]) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex+2)\">\n <div class=\"image-index\">{{imageIndex + 3}}</div>\n </div>\n }\n @if (multiPreviewImages?.[imageIndex+3] && imageIndex <= 1) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex+3)\">\n <div class=\"image-index\">{{imageIndex + 4}}</div>\n </div>\n }\n @if (multiPreviewImages?.[imageIndex+4] && imageIndex === 0) {\n <div class=\"dot\" (click)=\"setIndex(imageIndex+4)\">\n <div class=\"image-index\">{{imageIndex + 5}}</div>\n </div>\n }\n <i class=\"fas fa-angle-right right-button\" [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\" (click)=\"next()\"></i>\n </div>\n }\n @else {\n <div class=\"image-preview\">\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n </div>\n }\n }\n </div>\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'number-dropdown-input',\n templateUrl: './number-dropdown-input.component.html',\n styleUrls: ['./number-dropdown-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatInputModule,\n NgIf,\n NgFor\n ]\n})\nexport class NumberDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_DROPDOWN, number> implements OnInit {\n\n private dropdownValues: DropdownValue<number | undefined>[] = [];\n filteredDropdownValues: DropdownValue<number | undefined>[] = [];\n\n get currentDropdownValue(): DropdownValue<number | undefined> | undefined {\n return LodashUtilities.cloneDeep(this.dropdownValues ?? [])\n .find(v => v.value === this.propertyValue);\n }\n\n get shouldDisplayCurrentValue(): boolean {\n return !!this.currentDropdownValue && !this.filteredDropdownValues.find(v => v.value === this.currentDropdownValue?.value);\n }\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n void runInInjectionContext(this.injector, async () => {\n this.dropdownValues = await this.metadata.dropdownValues(this.entity);\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n });\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || `${option.value}`.toLowerCase().includes(filter);\n });\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #model=\"ngModel\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (selectionChange)=\"emitChange()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n @if (!metadata.required(entity)) {\n <mat-option>-</mat-option>\n }\n @if (shouldDisplayCurrentValue) {\n <mat-option [value]=\"currentDropdownValue?.value\">{{currentDropdownValue?.displayName}}</mat-option>\n }\n @for (value of filteredDropdownValues; track $index) {\n <mat-option [value]=\"value.value\">{{value.displayName}}</mat-option>\n }\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n FormsModule\n ]\n})\nexport class NumberInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER, number> implements OnInit {\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n type=\"number\"\n number\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","\n/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSliderModule } from '@angular/material/slider';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'number-slider-input',\n templateUrl: './number-slider-input.component.html',\n styleUrls: ['./number-slider-input.component.scss'],\n standalone: true,\n imports: [\n MatSliderModule,\n MatInputModule,\n FormsModule\n ]\n})\nexport class NumberSliderInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_SLIDER, number> implements OnInit {\n\n updatePropertyValue(value: number): void {\n this.propertyValue = value;\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-slider\n id=\"slider\"\n color=\"primary\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [step]=\"metadata.step\"\n [discrete]=\"true\"\n [displayWith]=\"metadata.formatThumbLabelValue\"\n [showTickMarks]=\"metadata.showTickMarks\"\n [disabled]=\"isReadOnly\"\n (click)=\"model.control.markAsTouched()\"\n>\n <input matSliderThumb\n [disabled]=\"isReadOnly\"\n (valueChange)=\"updatePropertyValue($event)\"\n >\n</mat-slider>\n\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <!-- hidden input is needed so that the slider can be used inside a mat-form-field -->\n <input #model=\"ngModel\" matInput\n style=\"opacity: 0%;\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n \n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { ReferencesManyDecoratorConfig } from './references-many-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { DisplayColumn } from '../../components/table/table-data';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class ReferencesManyDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements ReferencesManyDecoratorConfig<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n getReferencedEntities: () => Promise<EntityType[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n getDropdownValues: (referencedEntities: EntityType[]) => DropdownValue<string>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n getEntityForId: (entityId: string, allReferencedEntities: EntityType[]) => EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n addButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n removeButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n addAll: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n addAllButtonLabel: string;\n\n constructor(data: ReferencesManyDecoratorConfig<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n this.getReferencedEntities = data.getReferencedEntities;\n this.getDropdownValues = data.getDropdownValues;\n this.getEntityForId = data.getEntityForId ?? defaultGetEntityForId;\n this.displayColumns = data.displayColumns;\n this.addButtonLabel = getConfigValue(globalConfig.addLabel, data.addButtonLabel);\n this.removeButtonLabel = getConfigValue(globalConfig.removeLabel, data.removeButtonLabel);\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.dropdownLabel = getConfigValue(globalConfig.selectLabel, data.dropdownLabel);\n this.addAll = data.addAll ?? false;\n this.addAllButtonLabel = getConfigValue(globalConfig.addAllLabel, data.addAllButtonLabel);\n }\n}\n\n/**\n * The default function to use when trying to get the referenced entity for the given id.\n * @param entityId - The id of the referenced entity.\n * @param allReferencedEntities - All referenced entities.\n * @returns The entity that has the given id.\n */\nexport function defaultGetEntityForId<EntityType extends BaseEntityType<EntityType>>(\n entityId: string,\n allReferencedEntities: EntityType[]\n): EntityType {\n return allReferencedEntities.find(e => e['id' as keyof EntityType] === entityId) as EntityType;\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, Inject, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { ReferencesManyDecoratorConfigInternal } from '../../../../decorators/references-many/references-many-decorator-internal.data';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../../global-configuration-values';\nimport { SelectionUtilities } from '../../../../utilities/selection.utilities';\nimport { DisplayColumn } from '../../../table/table-data';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'references-many-input',\n templateUrl: './references-many-input.component.html',\n styleUrls: ['./references-many-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n NgIf,\n MatTableModule,\n MatCheckboxModule,\n NgFor,\n MatButtonModule\n ]\n})\nexport class ReferencesManyInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.REFERENCES_MANY, string[]> implements OnInit {\n\n private allReferencedEntities: EntityType[] = [];\n\n private allDropdownValues: DropdownValue<string>[] = [];\n\n dropdownValues: DropdownValue<string>[] = [];\n\n filteredDropdownValues: DropdownValue<string>[] = [];\n\n input: string = '';\n\n referencedEntitiesDataSource: MatTableDataSource<string> = new MatTableDataSource();\n\n displayedColumns!: string[];\n\n selection: SelectionModel<string> = new SelectionModel<string>(true, []);\n\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n get currentDropdownValue(): DropdownValue<string> | undefined {\n return LodashUtilities.cloneDeep(this.dropdownValues ?? [])\n .find(v => v.value === this.input);\n }\n\n get shouldDisplayCurrentValue(): boolean {\n return !!this.currentDropdownValue && !this.filteredDropdownValues.find(v => v.value === this.currentDropdownValue?.value);\n }\n\n constructor(\n private readonly injector: EnvironmentInjector,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.metadata = new ReferencesManyDecoratorConfigInternal(this.metadata, this.globalConfig);\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.key);\n const givenDisplayColumns: string[] = this.metadata.displayColumns.map((v) => v.displayName);\n if (givenDisplayColumns.find(s => s === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved.\n Please choose a different name.`\n );\n }\n this.displayedColumns = this.isReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.referencedEntitiesDataSource.data = this.propertyValue ?? [];\n\n void runInInjectionContext(this.injector, async () => {\n this.allReferencedEntities = await this.metadata.getReferencedEntities() as EntityType[];\n this.allDropdownValues = this.metadata.getDropdownValues(LodashUtilities.cloneDeep(this.allReferencedEntities));\n this.dropdownValues = LodashUtilities.cloneDeep(this.allDropdownValues);\n for (const value of this.referencedEntitiesDataSource.data) {\n const foundValue: DropdownValue<string> | undefined = this.dropdownValues.find(v => v.value === value);\n if (foundValue) {\n this.dropdownValues.splice(this.dropdownValues.indexOf(foundValue), 1);\n }\n }\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n });\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || option.value.toLowerCase().includes(filter);\n });\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entityId - The id of the entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entityId: string, displayColumn: DisplayColumn<EntityType>): unknown {\n return runInInjectionContext(this.injector, () => {\n // eslint-disable-next-line typescript/no-unsafe-argument\n return displayColumn.value(this.metadata.getEntityForId(entityId, this.allReferencedEntities));\n });\n }\n\n async add(): Promise<void> {\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(LodashUtilities.cloneDeep(this.input));\n const foundDropdownValue: DropdownValue<string> = this.dropdownValues.find(v => v.value === this.input) as DropdownValue<string>;\n this.dropdownValues.splice(this.dropdownValues.indexOf(foundDropdownValue), 1);\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n this.referencedEntitiesDataSource.data = this.propertyValue;\n this.input = '';\n this.emitChange();\n }\n\n addAll(): void {\n this.propertyValue = this.allDropdownValues.map(dv => dv.value);\n if (!this.propertyValue.length) {\n this.propertyValue = undefined;\n }\n this.dropdownValues = [];\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n this.referencedEntitiesDataSource.data = this.propertyValue ?? [];\n this.input = '';\n this.emitChange();\n }\n\n remove(): void {\n for (const s of this.selection.selected) {\n this.propertyValue?.splice(this.propertyValue.indexOf(s), 1);\n const foundDropdownValue: DropdownValue<string> | undefined = this.allDropdownValues.find(v => v.value === s);\n if (foundDropdownValue) {\n this.dropdownValues.push(foundDropdownValue);\n }\n }\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n if (!this.propertyValue?.length) {\n this.propertyValue = undefined;\n }\n this.referencedEntitiesDataSource.data = this.propertyValue ?? [];\n this.selection.clear();\n this.input = '';\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadata.displayName}}</b>\n </div>\n\n <mat-form-field>\n <mat-label>{{metadata.dropdownLabel}}</mat-label>\n <mat-select #inputModel=\"ngModel\" [name]=\"name + 'input'\" [disabled]=\"isReadOnly\" [(ngModel)]=\"input\" (opened)=\"selectSearchInput.focus()\">\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n <mat-option>-</mat-option>\n @if (shouldDisplayCurrentValue) {\n <mat-option [value]=\"currentDropdownValue?.value\">{{currentDropdownValue?.displayName}}</mat-option>\n }\n @for (value of filteredDropdownValues; track $index) {\n <mat-option [value]=\"value.value\">{{value.displayName}}</mat-option>\n }\n </mat-select>\n <mat-error>{{getValidationErrorMessage(inputModel)}}</mat-error>\n </mat-form-field>\n\n @if (metadata.addAll) {\n <button type=\"button\" style=\"margin-left: 20px;\" mat-raised-button [disabled]=\"!dropdownValues.length || isReadOnly\" (click)=\"addAll()\">\n {{metadata.addAllButtonLabel}}\n </button>\n }\n\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button [disabled]=\"!input\" (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button [disabled]=\"!selection.selected.length\" (click)=\"remove()\">\n {{metadata.removeButtonLabel}}\n </button>\n </div>\n\n <mat-table [dataSource]=\"referencedEntitiesDataSource\">\n <!-- select Column -->\n @if (!isReadOnly) {\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [disabled]=\"!referencedEntitiesDataSource.data.length\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, referencedEntitiesDataSource)\"\n [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, referencedEntitiesDataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(selection, referencedEntitiesDataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n }\n\n @for (dCol of metadata.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entityId\" class=\"entity\">\n {{getDisplayColumnValue(entityId, dCol)}}\n </mat-cell>\n </ng-container>\n }\n \n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { IncludedInValidatorDirective } from '../../../../directives/included-in.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-autocomplete-input',\n templateUrl: './string-autocomplete-input.component.html',\n styleUrls: ['./string-autocomplete-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatAutocompleteModule,\n FormsModule,\n IncludedInValidatorDirective,\n NgIf,\n NgFor\n ]\n})\nexport class StringAutocompleteInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_AUTOCOMPLETE, string> implements OnInit {\n\n autocompleteStrings: string[] = [];\n filteredAutocompleteStrings!: string[];\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n void runInInjectionContext(this.injector, async () => {\n this.autocompleteStrings = await this.metadata.autocompleteValues(this.entity);\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n });\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input: string = ''): void {\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(input.toLowerCase()));\n if (!this.filteredAutocompleteStrings.length) {\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n }\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n@if (autocompleteStrings.length) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [matAutocomplete]=\"auto\"\n [required]=\"metadata.required(entity)\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [disabled]=\"isReadOnly\"\n [includedIn]=\"metadata.restrictToOptions ? autocompleteStrings : undefined\"\n [(ngModel)]=\"propertyValue\"\n (keyup)=\"filterAutocompleteStrings(propertyValue)\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-autocomplete #auto=\"matAutocomplete\">\n @for (value of filteredAutocompleteStrings; track $index) {\n <mat-option [value]=\"value\">{{value}}</mat-option>\n }\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, OnInit, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-dropdown-input',\n templateUrl: './string-dropdown-input.component.html',\n styleUrls: ['./string-dropdown-input.component.scss'],\n standalone: true,\n imports: [\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n NgIf,\n NgFor\n ]\n})\nexport class StringDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_DROPDOWN, string> implements OnInit {\n\n private dropdownValues: DropdownValue<string | undefined>[] = [];\n filteredDropdownValues: DropdownValue<string | undefined>[] = [];\n\n get currentDropdownValue(): DropdownValue<string | undefined> | undefined {\n return LodashUtilities.cloneDeep(this.dropdownValues ?? [])\n .find(v => v.value === this.propertyValue);\n }\n\n get shouldDisplayCurrentValue(): boolean {\n return !!this.currentDropdownValue && !this.filteredDropdownValues.find(v => v.value === this.currentDropdownValue?.value);\n }\n\n constructor(private readonly injector: EnvironmentInjector) {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n void runInInjectionContext(this.injector, async () => {\n this.dropdownValues = await this.metadata.dropdownValues(this.entity);\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues);\n });\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredDropdownValues = LodashUtilities.cloneDeep(this.dropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || option.value?.toLowerCase().includes(filter);\n });\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #model=\"ngModel\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (selectionChange)=\"emitChange()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n @if (!metadata.required(entity)) {\n <mat-option>-</mat-option>\n }\n @if (shouldDisplayCurrentValue) {\n <mat-option [value]=\"currentDropdownValue?.value\">{{currentDropdownValue?.displayName}}</mat-option>\n }\n @for (value of filteredDropdownValues; track $index) {\n <mat-option [value]=\"value.value\">{{value.displayName}}</mat-option>\n }\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-input',\n templateUrl: './string-input.component.html',\n styleUrls: ['./string-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class StringInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING, string> implements OnInit {\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n/**\n * A directive that validates if a given password matches the control value.\n */\n@Directive({\n selector: '[passwordMatch]',\n providers: [{ provide: NG_VALIDATORS, useExisting: PasswordMatchValidatorDirective, multi: true }],\n standalone: true\n})\nexport class PasswordMatchValidatorDirective implements Validator {\n\n /**\n * The password that the control value should be matched against.\n */\n @Input()\n passwordMatch?: string;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n validate(control: AbstractControl): ValidationErrors | null {\n // eslint-disable-next-line typescript/no-unsafe-assignment, unicorn/no-null\n return this.passwordMatch == control.value ? null : { passwordMatch: { value: control.value } };\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { NgIf } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { PasswordMatchValidatorDirective } from '../../../../directives/password-match.directive';\nimport { LodashUtilities } from '../../../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../../../encapsulation/reflect.utilities';\nimport { EntityUtilities } from '../../../../utilities/entity.utilities';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\nexport enum PasswordStrength {\n WEAK = 'weak',\n MEDIUM = 'medium',\n STRONG = 'strong'\n}\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-password-input',\n templateUrl: './string-password-input.component.html',\n styleUrls: ['./string-password-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n FormsModule,\n MatInputModule,\n NgIf,\n MatButtonModule,\n PasswordMatchValidatorDirective\n ]\n})\nexport class StringPasswordInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_PASSWORD, string> implements OnInit {\n\n hide: boolean = true;\n hideConfirm: boolean = true;\n\n confirmRequired: boolean = false;\n\n passwordStrength?: PasswordStrength;\n\n PasswordStrength: typeof PasswordStrength = PasswordStrength;\n\n get confirmPassword(): string | undefined {\n return ReflectUtilities.getMetadata(EntityUtilities.CONFIRM_PASSWORD_KEY, this.entity, this.key) as string | undefined;\n }\n\n set confirmPassword(value: string | undefined) {\n ReflectUtilities.defineMetadata(EntityUtilities.CONFIRM_PASSWORD_KEY, value, this.entity, this.key);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.confirmRequired = Boolean(this.propertyValue);\n this.confirmPassword = LodashUtilities.cloneDeep(this.propertyValue);\n }\n\n passwordInput(): void {\n this.confirmRequired = Boolean(this.propertyValue);\n this.setPasswordStrength();\n this.emitChange();\n }\n\n private setPasswordStrength(): void {\n if (this.isPasswordStrong()) {\n this.passwordStrength = PasswordStrength.STRONG;\n return;\n }\n if (this.isPasswordMedium()) {\n this.passwordStrength = PasswordStrength.MEDIUM;\n return;\n }\n if (this.isPasswordWeak()) {\n this.passwordStrength = PasswordStrength.WEAK;\n return;\n }\n this.passwordStrength = undefined;\n }\n\n // long AND complex\n private isPasswordStrong(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return this.propertyValue?.length >= 15 && this.isPasswordComplex();\n }\n\n // long OR complex\n private isPasswordMedium(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return this.propertyValue?.length >= 15 || this.isPasswordComplex();\n }\n\n // exists\n private isPasswordWeak(): boolean {\n return !!this.propertyValue;\n }\n\n private isPasswordComplex(): boolean {\n if (!this.propertyValue) {\n return false;\n }\n return /[A-Z]/g.test(this.propertyValue)\n && /[a-z]/g.test(this.propertyValue)\n && /\\d/g.test(this.propertyValue)\n && /[!\"#$%&()*,.:<>?@^{|}]/.test(this.propertyValue);\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"password-row\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n #model=\"ngModel\"\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"passwordInput()\"\n >\n <button type=\"button\" mat-icon-button matSuffix (click)=\"hide = !hide\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <i class=\"fas\" [class.fa-eye-slash]=\"hide\" [class.fa-eye]=\"!hide\"></i>\n </div>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n @if (passwordStrength) {\n <div class=\"password-strength-indicator\"\n [class.green]=\"passwordStrength === PasswordStrength.STRONG\"\n [class.yellow]=\"passwordStrength === PasswordStrength.MEDIUM\"\n [class.red]=\"passwordStrength === PasswordStrength.WEAK\"\n >\n </div>\n }\n </mat-form-field>\n @if (metadata.needsConfirmation) {\n <mat-form-field>\n <mat-label>{{metadata.confirmationDisplayName}}</mat-label>\n <input\n #confirmModel=\"ngModel\"\n matInput\n [type]=\"hideConfirm ? 'password' : 'text'\"\n [name]=\"name + 'confirmPassword'\"\n [required]=\"confirmRequired\"\n [disabled]=\"isReadOnly\"\n [passwordMatch]=\"propertyValue\"\n [(ngModel)]=\"confirmPassword\"\n (ngModelChange)=\"passwordInput()\"\n >\n <button type=\"button\" mat-icon-button matSuffix (click)=\"hideConfirm = !hideConfirm\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <i class=\"fas\" [class.fa-eye-slash]=\"hideConfirm\" [class.fa-eye]=\"!hideConfirm\"></i>\n </div>\n </button>\n <mat-error>{{getValidationErrorMessage(confirmModel)}}</mat-error>\n </mat-form-field>\n }\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'string-textbox-input',\n templateUrl: './string-textbox-input.component.html',\n styleUrls: ['./string-textbox-input.component.scss'],\n standalone: true,\n imports: [\n MatFormFieldModule,\n FormsModule,\n MatInputModule\n ]\n})\nexport class StringTextboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_TEXTBOX, string> implements OnInit {\n}","<!-- eslint-disable angular/no-call-expression -->\n<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n #model=\"ngModel\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [name]=\"name\"\n [required]=\"metadata.required(entity)\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [disabled]=\"isReadOnly\"\n [(ngModel)]=\"propertyValue\"\n (ngModelChange)=\"emitChange()\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/**\n * Checks if the given function is async or not.\n * @param originalFunction - The function to check.\n * @returns True when the constructor name is 'AsyncFunction' and false otherwise.\n */\nexport function isAsyncFunction(originalFunction: Function): boolean {\n return originalFunction.constructor.name === 'AsyncFunction';\n}","import { Inject } from '@angular/core';\n\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { defaultFalse } from '../../../functions/default-false.function';\nimport { defaultTrue } from '../../../functions/default-true.function';\nimport { getConfigValue } from '../../../functions/get-config-value.function';\nimport { isAsyncFunction } from '../../../functions/is-async-function.function';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditAction, EditData } from '../table-data';\n\n/**\n * The internal edit action.\n * Sets default values.\n */\nexport class EditActionInternal<EntityType extends BaseEntityType<EntityType>> implements EditAction<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n action: (entity: EntityType, entityPriorChanges: EntityType) => Promise<unknown>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n enabled: ((e: EntityType) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmDialog: ((e: EntityType) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDialogData: ConfirmDialogData;\n\n constructor(\n data: EditAction<EntityType>,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.displayName = data.displayName;\n this.action = this.functionToAsync(data.action);\n this.enabled = data.enabled ?? defaultTrue;\n this.requireConfirmDialog = data.requireConfirmDialog ?? defaultFalse;\n this.confirmDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.confirmDialogData)\n .withDefault('text', globalConfig.confirmBaseActionText)\n .getResult();\n }\n\n private functionToAsync(\n originalFunction: ((e: EntityType, ePriorChanges: EntityType) => unknown)\n | ((e: EntityType, ePriorChanges: EntityType) => Promise<unknown>)\n ): (e: EntityType, ePriorChanges: EntityType) => Promise<unknown> {\n if (isAsyncFunction(originalFunction)) {\n return originalFunction as (e: EntityType) => Promise<unknown>;\n }\n\n /* istanbul ignore next */\n return (e: EntityType, ePriorChanges: EntityType) => new Promise<unknown>((resolve, reject) => {\n try {\n resolve(originalFunction(e, ePriorChanges));\n }\n catch (error) {\n // eslint-disable-next-line promise/no-multiple-resolved\n reject(error);\n }\n });\n }\n}\n\n/**\n * The internal EditData. Requires all default values the user can leave out.\n */\nexport class EditDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: (entity: EntityType) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n cancelButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteRequiresConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editRequiresConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDeleteDialogData: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmEditDialogData: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n actionsLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n actions: EditActionInternal<EntityType>[];\n\n constructor(\n title: (entity: EntityType) => string,\n confirmButtonLabel: string,\n deleteButtonLabel: string,\n cancelButtonLabel: string,\n deleteRequiresConfirmDialog: boolean,\n editRequiresConfirmDialog: boolean,\n unsavedChangesRequireConfirmDialog: boolean,\n confirmDeleteDialogData: ConfirmDialogData,\n confirmEditDialogData: ConfirmDialogData,\n confirmUnsavedChangesDialogData: ConfirmDialogData,\n actionsLabel: string,\n actions: EditAction<EntityType>[],\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n globalConfig: NgxGlobalDefaultValues\n ) {\n this.title = title;\n this.confirmButtonLabel = confirmButtonLabel;\n this.deleteButtonLabel = deleteButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.deleteRequiresConfirmDialog = deleteRequiresConfirmDialog;\n this.editRequiresConfirmDialog = editRequiresConfirmDialog;\n this.unsavedChangesRequireConfirmDialog = unsavedChangesRequireConfirmDialog;\n this.confirmDeleteDialogData = confirmDeleteDialogData;\n this.confirmEditDialogData = confirmEditDialogData;\n this.confirmUnsavedChangesDialogData = confirmUnsavedChangesDialogData;\n this.actionsLabel = actionsLabel;\n this.actions = actions.map(a => new EditActionInternal(a, globalConfig));\n }\n}\n\n/**\n * The Builder for the EditData. Sets default values.\n */\nexport class EditDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditDataInternal<EntityType>, EditData<EntityType>> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data?: EditData<EntityType>) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: EditData<EntityType>): EditDataInternal<EntityType> {\n // eslint-disable-next-line stylistic/max-len\n const confirmEditDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmEditDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n\n // eslint-disable-next-line stylistic/max-len\n const confirmDeleteDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmDeleteDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('type', 'delete')\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n\n // eslint-disable-next-line stylistic/max-len\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data?.confirmUnsavedChangesDialogData)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n\n return new EditDataInternal(\n getConfigValue(this.globalConfig.editTitle, data?.title),\n getConfigValue(this.globalConfig.saveLabel, data?.confirmButtonLabel),\n getConfigValue(this.globalConfig.deleteLabel, data?.deleteButtonLabel),\n getConfigValue(this.globalConfig.cancelLabel, data?.cancelButtonLabel),\n data?.deleteRequiresConfirmDialog ?? true,\n data?.editRequiresConfirmDialog ?? false,\n data?.unsavedChangesRequireConfirmDialog ?? true,\n confirmDeleteDialogData,\n confirmEditDialogData,\n confirmUnsavedChangesDialogData,\n getConfigValue(this.globalConfig.actionsLabel, data?.actionsLabel),\n data?.actions ?? [],\n this.globalConfig\n );\n }\n}","import { DynamicStyleClasses } from '../components/table/table-data';\n\n/**\n * The default function to retrieve dynamic style classes.\n * Returns an empty array.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const defaultDynamicStyleClasses: DynamicStyleClasses<any> = () => [];","import { Inject } from '@angular/core';\n\nimport { CreateDataBuilder, CreateDataInternal } from './create-dialog/create-data.builder';\nimport { EditDataBuilder, EditDataInternal } from './edit-dialog/edit-data.builder';\nimport { BaseData, BaseTableAction, DisplayColumn, DynamicStyleClasses, MultiSelectAction, TableData } from './table-data';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType, EntityClassNewable, EntityServiceClassNewable } from '../../classes/entity.model';\nimport { defaultFalse } from '../../functions/default-false.function';\nimport { defaultDynamicStyleClasses } from '../../functions/default-style-classes.function';\nimport { defaultTrue } from '../../functions/default-true.function';\nimport { getConfigValue } from '../../functions/get-config-value.function';\nimport { isAsyncFunction } from '../../functions/is-async-function.function';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\n\n/**\n * The internal BaseTableAction. Sets default values.\n */\nexport class BaseTableActionInternal implements BaseTableAction {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'default' = 'default';\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n action: () => Promise<unknown>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n enabled: (() => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmDialog: (() => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDialogData: ConfirmDialogDataInternal;\n\n constructor(\n data: BaseTableAction,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.displayName = data.displayName;\n this.action = this.functionToAsync(data.action);\n this.enabled = data.enabled ?? defaultTrue;\n this.requireConfirmDialog = data.requireConfirmDialog ?? defaultFalse;\n this.confirmDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.confirmDialogData)\n .withDefault('text', globalConfig.confirmBaseActionText)\n .getResult();\n }\n\n private functionToAsync(originalFunction: (() => unknown) | (() => Promise<unknown>)): () => Promise<unknown> {\n if (isAsyncFunction(originalFunction)) {\n return originalFunction as () => Promise<unknown>;\n }\n\n /* istanbul ignore next */\n return () => new Promise<unknown>((resolve, reject) => {\n try {\n resolve(originalFunction());\n }\n catch (error) {\n // eslint-disable-next-line promise/no-multiple-resolved\n reject(error);\n }\n });\n }\n}\n\n/**\n * The internal BaseTableAction. Sets default values.\n */\nexport class MultiSelectActionInternal<EntityType extends BaseEntityType<EntityType>> implements MultiSelectAction<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'multi-select' = 'multi-select';\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n action: (selectedEntities: EntityType[]) => Promise<unknown>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n enabled: ((selectedEntities: EntityType[]) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n requireConfirmDialog: ((selectedEntities: EntityType[]) => boolean);\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmDialogData: ConfirmDialogDataInternal;\n\n constructor(\n data: MultiSelectAction<EntityType>,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.displayName = data.displayName;\n this.action = this.functionToAsync(data.action);\n this.enabled = data.enabled ?? ((entities: EntityType[]) => !!entities.length);\n this.requireConfirmDialog = data.requireConfirmDialog ?? defaultFalse;\n this.confirmDialogData = new ConfirmDialogDataBuilder(this.globalConfig, data.confirmDialogData)\n .withDefault('text', globalConfig.confirmBaseActionText)\n .getResult();\n }\n\n private functionToAsync(\n originalFunction: ((selectedEntities: EntityType[]) => unknown) | ((selectedEntities: EntityType[]) => Promise<unknown>)\n ): (selectedEntities: EntityType[]) => Promise<unknown> {\n if (isAsyncFunction(originalFunction)) {\n return originalFunction as (selectedEntities: EntityType[]) => Promise<unknown>;\n }\n\n /* istanbul ignore next */\n return (selectedEntities: EntityType[]) => new Promise<unknown>((resolve, reject) => {\n try {\n resolve(originalFunction(selectedEntities));\n }\n catch (error) {\n // eslint-disable-next-line promise/no-multiple-resolved\n reject(error);\n }\n });\n }\n}\n\n/**\n * The Internal Table Action. Sets default values.\n */\nexport type TableActionInternal<EntityType extends BaseEntityType<EntityType>> =\n BaseTableActionInternal | MultiSelectActionInternal<EntityType>;\n\n/**\n * The internal TableData. Requires all default values the user can leave out.\n */\nexport class TableDataInternal<EntityType extends BaseEntityType<EntityType>> implements TableData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n baseData: BaseDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createData: CreateDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editData: EditDataInternal<EntityType>;\n\n constructor(\n baseData: BaseDataInternal<EntityType>,\n createData: CreateDataInternal,\n editData: EditDataInternal<EntityType>\n ) {\n this.baseData = baseData;\n this.createData = createData;\n this.editData = editData;\n }\n}\n\n/**\n * The Builder for the table BaseData. Sets default values.\n */\nexport class BaseDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<BaseDataInternal<EntityType>, BaseData<EntityType>> {\n\n constructor(data: BaseData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: BaseData<EntityType>): BaseDataInternal<EntityType> {\n return new BaseDataInternal<EntityType>(data, this.globalConfig);\n }\n}\n\n/**\n * The internal TableData. Requires all default values the user can leave out.\n */\nexport class BaseDataInternal<EntityType extends BaseEntityType<EntityType>> implements BaseData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayColumns: DisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: EntityServiceClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n searchLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createButtonLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n defaultEdit: 'dialog' | 'page';\n // eslint-disable-next-line jsdoc/require-jsdoc\n defaultCreate: 'dialog' | 'page';\n // eslint-disable-next-line jsdoc/require-jsdoc\n searchString: (entity: EntityType) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowCreate: () => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowRead: (entity?: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowUpdate: (entity?: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDelete: (entity?: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tableActions: TableActionInternal<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n tableActionsLabel: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayLoadingSpinner: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowJsonImport: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n importActionData: Omit<BaseTableActionInternal, 'action'>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dynamicRowStyleClasses: DynamicStyleClasses<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass?: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n edit?: (entity: EntityType) => unknown;\n // eslint-disable-next-line jsdoc/require-jsdoc\n create?: (entity: EntityType) => unknown;\n\n constructor(\n data: BaseData<EntityType>,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) {\n this.title = data.title;\n this.displayColumns = data.displayColumns;\n this.EntityServiceClass = data.EntityServiceClass;\n this.EntityClass = data.EntityClass;\n this.searchLabel = getConfigValue(globalConfig.searchLabel, data.searchLabel);\n this.createButtonLabel = getConfigValue(globalConfig.createLabel, data.createButtonLabel);\n this.defaultEdit = getConfigValue(globalConfig.defaultEditMethod, data.defaultEdit);\n this.defaultCreate = getConfigValue(globalConfig.defaultCreateMethod, data.defaultCreate);\n this.searchString = data.searchString ?? defaultSearchFunction;\n // eslint-disable-next-line unicorn/prefer-ternary\n if (data.tableActions) {\n this.tableActions = data.tableActions.map(tA => {\n // eslint-disable-next-line stylistic/max-len\n return tA.type === 'default' ? new BaseTableActionInternal(tA, globalConfig) : new MultiSelectActionInternal(tA, globalConfig);\n });\n }\n else {\n this.tableActions = [];\n }\n this.tableActionsLabel = getConfigValue(globalConfig.actionsLabel, data.tableActionsLabel);\n this.displayLoadingSpinner = data.displayLoadingSpinner ?? true;\n this.allowJsonImport = data.allowJsonImport ?? false;\n this.importActionData = this.buildImportActionData(data.importActionData);\n this.dynamicRowStyleClasses = data.dynamicRowStyleClasses ?? defaultDynamicStyleClasses;\n this.edit = data.edit;\n this.create = data.create;\n this.allowCreate = this.allowDataToFunction(data.allowCreate);\n this.allowRead = this.allowDataToFunction(data.allowRead);\n this.allowUpdate = this.allowDataToFunction(data.allowUpdate);\n this.allowDelete = this.allowDataToFunction(data.allowDelete);\n }\n\n private buildImportActionData(\n importActionData?: Omit<BaseTableAction, 'action' | 'requireConfirmDialog' | 'type'>\n ): Omit<BaseTableActionInternal, 'action'> {\n importActionData = importActionData ?? {\n displayName: 'Import (JSON)',\n confirmDialogData: new ConfirmDialogDataBuilder(this.globalConfig)\n .withDefault('text', this.globalConfig.confirmImportJsonText)\n .getResult()\n };\n /* istanbul ignore next */\n const data: Omit<BaseTableActionInternal, 'action'> = {\n ...importActionData,\n enabled: importActionData.enabled ?? defaultTrue,\n requireConfirmDialog: defaultFalse,\n confirmDialogData: new ConfirmDialogDataBuilder(this.globalConfig, importActionData.confirmDialogData).getResult(),\n type: 'default'\n };\n return data;\n }\n\n private allowDataToFunction(value?: boolean | ((entity?: EntityType) => boolean)): ((entity?: EntityType) => boolean) {\n if (value == undefined) {\n return defaultTrue;\n }\n if (typeof value == 'boolean') {\n if (value) {\n return defaultTrue;\n }\n return defaultFalse;\n }\n return value;\n }\n}\n\n/**\n * The Builder for the complete TableData. Sets default values and validates user input.\n */\nexport class TableDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<TableDataInternal<EntityType>, TableData<EntityType>> {\n\n constructor(globalConfig: NgxGlobalDefaultValues, data: TableData<EntityType>) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: TableData<EntityType>): TableDataInternal<EntityType> {\n\n const createDialogData: CreateDataInternal = new CreateDataBuilder(this.globalConfig, data.createData).getResult();\n const editDialogData: EditDataInternal<EntityType> = new EditDataBuilder(this.globalConfig, data.editData).getResult();\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.baseData, this.globalConfig).getResult();\n return new TableDataInternal<EntityType>(\n baseData,\n createDialogData,\n editDialogData\n );\n }\n\n protected override validateInput(data: TableData<EntityType>): void {\n if (data.baseData.tableActions?.length && data.baseData.displayColumns.find(dp => dp.displayName === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved for the multi-select action functionality.\n Please choose a different name.`\n );\n }\n if (\n !data.baseData.EntityClass\n && (\n data.baseData.allowCreate !== false\n || data.baseData.allowRead !== false\n || data.baseData.allowUpdate !== false\n || data.baseData.allowDelete !== false\n )\n ) {\n throw new Error(\n `Missing required Input data \"EntityClass\".\n You can only omit this value if you can neither create, read, update or delete entities.`\n );\n }\n if (data.editData && data.baseData.defaultEdit == 'page') {\n throw new Error(\n `The configured edit data can't be used, as the entity gets edited on its own page.\n You need to provide values for the \"NGX_EDIT_DATA\", \"NGX_EDIT_DATA_ENTITY\" and \"NGX_EDIT_DATA_ENTITY_SERVICE\" injection keys\n on the route where the edit page is used.`\n );\n }\n }\n}\n\n/**\n * The default search function taken from googles mat table.\n * This will be used if no custom search function is provided by the configuration.\n *\n * It generates a string from an entity which is then used to compare it to the search input.\n * @param entity - An entity that is in the search.\n * @returns The generated string of the given entity used for comparison with the search input.\n */\nexport function defaultSearchFunction<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): string {\n const searchString: string = Object.keys(entity)\n .reduce((currentTerm: string, key: string) => {\n return `${currentTerm}${(entity as Record<string, unknown>)[key]}◬`;\n }, '')\n .toLowerCase();\n return searchString;\n}","import { inject } from '@angular/core';\n\nimport { HasManyDecoratorConfig } from './has-many-decorator.data';\nimport { BaseEntityType, EntityServiceClassNewable } from '../../classes/entity.model';\nimport { BaseDataBuilder, BaseDataInternal, TableDataBuilder, TableDataInternal } from '../../components/table/table-data.builder';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal HasManyDecoratorConfig. Sets default values.\n */\nexport class HasManyDecoratorConfigInternal<\n EntityType extends BaseEntityType<EntityType>,\n RelatedBaseEntityType extends BaseEntityType<RelatedBaseEntityType>\n> extends PropertyDecoratorConfigInternal<EntityType> implements HasManyDecoratorConfig<EntityType, RelatedBaseEntityType> {\n\n override omitForCreate: true;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tableData: TableDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n RelatedEntityServiceClass: EntityServiceClassNewable<RelatedBaseEntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createBaseUrl: (baseEntity: RelatedBaseEntityType, metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n readBaseUrl: (baseEntity: RelatedBaseEntityType, metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>) => string;\n\n constructor(data: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(data);\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.tableData.baseData, globalConfig)\n .withDefault('title', data.displayName)\n .getResult();\n this.tableData = new TableDataBuilder(globalConfig, data.tableData)\n .withDefault('baseData', baseData)\n .getResult();\n this.RelatedEntityServiceClass = data.RelatedEntityServiceClass;\n this.createBaseUrl = data.createBaseUrl ?? defaultCreateBaseUrl as (\n baseEntity: RelatedBaseEntityType,\n metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>\n ) => string;\n this.readBaseUrl = data.readBaseUrl ?? defaultCreateBaseUrl as (\n baseEntity: RelatedBaseEntityType,\n metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>\n ) => string;\n\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.omitForCreate = true;\n }\n}\n\n/* istanbul ignore next */\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction defaultCreateBaseUrl<EntityType extends BaseEntityType<EntityType>, RelatedBaseEntityType extends BaseEntityType<EntityType>>(\n baseEntity: RelatedBaseEntityType,\n metadata: HasManyDecoratorConfigInternal<EntityType, RelatedBaseEntityType>\n): string {\n\n // eslint-disable-next-line stylistic/max-len\n const baseEntityService: EntityService<RelatedBaseEntityType> = inject<EntityService<RelatedBaseEntityType>>(metadata.RelatedEntityServiceClass);\n const entityService: EntityService<EntityType> = inject<EntityService<EntityType>>(metadata.tableData.baseData.EntityServiceClass);\n const baseUrlSegments: string[] = entityService.baseUrl.split('/');\n return `${baseEntityService.baseUrl}/${baseEntity[baseEntityService.idKey]}/${baseUrlSegments[baseUrlSegments.length - 1]}`;\n}","import { InjectionToken } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\n/**\n * Provider for the default getValidationErrorMessage.\n */\nexport const NGX_GET_VALIDATION_ERROR_MESSAGE: InjectionToken<() => string> = new InjectionToken(\n 'Provider for the default getValidationErrorMessage.',\n {\n providedIn: 'root',\n factory: () => getValidationErrorMessage\n }\n);\n\n/**\n * Generates a default error message for most validation errors.\n * @param model - The ngModel to get the error from.\n * @returns The Validation Error Message to display.\n */\nfunction getValidationErrorMessage(model: NgModel): string {\n if (model.hasError('matDatepickerParse')) {\n return 'not a valid date';\n }\n else if (model.hasError('email')) {\n return 'not a valid email';\n }\n else if (model.hasError('minlength')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be at least ${model.getError('minlength').requiredLength} characters long`;\n }\n else if (model.hasError('maxlength')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be at most ${model.getError('maxlength').requiredLength} characters long`;\n }\n else if (model.hasError('min')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be equal or bigger than ${model.getError('min').min}`;\n }\n else if (model.hasError('max')) {\n // eslint-disable-next-line typescript/no-unsafe-member-access\n return `needs to be equal or smaller than ${model.getError('max').max}`;\n }\n else if (model.hasError('passwordMatch')) {\n return 'Passwords need to match!';\n }\n else if (model.hasError('required')) {\n return 'required';\n }\n else if (model.hasError('includedIn')) {\n return 'Needs to be one of the provided values';\n }\n // eslint-disable-next-line typescript/no-unsafe-member-access\n else if (model.hasError('pattern') && model.getError('pattern').requiredPattern === '^true$') {\n return 'needs to be selected';\n }\n else {\n return 'invalid input';\n }\n}","import { Component, ComponentRef, Input, OnInit, Type, ViewContainerRef } from '@angular/core';\n\nimport { NgxMatEntityBaseDisplayColumnValueComponent } from './base-display-column-value.component';\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The component that displays the custom display column value.\n */\n@Component({\n // eslint-disable-next-line angular/component-selector\n selector: 'display-column-value',\n templateUrl: './display-column-value.component.html',\n styleUrls: ['./display-column-value.component.scss'],\n standalone: true,\n imports: []\n})\nexport class DisplayColumnValueComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n /**\n * The entity for which the column should be displayed.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n /**\n * The class of the component that should be used inside the custom display column.\n */\n @Input({ required: true })\n ComponentClass!: Type<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;\n\n /**\n * The actual component that is used inside the custom display column.\n */\n component!: ComponentRef<NgxMatEntityBaseDisplayColumnValueComponent<EntityType>>;\n\n constructor(private readonly viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.component = this.viewContainerRef.createComponent(this.ComponentClass);\n this.component.instance.entity = this.entity;\n (this.component.location.nativeElement as HTMLElement).setAttribute('style', 'width: 100%');\n }\n}","","import { Directive, ElementRef, HostListener, Input, OnDestroy, Renderer2 } from '@angular/core';\n\n/**\n * The type of a global listener. Is a function that simply unsubscribes the listener.\n */\ntype Listener = () => void;\n\n/**\n * A directive that displays a tooltip on hover.\n */\n@Directive({\n selector: '[tooltip]',\n standalone: true\n})\nexport class TooltipDirective implements OnDestroy {\n\n /**\n * The content to display inside the tooltip.\n */\n @Input({ required: true })\n tooltip!: string;\n\n private tooltipElement?: HTMLElement;\n\n private closeListeners: Listener[] = [];\n\n private openedByClick: boolean = false;\n\n constructor(\n private readonly el: ElementRef,\n private readonly renderer: Renderer2\n ) {}\n\n /**\n * Toggles the tooltip.\n * @param event - The click event, is used to stop the propagation that would trigger the global click listener.\n */\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n event.stopPropagation();\n if (!this.tooltipElement) {\n this.showTooltip();\n this.registerCloseListeners();\n this.openedByClick = true;\n return;\n }\n if (!this.openedByClick) {\n this.openedByClick = true;\n return;\n }\n this.hideTooltip();\n this.removeCloseListeners();\n }\n\n /**\n * Shows the tooltip.\n */\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (!this.tooltipElement) {\n this.showTooltip();\n this.registerCloseListeners();\n return;\n }\n if (this.openedByClick) {\n return;\n }\n }\n\n /**\n * Hides the tooltip.\n */\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.openedByClick) {\n return;\n }\n this.hideTooltip();\n this.removeCloseListeners();\n }\n\n /**\n * Hides the tooltip.\n */\n @HostListener('window:resize')\n onResize(): void {\n this.hideTooltip();\n this.removeCloseListeners();\n }\n\n private showTooltip(): void {\n if (this.tooltipElement) {\n return;\n }\n this.tooltipElement = this.renderer.createElement('div') as HTMLElement;\n this.tooltipElement.innerHTML = this.tooltip;\n\n this.renderer.setStyle(this.tooltipElement, 'z-index', '1000');\n this.renderer.setStyle(this.tooltipElement, 'position', 'absolute');\n this.renderer.setStyle(this.tooltipElement, 'padding', '4px 8px 4px 8px');\n this.renderer.setStyle(this.tooltipElement, 'border-radius', '5px');\n this.renderer.setStyle(this.tooltipElement, 'background-color', '#616161');\n this.renderer.setStyle(this.tooltipElement, 'color', 'white');\n this.renderer.setStyle(this.tooltipElement, 'max-height', '30vh');\n this.renderer.setStyle(this.tooltipElement, 'overflow-y', 'scroll');\n this.renderer.appendChild(this.el.nativeElement, this.tooltipElement);\n\n const marginBottom: number = this.tooltipElement.clientHeight + (this.el.nativeElement as HTMLElement).clientHeight + 15;\n this.renderer.setStyle(this.tooltipElement, 'margin-bottom', `${marginBottom}px`);\n }\n\n private registerCloseListeners(): void {\n setTimeout(() => {\n this.closeListeners.push(\n this.getCloseListener('click'),\n this.getCloseListener('touchmove'),\n this.getCloseListener('resize')\n );\n }, 100);\n }\n\n private getCloseListener(event: string): Listener {\n return this.renderer.listen('document', event, () => {\n this.hideTooltip();\n this.removeCloseListeners();\n });\n }\n\n private hideTooltip(): void {\n if (this.tooltipElement) {\n this.renderer.removeChild(this.el.nativeElement, this.tooltipElement);\n this.tooltipElement = undefined;\n }\n }\n\n private removeCloseListeners(): void {\n for (const listener of this.closeListeners) {\n listener();\n }\n this.closeListeners = [];\n this.openedByClick = false;\n }\n\n ngOnDestroy(): void {\n this.removeCloseListeners();\n }\n}","import { Component, Input } from '@angular/core';\n\nimport { TooltipDirective } from '../../directives/tooltip.directive';\n\n/**\n * A component that displays an info-symbol and a tooltip when it is hovered/clicked.\n */\n@Component({\n selector: 'ngx-mat-entity-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n standalone: true,\n imports: [TooltipDirective]\n})\nexport class TooltipComponent {\n /**\n * What to display inside the tooltip.\n */\n @Input({ required: true })\n tooltipContent!: string;\n}","<div class=\"info\" [tooltip]=\"tooltipContent\">\n <i class=\"fas fa-info\"></i>\n</div>","import { SelectionModel } from '@angular/cdk/collections';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, Input, OnInit, Output, TemplateRef, ViewChild, inject, runInInjectionContext } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { ArrayDateInputComponent } from './array/array-date-input/array-date-input.component';\nimport { ArrayDateRangeInputComponent } from './array/array-date-range-input/array-date-range-input.component';\nimport { ArrayDateTimeInputComponent } from './array/array-date-time-input/array-date-time-input.component';\nimport { ArrayStringAutocompleteChipsComponent } from './array/array-string-autocomplete-chips/array-string-autocomplete-chips.component';\nimport { ArrayStringChipsInputComponent } from './array/array-string-chips-input/array-string-chips-input.component';\nimport { BooleanCheckboxInputComponent } from './boolean/boolean-checkbox-input/boolean-checkbox-input.component';\nimport { BooleanDropdownInputComponent } from './boolean/boolean-dropdown-input/boolean-dropdown-input.component';\nimport { BooleanToggleInputComponent } from './boolean/boolean-toggle-input/boolean-toggle-input.component';\nimport { CustomInputComponent } from './custom/custom.component';\nimport { DateInputComponent } from './date/date-input/date-input.component';\nimport { DateRangeInputComponent } from './date/date-range-input/date-range-input.component';\nimport { DateTimeInputComponent } from './date/date-time-input/date-time-input.component';\nimport { FileDefaultInputComponent } from './file/file-default-input/file-default-input.component';\nimport { FileImageInputComponent } from './file/file-image-input/file-image-input.component';\nimport { NumberDropdownInputComponent } from './number/number-dropdown-input/number-dropdown-input.component';\nimport { NumberInputComponent } from './number/number-input/number-input.component';\nimport { NumberSliderInputComponent } from './number/number-slider-input/number-slider-input.component';\nimport { ReferencesManyInputComponent } from './relations/references-many-input/references-many-input.component';\nimport { StringAutocompleteInputComponent } from './string/string-autocomplete-input/string-autocomplete-input.component';\nimport { StringDropdownInputComponent } from './string/string-dropdown-input/string-dropdown-input.component';\nimport { StringInputComponent } from './string/string-input/string-input.component';\nimport { StringPasswordInputComponent } from './string/string-password-input/string-password-input.component';\nimport { StringTextboxInputComponent } from './string/string-textbox-input/string-textbox-input.component';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { EditArrayItemDialogDataInternal, EntityArrayDecoratorConfigInternal } from '../../decorators/array/array-decorator-internal.data';\nimport { DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { DropdownValue } from '../../decorators/base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { HasManyDecoratorConfigInternal } from '../../decorators/has-many/has-many-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal, DropdownObjectDecoratorConfigInternal } from '../../decorators/object/object-decorator-internal.data';\nimport { ReferencesOneDecoratorConfigInternal } from '../../decorators/references-one/references-one-decorator-internal.data';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../encapsulation/reflect.utilities';\nimport { UUIDUtilities } from '../../encapsulation/uuid.utilities';\nimport { defaultFalse } from '../../functions/default-false.function';\nimport { NGX_GET_VALIDATION_ERROR_MESSAGE } from '../../functions/get-validation-error-message.function';\nimport { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { DateUtilities } from '../../utilities/date.utilities';\nimport { EntityTab, EntityUtilities } from '../../utilities/entity.utilities';\nimport { SelectionUtilities } from '../../utilities/selection.utilities';\nimport { ValidationError, ValidationUtilities } from '../../utilities/validation.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { CreateDataBuilder, CreateDataInternal } from '../table/create-dialog/create-data.builder';\nimport { DisplayColumnValueComponent } from '../table/display-column-value/display-column-value.component';\nimport { EditActionInternal } from '../table/edit-dialog/edit-data.builder';\nimport { DisplayColumn } from '../table/table-data';\nimport { BaseTableActionInternal, TableActionInternal } from '../table/table-data.builder';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n// TODO: 4 context where the tabs are not set by the form component: hasManyEdit, hasManyCreate, addArrayItem, editArrayItem\n/**\n * A form context that is used to fill an inline template.\n * This is used to go around the limitations of having everything in the same file due to circular dependencies.\n * The forms are used for object, hasMany, referencesMany and the dialogs.\n */\ntype FormContext<EntityType extends BaseEntityType<EntityType>> = {\n /**\n * The actual value. The $implicit is needed so that we don't need to specify a key when writing \"let-context\" in the html template.\n */\n $implicit: {\n /**\n * The entity to build the form for.\n */\n entity: EntityType,\n /**\n * The tabs to display.\n */\n tabs: EntityTab<EntityType>[],\n /**\n * Whether or not edit values should be omitted.\n */\n hideOmitForEdit?: boolean,\n /**\n * Whether or not create values should be omitted.\n */\n hideOmitForCreate?: boolean,\n /**\n * What happens when the input changes.\n */\n inputChangeEvent: () => void | Promise<void>,\n /**\n * Whether or not the input is readonly.\n */\n isReadOnly?: (property: EntityType, key: keyof EntityType) => boolean,\n /**\n * Whether or not the input is valid empty.\n */\n validEmpty?: () => boolean\n }\n};\n\n/**\n * The default input component. It gets the metadata of the property from the given @Input \"entity\" and @Input \"propertyKey\"\n * and displays the input field accordingly.\n *\n * You can also define a method that generates error-messages and if the input should be hidden when its metadata says\n * that it should be omitted for creating or updating.\n * The last part being mostly relevant if you want to use this component inside an ngFor.\n */\n@Component({\n selector: 'ngx-mat-entity-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n DisplayColumnValueComponent,\n CommonModule,\n MatTabsModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatDialogModule,\n MatBadgeModule,\n MatInputModule,\n MatMenuModule,\n MatPaginatorModule,\n MatProgressSpinnerModule,\n MatTableModule,\n MatCheckboxModule,\n MatButtonModule,\n TooltipComponent,\n StringInputComponent,\n StringTextboxInputComponent,\n StringAutocompleteInputComponent,\n StringDropdownInputComponent,\n StringPasswordInputComponent,\n BooleanCheckboxInputComponent,\n BooleanToggleInputComponent,\n BooleanDropdownInputComponent,\n NumberInputComponent,\n NumberDropdownInputComponent,\n NumberSliderInputComponent,\n ArrayDateInputComponent,\n ArrayDateRangeInputComponent,\n ArrayDateTimeInputComponent,\n ArrayStringAutocompleteChipsComponent,\n ArrayStringChipsInputComponent,\n DateInputComponent,\n DateRangeInputComponent,\n DateTimeInputComponent,\n FileDefaultInputComponent,\n FileImageInputComponent,\n ReferencesManyInputComponent,\n CustomInputComponent\n ]\n})\nexport class NgxMatEntityInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n /**\n * The entity on which the property exists. Used in conjunction with the \"propertyKey\"\n * to determine the property for which the input should be generated.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjunction with the \"entity\".\n */\n @Input({ required: true })\n propertyKey!: keyof EntityType;\n\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n @Input()\n getValidationErrorMessage?: (model: NgModel) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n internalGetValidationErrorMessage!: (model: NgModel) => string;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForCreate?: boolean;\n\n /**\n * Whether to hide a value if it is omitted for editing.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForEdit?: boolean;\n\n /**\n * Whether or not an empty value should be valid.\n * Is used internally for the object property.\n * @default undefined\n */\n @Input()\n validEmpty?: boolean; // TODO\n\n /**\n * Whether or not the input should be readonly.\n * In that case it is disabled, but most of the default styling is overwritten.\n * @default false\n */\n @Input()\n isReadOnly?: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n internalIsReadOnly!: boolean;\n\n /**\n * Emits when the input value has been changed.\n */\n @Output()\n readonly inputChangeEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * The type of the decorator for this input.\n */\n type!: DecoratorTypes;\n /**\n * The property metadata received from the decorator.\n */\n metadata!: PropertyDecoratorConfigInternal<unknown>;\n\n /**\n * The metadata of an object property.\n */\n metadataDefaultObject!: DefaultObjectDecoratorConfigInternal<EntityType>;\n /**\n * The form context for an object property.\n */\n objectFormContext!: FormContext<EntityType>;\n\n /**\n * The metadata of an dropdown object property.\n */\n metadataDropdownObject!: DropdownObjectDecoratorConfigInternal<EntityType>;\n /**\n * All possible dropdown values for the object property.\n */\n private objectDropdownValues: DropdownValue<EntityType | undefined>[] = [];\n /**\n * A unique input name for the references one property.\n */\n objectDropdownName!: string;\n /**\n * All currently shown dropdown values for the object property.\n */\n filteredObjectDropdownValues: DropdownValue<EntityType | undefined>[] = [];\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * The currently selected object as a drop down value.\n */\n get currentObjectDropdownValue(): DropdownValue<EntityType | undefined> | undefined {\n const value: DropdownValue<EntityType | undefined>[] = LodashUtilities.cloneDeep(this.objectDropdownValues ?? []);\n return value.find(v => LodashUtilities.isEqual(v.value, this.entity[this.propertyKey]));\n }\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * Whether or not the current object dropdown value should be shown in the dropdown.\n */\n get shouldDisplayCurrentObjectDropdownValue(): boolean {\n return !!this.currentObjectDropdownValue\n && !this.filteredObjectDropdownValues.find(v => LodashUtilities.isEqual(v.value, this.currentObjectDropdownValue?.value));\n }\n /**\n * A compareWith method for the select.\n * Uses bind.\n */\n compareObjectsBound: (value1?: EntityType, value2?: EntityType) => boolean = this.compareObjects.bind(this);\n\n @ViewChild('addArrayItemDialog')\n private readonly addArrayItemDialog!: TemplateRef<unknown>;\n private addArrayItemDialogRef!: MatDialogRef<unknown>;\n @ViewChild('editArrayItemDialog')\n private readonly editArrayItemDialog!: TemplateRef<unknown>;\n private editArrayItemDialogRef!: MatDialogRef<unknown>;\n /**\n * The metadata of an entity array property.\n */\n metadataEntityArray!: EntityArrayDecoratorConfigInternal<EntityType>;\n /**\n * The entity array property value.\n */\n entityArrayValues!: EntityType[];\n /**\n * The current array item to be added or updated.\n */\n arrayItem!: EntityType;\n /**\n * The array item before any changes have been made. Used to check if the form is dirty.\n */\n arrayItemPriorChanges!: EntityType;\n /**\n * The form context for adding an array item.\n */\n addArrayItemFormContext!: FormContext<EntityType>;\n /**\n * The form context for editing an array item.\n */\n editArrayItemFormContext!: FormContext<EntityType>;\n /**\n * The dataSource for the entity array.\n */\n entityArrayDataSource!: MatTableDataSource<EntityType>;\n /**\n * The selection for the entity array.\n */\n entityArraySelection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n /**\n * The columns to display in the entity array table.\n */\n entityArrayDisplayedColumns!: string[];\n /**\n * Whether or not the array item is valid.\n */\n isArrayItemValid: boolean = false;\n /**\n * Whether or not the array item is dirty.\n */\n isArrayItemDirty: boolean = false;\n /**\n * The index of the array item that is being edited.\n */\n private indexOfEditedArrayItem!: number;\n /**\n * Config for the dialog that adds a new array item.\n */\n addArrayItemDialogData!: CreateDataInternal;\n /**\n * The tabs to display inside the edit array item dialog.\n */\n editArrayItemDialogData!: EditArrayItemDialogDataInternal<EntityType>;\n /**\n * All validation errors for the array item.\n */\n arrayItemValidationErrors: ValidationError[] = [];\n /**\n * What to display inside the array item tooltip.\n */\n arrayItemTooltipContent: string = '';\n\n /**\n * Metadata of a has many property.\n */\n metadataHasMany!: HasManyDecoratorConfigInternal<EntityType, EntityType>;\n /**\n * Whether or not has many is currently loading.\n */\n hasManyIsLoading: boolean = true;\n /**\n * A setter for the has many paginator.\n * Is needed because the paginator is inside a switch case,\n * which means that at ngOnInit it can't be initialized.\n */\n @ViewChild(MatPaginator)\n set hasManyPaginator(paginator: MatPaginator) {\n if (!this.hasManyDataSource.paginator) {\n this.hasManyDataSource.paginator = paginator;\n }\n }\n /**\n * A setter for the has many sort.\n * Is needed because the sort is inside a switch case,\n * which means that at ngOnInit it can't be initialized.\n */\n @ViewChild(MatSort)\n private set hasManySort(sort: MatSort) {\n if (!this.hasManyDataSource.sort) {\n this.hasManyDataSource.sort = sort;\n }\n }\n @ViewChild('filter', { static: true })\n private readonly hasManyFilter!: string;\n /**\n * The columns of the has many table.\n */\n displayedHasManyColumns!: string[];\n /**\n * The data source of the has many table.\n */\n hasManyDataSource: MatTableDataSource<EntityType> = new MatTableDataSource();\n /**\n * The selection of the has many table.\n */\n hasManySelection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n /**\n * The has many import action.\n */\n hasManyImportAction!: BaseTableActionInternal;\n private hasManyEntityService!: EntityService<EntityType>;\n @ViewChild('createHasManyDialog')\n private readonly createHasManyDialog!: TemplateRef<unknown>;\n private createHasManyDialogRef!: MatDialogRef<unknown>;\n @ViewChild('editHasManyDialog')\n private readonly editHasManyDialog!: TemplateRef<unknown>;\n private editHasManyDialogRef!: MatDialogRef<unknown>;\n /**\n * A single has many entity.\n */\n hasManyEntity!: EntityType;\n /**\n * The single has many entity before any changes have been made. Is used to determine if the form is dirty.\n */\n hasManyEntityPriorChanges!: EntityType;\n /**\n * Whether or not the has many entity is valid.\n */\n isHasManyEntityValid: boolean = false;\n /**\n * All validation errors of the has many entity.\n */\n hasManyValidationErrors: ValidationError[] = [];\n /**\n * What to display inside the has many tooltip.\n */\n hasManyTooltipContent: string = '';\n /**\n * Whether or not the has many entity is dirty.\n */\n isHasManyEntityDirty: boolean = false;\n /**\n * Whether or not the current user is allowed to create a has many entity.\n */\n hasManyAllowCreate!: boolean;\n /**\n * The form context for creating an has many entity.\n */\n hasManyCreateFormContext!: FormContext<EntityType>;\n /**\n * The form context for editing an has many entity.\n */\n hasManyEditFormContext!: FormContext<EntityType>;\n private hasManyCreateBaseUrl!: string;\n\n /**\n * The metadata for a references one property.\n */\n metadataReferencesOne!: ReferencesOneDecoratorConfigInternal<EntityType>;\n /**\n * The values that can be possibly referenced.\n */\n private referencesOneAllReferencedEntities!: EntityType[];\n /**\n * The possible references one dropdown values.\n */\n private referencesOneDropdownValues!: DropdownValue<string>[];\n /**\n * The filtered dropdown values that get displayed in the references one dropdown input.\n */\n filteredReferencesOneDropdownValues!: DropdownValue<string>[];\n /**\n * A unique input name for the references one property.\n */\n referencesOneName!: string;\n /**\n * The form context for an object property.\n */\n referencesOneFormContext!: FormContext<EntityType>;\n\n /**\n * The enum Values for all the different DecoratorTypes.\n */\n readonly DecoratorTypes: typeof DecoratorTypes = DecoratorTypes;\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n /**\n * Contains Helper Functions for handling date properties.\n */\n DateUtilities: typeof DateUtilities = DateUtilities;\n /**\n * Provides functionality around material selections inside of tables.\n */\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * Gets the currently selected dropdown value for references one.\n * Is needed so that the dropdown value will still be displayed,\n * even when the filter method removes the value from the selectable dropdown values.\n */\n get currentReferencesOneDropdownValue(): DropdownValue<string> | undefined {\n return LodashUtilities.cloneDeep(this.referencesOneDropdownValues ?? [])\n .find(v => v.value === this.entity[this.propertyKey]);\n }\n\n // eslint-disable-next-line jsdoc/require-returns\n /**\n * Whether or not the currently selected references one value should be shown,\n * although it would have been filtered out by the search.\n */\n get shouldDisplayCurrentReferencesOneDropdownValue(): boolean {\n return !!this.currentReferencesOneDropdownValue\n && !this.filteredReferencesOneDropdownValues.find(v => v.value === this.currentReferencesOneDropdownValue?.value);\n }\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly injector: EnvironmentInjector,\n private readonly router: Router,\n @Inject(NGX_GET_VALIDATION_ERROR_MESSAGE)\n protected readonly defaultGetValidationErrorMessage: (model: NgModel) => string,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues,\n private readonly http: HttpClient\n ) {}\n\n /**\n * Checks if the input with the given key on the given property is readonly.\n * @param property - The property on which to check the input.\n * @param key - The key for the input to check.\n * @returns Whether or not the input is readonly.\n */\n isPropertyReadOnly(property: EntityType, key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n if (this.internalIsReadOnly || this.metadataDefaultObject?.isReadOnly(property)) {\n return true;\n }\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(property, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return metadata.isReadOnly(property);\n });\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entity - The entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entity: EntityType, displayColumn: DisplayColumn<EntityType>): unknown {\n return runInInjectionContext(this.injector, () => displayColumn.value(entity));\n }\n\n ngOnInit(): void {\n this.internalGetValidationErrorMessage = this.getValidationErrorMessage ?? this.defaultGetValidationErrorMessage;\n this.internalIsReadOnly = this.isReadOnly ?? false;\n\n const foundType: DecoratorTypes | undefined = EntityUtilities.getPropertyType(this.entity, this.propertyKey);\n if (foundType == undefined) {\n throw new Error(`No type was found for the key \"${String(this.propertyKey)}\"`);\n }\n this.type = foundType;\n if (this.validEmpty === true) {\n const currentMetadata: PropertyDecoratorConfigInternal<unknown> = ReflectUtilities.getMetadata(\n 'metadata',\n this.entity,\n this.propertyKey\n ) as PropertyDecoratorConfigInternal<unknown>;\n ReflectUtilities.defineMetadata('metadata', { ...currentMetadata, required: defaultFalse }, this.entity, this.propertyKey);\n }\n\n const foundMetadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(\n this.entity,\n this.propertyKey,\n this.type\n );\n if (!foundMetadata) {\n throw new Error(`No metadata was found for the key \"${String(this.propertyKey)}\"`);\n }\n this.metadata = foundMetadata;\n\n switch (this.type) {\n case DecoratorTypes.OBJECT_DROPDOWN:\n void this.initDropdownObjectInput();\n break;\n case DecoratorTypes.OBJECT:\n this.initObjectInput();\n break;\n case DecoratorTypes.ARRAY:\n this.initEntityArray();\n break;\n case DecoratorTypes.HAS_MANY:\n this.initHasMany();\n break;\n case DecoratorTypes.REFERENCES_ONE:\n void this.initReferencesOne();\n break;\n default:\n break;\n }\n }\n\n private async initReferencesOne(): Promise<void> {\n this.metadataReferencesOne = this.metadata as ReferencesOneDecoratorConfigInternal<EntityType>;\n this.referencesOneName = this.propertyKey.toString() + 'input' + UUIDUtilities.create();\n\n await runInInjectionContext(\n this.injector,\n async () => {\n this.referencesOneAllReferencedEntities = await this.metadataReferencesOne.getReferencedEntities();\n this.referencesOneDropdownValues = this.metadataReferencesOne.getDropdownValues(\n LodashUtilities.cloneDeep(this.referencesOneAllReferencedEntities)\n );\n this.filteredReferencesOneDropdownValues = LodashUtilities.cloneDeep(this.referencesOneDropdownValues);\n this.setReferencesOneObject();\n }\n );\n }\n\n /**\n * Filters the references one dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterReferencesOneValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredReferencesOneDropdownValues = LodashUtilities.cloneDeep(this.referencesOneDropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || option.value.toLowerCase().includes(filter);\n });\n }\n\n private initHasMany(): void {\n this.metadata = new HasManyDecoratorConfigInternal(\n this.metadata as HasManyDecoratorConfigInternal<EntityType, EntityType>,\n this.globalConfig\n );\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.propertyKey);\n this.metadataHasMany = this.metadata as HasManyDecoratorConfigInternal<EntityType, EntityType>;\n this.hasManyImportAction = new BaseTableActionInternal({\n ...this.metadataHasMany.tableData.baseData.importActionData,\n action: () => this.startImportJson()\n }, this.globalConfig);\n\n runInInjectionContext(this.injector, () => {\n this.hasManyAllowCreate = this.metadataHasMany.tableData.baseData.allowCreate();\n this.hasManyEntityService = inject<EntityService<EntityType>>(this.metadataHasMany.tableData.baseData.EntityServiceClass);\n this.hasManyCreateBaseUrl = this.metadataHasMany.createBaseUrl(this.entity, this.metadataHasMany);\n });\n\n const givenDisplayColumns: string[] = this.metadataHasMany.tableData.baseData.displayColumns.map((v) => v.displayName);\n // eslint-disable-next-line unicorn/prefer-ternary\n if (this.metadataHasMany.tableData.baseData.tableActions.filter(tA => tA.type === 'multi-select').length) {\n this.displayedHasManyColumns = ['select'].concat(givenDisplayColumns);\n }\n else {\n this.displayedHasManyColumns = givenDisplayColumns;\n }\n\n this.hasManyDataSource.sortingDataAccessor = (entity: EntityType, header: string) => {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.displayColumns\n .find((dp) => dp.displayName === header)\n ?.value(entity) as string;\n });\n };\n this.hasManyDataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr: string = this.metadataHasMany.tableData.baseData.searchString(entity);\n const formattedSearchString: string = searchStr.toLowerCase();\n const formattedFilterString: string = filter.toLowerCase();\n return formattedSearchString.includes(formattedFilterString);\n };\n this.hasManyDataSource.filter = this.hasManyFilter;\n\n this.hasManyEntityService.entitiesSubject.subscribe((entities) => {\n this.hasManyDataSource.data = entities;\n this.hasManySelection.clear();\n });\n void runInInjectionContext(this.injector, async () => {\n const readBaseUrl: string = this.metadataHasMany.readBaseUrl(this.entity, this.metadataHasMany);\n await this.hasManyEntityService.read(readBaseUrl);\n this.hasManyIsLoading = false;\n });\n }\n\n private initEntityArray(): void {\n this.metadata = new EntityArrayDecoratorConfigInternal(\n this.metadata as EntityArrayDecoratorConfigInternal<EntityType>,\n this.globalConfig\n );\n ReflectUtilities.defineMetadata('metadata', this.metadata, this.entity, this.propertyKey);\n this.metadataEntityArray = this.metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (this.entity[this.propertyKey] == undefined) {\n (this.entity[this.propertyKey] as EntityType[]) = [];\n }\n this.entityArrayValues = this.entity[this.propertyKey] as EntityType[];\n if (!this.metadataEntityArray.createInline && !this.metadataEntityArray.createDialogData) {\n this.metadataEntityArray.createDialogData = {\n title: 'Add'\n };\n }\n const givenDisplayColumns: string[] = this.metadataEntityArray.displayColumns.map((v) => v.displayName);\n if (givenDisplayColumns.find(s => s === 'select')) {\n throw new Error(\n `The name \"select\" for a display column is reserved.\n Please choose a different name.`\n );\n }\n this.entityArrayDisplayedColumns = this.internalIsReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.entityArrayDataSource = new MatTableDataSource();\n this.entityArrayDataSource.data = this.entityArrayValues;\n this.arrayItem = new this.metadataEntityArray.EntityClass();\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n EntityUtilities.setDefaultValues(this.arrayItem);\n\n this.addArrayItemFormContext = {\n $implicit: {\n entity: this.arrayItem,\n tabs: EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true),\n inputChangeEvent: () => {\n void this.checkIsArrayItemValid();\n this.addArrayItemFormContext.$implicit.tabs = EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true);\n },\n hideOmitForCreate: true\n }\n };\n this.addArrayItemDialogData = new CreateDataBuilder(this.globalConfig, this.metadataEntityArray.createDialogData)\n .withDefault('createButtonLabel', this.globalConfig.addLabel)\n .withDefault('title', this.globalConfig.addArrayItemTitle)\n .getResult();\n\n this.editArrayItemFormContext = {\n $implicit: {\n entity: this.arrayItem,\n tabs: EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true),\n isReadOnly: (property, key) => this.isPropertyReadOnly(property, key),\n inputChangeEvent: () => {\n void this.checkArrayItem();\n this.editArrayItemFormContext.$implicit.tabs = EntityUtilities.getEntityTabs(this.arrayItem, this.injector, true);\n },\n hideOmitForEdit: true\n }\n };\n this.editArrayItemDialogData = this.metadataEntityArray.editDialogData;\n }\n\n private async initDropdownObjectInput(): Promise<void> {\n this.metadataDropdownObject = this.metadata as DropdownObjectDecoratorConfigInternal<EntityType>;\n this.objectDropdownName = this.propertyKey.toString() + 'input' + UUIDUtilities.create();\n\n await runInInjectionContext(this.injector, async () => {\n this.objectDropdownValues = await this.metadataDropdownObject.dropdownValues(this.entity);\n this.filteredObjectDropdownValues = LodashUtilities.cloneDeep(this.objectDropdownValues);\n });\n }\n\n private initObjectInput(): void {\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfigInternal<EntityType>;\n const objectProperty: EntityType = this.entity[this.propertyKey] as EntityType;\n const objectPropertyTabs: EntityTab<EntityType>[] = EntityUtilities.getEntityTabs(\n objectProperty,\n this.injector,\n this.hideOmitForCreate,\n this.hideOmitForEdit,\n this.metadataDefaultObject.omit\n );\n this.objectFormContext = {\n $implicit: {\n entity: objectProperty,\n tabs: objectPropertyTabs,\n hideOmitForCreate: this.hideOmitForCreate,\n hideOmitForEdit: this.hideOmitForEdit,\n isReadOnly: (property, key) => this.isPropertyReadOnly(property, key),\n inputChangeEvent: () => this.emitChange(),\n validEmpty: () => !this.metadata.required(this.entity)\n }\n };\n }\n\n private startImportJson(): void {\n const input: HTMLInputElement = document.createElement('input');\n input.type = 'file';\n input.accept = 'application/json';\n input.onchange = async () => {\n if (input.files) {\n await this.importJson(input.files[0]);\n }\n };\n input.click();\n }\n\n private async importJson(file: File): Promise<void> {\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.hasManyImportAction.confirmDialogData)\n .withDefault('text', this.metadataHasMany.tableData.baseData.importActionData.confirmDialogData?.text)\n .withDefault('title', this.hasManyImportAction.displayName)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.hasManyEntityService.import(file);\n }\n }\n\n /**\n * Checks if two objects are equal. Is needed for the dropdown.\n * @param value1 - The first object to compare.\n * @param value2 - The second object to compare.\n * @returns Whether or not the objects are the same.\n */\n private compareObjects(value1?: EntityType, value2?: EntityType): boolean {\n const valueObject1: EntityType = new this.metadataDropdownObject.EntityClass(value1);\n const valueObject2: EntityType = new this.metadataDropdownObject.EntityClass(value2);\n return LodashUtilities.isEqual(valueObject1, valueObject2);\n }\n\n /**\n * Filters the dropdown values.\n * @param searchInput - The search input to filter for.\n */\n filterObjectDropdownValues(searchInput: string): void {\n const filter: string = searchInput.toLowerCase();\n this.filteredObjectDropdownValues = LodashUtilities.cloneDeep(this.objectDropdownValues).filter(option => {\n return option.displayName.toLowerCase().includes(filter) || JSON.stringify(option.value).toLowerCase()\n .includes(filter);\n });\n }\n\n /**\n * Sets the references one object using the input id.\n */\n setReferencesOneObject(): void {\n const foundEntity: EntityType | undefined = this.metadataReferencesOne.getEntityForId(\n this.entity[this.propertyKey] as string,\n this.referencesOneAllReferencedEntities\n );\n const referencesOneObject: EntityType = new this.metadataReferencesOne.EntityClass(foundEntity);\n const referencesOnePropertyTabs: EntityTab<EntityType>[] = EntityUtilities.getEntityTabs(referencesOneObject, this.injector);\n\n this.referencesOneFormContext = {\n $implicit: {\n entity: referencesOneObject,\n tabs: referencesOnePropertyTabs,\n hideOmitForCreate: this.hideOmitForCreate,\n hideOmitForEdit: this.hideOmitForEdit,\n isReadOnly: () => true,\n inputChangeEvent: () => this.emitChange(),\n validEmpty: () => !this.metadata.required(this.entity)\n }\n };\n\n this.emitChange();\n }\n\n /**\n * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.\n * @param entity - The entity that should be updated.\n * @param dCol - The display column that was clicked on.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n editHasManyEntity(entity: EntityType, dCol: DisplayColumn<EntityType>): void {\n if ((dCol.disableClick === true) || (!this.hasManyAllowUpdate(entity) && !this.hasManyAllowRead(entity))) {\n return;\n }\n if (!this.metadataHasMany.tableData.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.metadataHasMany.tableData.baseData.edit) {\n this.metadataHasMany.tableData.baseData.edit(new this.metadataHasMany.tableData.baseData.EntityClass(entity));\n return;\n }\n if (this.metadataHasMany.tableData.baseData.defaultEdit == 'page') {\n this.editHasManyDefaultPage(new this.metadataHasMany.tableData.baseData.EntityClass(entity));\n return;\n }\n void this.editHasManyDefaultDialog(new this.metadataHasMany.tableData.baseData.EntityClass(entity));\n }\n\n /**\n * Whether updating the provided entity from the has many property is allowed.\n * @param entity - A single value of the has many property that the user wants to edit.\n * @returns True when the user can edit the provided entity and false otherwise.\n */\n hasManyAllowUpdate(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.allowUpdate(entity);\n });\n }\n\n /**\n * Whether viewing the provided entity from the has many property is allowed.\n * @param entity - A single value of the has many property that the user wants to view.\n * @returns True when the user can view the provided entity and false otherwise.\n */\n hasManyAllowRead(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.allowRead(entity);\n });\n }\n\n /**\n * Whether deleting the provided entity from the has many property is allowed.\n * @param entity - A single value of the has many property that the user wants to delete.\n * @returns True when the user can delete the provided entity and false otherwise.\n */\n hasManyAllowDelete(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.metadataHasMany.tableData.baseData.allowDelete(entity);\n });\n }\n\n /**\n * Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).\n * @param action - The EditAction to check.\n * @returns Whether or not the Action can be used.\n */\n hasManyEditActionDisabled(action: EditActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => {\n return !action.enabled(this.hasManyEntityPriorChanges);\n });\n }\n\n /**\n * Runs the edit action on the entity.\n * @param action - The action to run.\n */\n async hasManyRunEditAction(action: EditActionInternal<EntityType>): Promise<void> {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.hasManyEntityPriorChanges);\n });\n\n if (!requireConfirmDialog) {\n await this.confirmHasManyRunEditAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmHasManyRunEditAction(action);\n }\n }\n\n private async confirmHasManyRunEditAction(action: EditActionInternal<EntityType>): Promise<void> {\n await runInInjectionContext(this.injector, async () => {\n await action.action(this.hasManyEntity, this.hasManyEntityPriorChanges);\n await this.checkHasManyEntity();\n });\n }\n\n private editHasManyDefaultPage(entity: EntityType): void {\n void this.router.navigate(['', this.hasManyEntityService.editBaseRoute, entity[this.hasManyEntityService.idKey]]);\n }\n\n private async editHasManyDefaultDialog(entity: EntityType): Promise<void> {\n this.hasManyEntity = LodashUtilities.cloneDeep(entity);\n this.hasManyEntityPriorChanges = LodashUtilities.cloneDeep(this.hasManyEntity);\n this.hasManyEditFormContext = {\n $implicit: {\n entity: this.hasManyEntity,\n hideOmitForEdit: true,\n isReadOnly: (property, key) => this.isPropertyReadOnly(property, key),\n inputChangeEvent: () => {\n void this.checkHasManyEntity();\n this.hasManyEditFormContext.$implicit.tabs = EntityUtilities.getEntityTabs(\n this.hasManyEntity,\n this.injector,\n false,\n true\n );\n },\n tabs: EntityUtilities.getEntityTabs(this.hasManyEntity, this.injector, false, true)\n }\n };\n await this.checkHasManyEntity();\n this.editHasManyDialogRef = this.dialog.open(\n this.editHasManyDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n const res: number = await firstValueFrom(this.editHasManyDialogRef.afterClosed()) as number;\n if (res === 0) {\n const data: EntityType[] = this.hasManyDataSource.data;\n // eslint-disable-next-line stylistic/max-len\n data[this.hasManyDataSource.data.findIndex((e) => e[this.hasManyEntityService.idKey] === entity[this.hasManyEntityService.idKey])] = entity;\n this.hasManyDataSource.data = data;\n this.hasManySelection.clear();\n }\n }\n\n /**\n * Tries to save the changes and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async dialogEditHasMany(): Promise<void> {\n if (this.internalIsReadOnly || !this.isHasManyEntityValid || !this.isHasManyEntityDirty) {\n return;\n }\n if (!this.metadataHasMany.tableData.editData.editRequiresConfirmDialog) {\n await this.dialogConfirmEditHasMany();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.metadataHasMany.tableData.editData.confirmEditDialogData)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.dialogConfirmEditHasMany();\n }\n }\n private async dialogConfirmEditHasMany(): Promise<void> {\n await this.hasManyEntityService.update(this.hasManyEntity, this.hasManyEntityPriorChanges);\n this.editHasManyDialogRef.close(1);\n this.emitChange();\n }\n\n /**\n * Tries to delete the entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async deleteHasManyEntity(): Promise<void> {\n if (!this.metadataHasMany.tableData.editData.deleteRequiresConfirmDialog) {\n await this.confirmDeleteHasManyEntity();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.metadataHasMany.tableData.editData.confirmDeleteDialogData)\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmDeleteHasManyEntity();\n }\n }\n\n private async confirmDeleteHasManyEntity(): Promise<void> {\n await this.hasManyEntityService.delete(this.hasManyEntityPriorChanges);\n this.editHasManyDialogRef.close(2);\n this.emitChange();\n }\n\n /**\n * Cancels the editing of the has many entity and closes the dialog.\n */\n dialogCancelEditHasMany(): void {\n EntityUtilities.resetChangesOnEntity(this.hasManyEntity, this.hasManyEntityPriorChanges);\n this.editHasManyDialogRef.close(0);\n }\n\n /**\n * Creates a new Entity. This either calls the create-Method provided by the user or uses a default create-dialog.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n createHasManyEntity(): void {\n void runInInjectionContext(this.injector, async () => {\n if (this.metadataHasMany.tableData.baseData.allowCreate()) {\n if (!this.metadataHasMany.tableData.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.metadataHasMany.tableData.baseData.create) {\n this.metadataHasMany.tableData.baseData.create(new this.metadataHasMany.tableData.baseData.EntityClass());\n return;\n }\n const entity: EntityType = new this.metadataHasMany.tableData.baseData.EntityClass();\n EntityUtilities.setDefaultValues(entity);\n if (this.metadataHasMany.tableData.baseData.defaultCreate == 'page') {\n this.createHasManyDefaultPage();\n return;\n }\n await this.createHasManyDefaultDialog(entity);\n }\n });\n }\n\n private createHasManyDefaultPage(): void {\n void this.router.navigateByUrl(this.hasManyEntityService.createBaseRoute);\n }\n\n private async createHasManyDefaultDialog(entity: EntityType): Promise<void> {\n this.hasManyEntity = entity;\n this.hasManyCreateFormContext = {\n $implicit: {\n entity: this.hasManyEntity,\n hideOmitForCreate: true,\n inputChangeEvent: () => {\n void this.checkIsHasManyEntityValid('create');\n this.hasManyCreateFormContext.$implicit.tabs = EntityUtilities.getEntityTabs(this.hasManyEntity, this.injector, true);\n },\n tabs: EntityUtilities.getEntityTabs(this.hasManyEntity, this.injector, true)\n }\n };\n await this.checkIsHasManyEntityValid('create');\n this.createHasManyDialogRef = this.dialog.open(\n this.createHasManyDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n }\n\n /**\n * Creates the has many entity over the dialog.\n */\n async dialogCreateHasMany(): Promise<void> {\n if (!this.isHasManyEntityValid) {\n return;\n }\n if (!this.metadataHasMany.tableData.createData.createRequiresConfirmDialog) {\n await this.dialogConfirmCreateHasMany();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.metadataHasMany.tableData.createData.confirmCreateDialogData)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.dialogConfirmCreateHasMany();\n }\n }\n private async dialogConfirmCreateHasMany(): Promise<void> {\n await this.hasManyEntityService.create(this.hasManyEntity, this.hasManyCreateBaseUrl);\n this.createHasManyDialogRef.close();\n this.emitChange();\n }\n\n /**\n * Cancels the creating of the has many entity and closes the dialog.\n */\n dialogCancelCreateHasMany(): void {\n this.createHasManyDialogRef.close();\n }\n\n /**\n * Runs the TableAction for all selected entries.\n * Also handles confirmation with an additional dial#og if configured.\n * @param action - The TableAction to run.\n */\n async runHasManyTableAction(action: TableActionInternal<EntityType>): Promise<void> {\n const requireConfirmDialog: boolean = runInInjectionContext(\n this.injector,\n () => action.requireConfirmDialog(this.hasManySelection.selected)\n );\n if (!requireConfirmDialog) {\n await this.confirmRunHasManyTableAction(action);\n return;\n }\n\n const defaultText: string[] = action.type === 'multi-select'\n ? this.globalConfig.confirmMultiSelectActionText(this.hasManySelection.selected)\n : this.globalConfig.confirmBaseActionText;\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, action.confirmDialogData)\n .withDefault('text', defaultText)\n .withDefault('title', action.displayName)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmRunHasManyTableAction(action);\n }\n }\n\n private async confirmRunHasManyTableAction(action: TableActionInternal<EntityType>): Promise<void> {\n await runInInjectionContext(this.injector, async () => {\n await action.action(this.hasManySelection.selected);\n this.emitChange();\n });\n }\n\n /**\n * Checks if an TableAction is disabled (e.g. Because no entries have been selected).\n * @param action - The TableAction to check.\n * @returns Whether or not the Action can be used.\n */\n hasManyTableActionDisabled(action: TableActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => {\n return !action.enabled(this.hasManySelection.selected);\n });\n }\n\n /**\n * Applies the search input to filter the table entries.\n * @param event - The keyup-event which contains the search-string of the user.\n */\n applyHasManyFilter(event: Event): void {\n const filterValue: string = (event.target as HTMLInputElement).value;\n this.hasManyDataSource.filter = filterValue.trim().toLowerCase();\n }\n\n /**\n * Checks if the entity is valid for updating and if it is dirty.\n */\n async checkHasManyEntity(): Promise<void> {\n await this.checkIsHasManyEntityValid('update');\n this.isHasManyEntityDirty = await EntityUtilities.isDirty(this.hasManyEntity, this.hasManyEntityPriorChanges, this.http);\n }\n\n /**\n * Checks if the entity is valid.\n * @param omit - Whether values omitted for create or update should be left out.\n */\n async checkIsHasManyEntityValid(omit: 'create' | 'update'): Promise<void> {\n this.hasManyValidationErrors = await ValidationUtilities.getEntityValidationErrors(this.hasManyEntity, this.injector, omit);\n\n this.hasManyTooltipContent = runInInjectionContext(\n this.injector,\n () => getValidationErrorsTooltipContent(this.hasManyValidationErrors)\n );\n this.isHasManyEntityValid = this.hasManyValidationErrors.length === 0;\n }\n\n /**\n * Checks whether the array item is valid and if the array item is dirty.\n */\n async checkArrayItem(): Promise<void> {\n await this.checkIsArrayItemValid();\n await this.checkIsArrayItemDirty();\n }\n\n /**\n * Checks if the array item is dirty.\n */\n async checkIsArrayItemDirty(): Promise<void> {\n this.isArrayItemDirty = await EntityUtilities.isDirty(this.arrayItem, this.arrayItemPriorChanges, this.http);\n }\n\n /**\n * Checks if the arrayItem is valid.\n */\n async checkIsArrayItemValid(): Promise<void> {\n this.arrayItemValidationErrors = await ValidationUtilities.getEntityValidationErrors(this.arrayItem, this.injector, 'create');\n\n this.arrayItemTooltipContent = runInInjectionContext(\n this.injector,\n () => getValidationErrorsTooltipContent(this.arrayItemValidationErrors)\n );\n this.isArrayItemValid = this.arrayItemValidationErrors.length === 0;\n }\n\n /**\n * Emits that a the value has been changed.\n */\n emitChange(): void {\n this.inputChangeEvent.emit();\n }\n\n /**\n * Tries to add an item to the entity array.\n * Does this either inline if the \"createInline\"-metadata is set to true\n * or in a separate dialog if it is set to false.\n */\n async addEntity(): Promise<void> {\n await this.checkIsArrayItemValid();\n if (!this.metadataEntityArray.createInline) {\n this.addArrayItemDialogRef = this.dialog.open(\n this.addArrayItemDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n return;\n }\n if (!this.metadataEntityArray.allowDuplicates) {\n for (const v of this.entityArrayValues) {\n if (await EntityUtilities.isEqual(this.arrayItem, v, this.metadata, this.metadataEntityArray.itemType, this.http)) {\n this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.metadataEntityArray.duplicatesErrorDialog,\n autoFocus: false,\n restoreFocus: false\n });\n return;\n }\n }\n }\n this.entityArrayValues.push(LodashUtilities.cloneDeep(this.arrayItem));\n this.entityArrayDataSource.data = this.entityArrayValues;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n EntityUtilities.setDefaultValues(this.arrayItem);\n await this.checkIsArrayItemValid();\n this.emitChange();\n }\n\n /**\n * Adds the array item defined in the dialog.\n */\n async addArrayItem(): Promise<void> {\n if (!this.isArrayItemValid) {\n return;\n }\n this.entityArrayValues.push(LodashUtilities.cloneDeep(this.arrayItem));\n this.entityArrayDataSource.data = this.entityArrayValues;\n\n await this.closeAddArrayItemDialog();\n }\n\n /**\n * Cancels adding the array item defined in the dialog.\n */\n async closeAddArrayItemDialog(): Promise<void> {\n this.addArrayItemDialogRef.close();\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n await this.checkIsArrayItemValid();\n this.emitChange();\n }\n\n /**\n * Edits an entity array item.\n * @param entity - The entity that has been clicked.\n * @param dCol - The display column that was clicked on.\n */\n async editArrayItem(entity: EntityType, dCol: DisplayColumn<EntityType>): Promise<void> {\n if (dCol.disableClick === true) {\n return;\n }\n this.indexOfEditedArrayItem = this.entityArrayValues.indexOf(entity);\n this.arrayItem = new this.metadataEntityArray.EntityClass(entity);\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n\n await this.checkArrayItem();\n\n this.editArrayItemDialogRef = this.dialog.open(\n this.editArrayItemDialog,\n {\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n }\n\n /**\n * Saves changes on the array item in the dialog.\n */\n saveArrayItem(): void {\n this.entityArrayValues[this.indexOfEditedArrayItem] = LodashUtilities.cloneDeep(this.arrayItem);\n this.entityArrayDataSource.data = this.entityArrayValues;\n\n void this.closeEditArrayItemDialog();\n }\n\n /**\n * Closes the edit array item dialog and resets changes.\n */\n async closeEditArrayItemDialog(): Promise<void> {\n this.editArrayItemDialogRef.close();\n this.arrayItem = new this.metadataEntityArray.EntityClass();\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n await this.checkArrayItem();\n this.emitChange();\n }\n\n /**\n * Removes all selected entries from the entity array.\n */\n removeFromEntityArray(): void {\n SelectionUtilities.remove(this.entityArraySelection, this.entityArrayValues, this.entityArrayDataSource);\n this.emitChange();\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n \n@if(!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)) {\n @switch (type) {\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.STRING) {\n <string-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-input>\n }\n @case (DecoratorTypes.STRING_TEXTBOX) {\n <string-textbox-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-textbox-input>\n }\n @case (DecoratorTypes.STRING_AUTOCOMPLETE) {\n <string-autocomplete-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-autocomplete-input>\n }\n @case (DecoratorTypes.STRING_DROPDOWN) {\n <string-dropdown-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-dropdown-input>\n }\n @case (DecoratorTypes.STRING_PASSWORD) {\n <string-password-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </string-password-input>\n }\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.BOOLEAN_CHECKBOX) {\n <boolean-checkbox-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </boolean-checkbox-input>\n }\n @case (DecoratorTypes.BOOLEAN_TOGGLE) {\n <boolean-toggle-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </boolean-toggle-input>\n }\n @case (DecoratorTypes.BOOLEAN_DROPDOWN) {\n <boolean-dropdown-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </boolean-dropdown-input>\n }\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.NUMBER) {\n <number-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </number-input>\n }\n @case (DecoratorTypes.NUMBER_DROPDOWN) {\n <number-dropdown-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </number-dropdown-input>\n }\n @case (DecoratorTypes.NUMBER_SLIDER) {\n <number-slider-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </number-slider-input>\n }\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.ARRAY_DATE) {\n <array-date-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-date-input>\n }\n @case (DecoratorTypes.ARRAY_DATE_TIME) {\n <array-date-time-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-date-time-input>\n }\n @case (DecoratorTypes.ARRAY_DATE_RANGE) {\n <array-date-range-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-date-range-input>\n }\n @case (DecoratorTypes.ARRAY_STRING_CHIPS) {\n <array-string-chips-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-string-chips-input>\n }\n @case (DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS) {\n <array-string-autocomplete-chips\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </array-string-autocomplete-chips>\n }\n <!-------------------------------------------->\n <!-------------------Dates-------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.DATE) {\n <date-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </date-input>\n }\n @case (DecoratorTypes.DATE_RANGE) {\n <date-range-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </date-range-input>\n }\n @case (DecoratorTypes.DATE_TIME) {\n <date-time-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </date-time-input>\n }\n <!-------------------------------------------->\n <!-------------------Files-------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.FILE_DEFAULT) {\n <file-default-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </file-default-input>\n }\n @case (DecoratorTypes.FILE_IMAGE) {\n <file-image-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </file-image-input>\n }\n <!-------------------------------------------->\n <!-------------- references many ------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.REFERENCES_MANY) {\n <references-many-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </references-many-input>\n }\n <!-------------------------------------------->\n <!-------------------Custom------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.CUSTOM) {\n <custom-input\n [entity]=\"entity\"\n [key]=\"propertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </custom-input>\n }\n <!-------------------------------------------->\n <!-------------------Object------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.OBJECT) {\n <b>{{metadataDefaultObject.displayName}}</b>\n <!-- iterates over the object properties -->\n <ng-container *ngTemplateOutlet=\"form; context: objectFormContext\"></ng-container>\n }\n <!-------------------------------------------->\n <!---------------Object Dropdown-------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.OBJECT_DROPDOWN) {\n <mat-form-field class=\"object-dropdown\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #model=\"ngModel\"\n [name]=\"objectDropdownName\"\n [required]=\"metadata.required(entity)\"\n [disabled]=\"internalIsReadOnly\"\n [compareWith]=\"compareObjectsBound\"\n [(ngModel)]=\"entity[propertyKey]\"\n (selectionChange)=\"emitChange()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterObjectDropdownValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n @if (!metadata.required(entity)) {\n <mat-option>-</mat-option>\n }\n @if (shouldDisplayCurrentObjectDropdownValue) {\n <mat-option [value]=\"currentObjectDropdownValue?.value\">{{currentObjectDropdownValue?.displayName}}</mat-option>\n }\n @for (value of filteredObjectDropdownValues; track $index) {\n <mat-option [value]=\"value.value\">{{value.displayName}}</mat-option>\n }\n </mat-select>\n <mat-error>{{internalGetValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n }\n <!-------------------------------------------->\n <!-------------- references one -------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.REFERENCES_ONE) {\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select #inputModel=\"ngModel\"\n [name]=\"referencesOneName\"\n [disabled]=\"internalIsReadOnly\"\n [required]=\"metadata.required(entity)\"\n [(ngModel)]=\"entity[propertyKey]\"\n (selectionChange)=\"setReferencesOneObject()\"\n (opened)=\"selectSearchInput.focus()\"\n >\n <mat-form-field class=\"select-search-input\">\n <!-- eslint-disable-next-line angular/no-any -->\n <input #selectSearchInput matInput (keyup)=\"filterReferencesOneValues($any($event.target).value)\">\n <i matSuffix class=\"fas fa-search\"></i>\n </mat-form-field>\n @if (!metadata.required(entity)) {\n <mat-option>-</mat-option>\n }\n @if (shouldDisplayCurrentReferencesOneDropdownValue) {\n <mat-option [value]=\"currentReferencesOneDropdownValue?.value\">{{currentReferencesOneDropdownValue?.displayName}}</mat-option>\n }\n @for (value of filteredReferencesOneDropdownValues; track $index) {\n <mat-option [value]=\"value.value\">{{value.displayName}}</mat-option>\n }\n </mat-select>\n <mat-error>{{internalGetValidationErrorMessage(inputModel)}}</mat-error>\n </mat-form-field>\n <!-- iterates over the references one properties -->\n @if (referencesOneFormContext) {\n <ng-container *ngTemplateOutlet=\"form; context: referencesOneFormContext\"></ng-container>\n }\n }\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.ARRAY) {\n <div class=\"entityArray\">\n <div class=\"mat-elevation-z8 elevation-container\">\n <div class=\"array-headline\">\n <b>{{metadataEntityArray.displayName}}</b>\n </div>\n @if (metadataEntityArray.createInline && !internalIsReadOnly && addArrayItemFormContext) {\n <ng-container *ngTemplateOutlet=\"form; context: addArrayItemFormContext\"></ng-container>\n }\n @if (!internalIsReadOnly) {\n <div class=\"buttons\">\n <button type=\"button\" mat-raised-button\n [disabled]=\"metadataEntityArray.createInline && !isArrayItemValid\"\n (click)=\"addEntity()\">\n {{metadataEntityArray.addButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button\n [disabled]=\"!entityArraySelection.selected.length\"\n (click)=\"removeFromEntityArray()\">\n {{metadataEntityArray.removeButtonLabel}}\n </button>\n </div>\n }\n <mat-table [dataSource]=\"entityArrayDataSource\">\n @if (!internalIsReadOnly) {\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [disabled]=\"!entityArrayDataSource.data.length\" [checked]=\"entityArraySelection.hasValue() && SelectionUtilities.isAllSelected(entityArraySelection, entityArrayDataSource)\"\n [indeterminate]=\"entityArraySelection.hasValue() && !SelectionUtilities.isAllSelected(entityArraySelection, entityArrayDataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(entityArraySelection, entityArrayDataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\">\n <mat-checkbox [checked]=\"entityArraySelection.isSelected(entity)\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? entityArraySelection.toggle(entity) : null\"></mat-checkbox>\n </mat-cell>\n </ng-container>\n }\n @for (dCol of metadataEntityArray.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" [class.enabled]=\"!dCol.disableClick\" (click)=\"editArrayItem(entity, dCol)\">\n @if (dCol.Component) {\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n }\n @else {\n {{getDisplayColumnValue(entity, dCol)}}\n }\n </mat-cell>\n </ng-container>\n }\n <mat-header-row *matHeaderRowDef=\"entityArrayDisplayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: entityArrayDisplayedColumns\"></mat-row>\n </mat-table>\n \n @if (metadataEntityArray.required(entity) && !entityArrayDataSource.data.length) {\n <div class=\"array-error\">{{metadataEntityArray.missingErrorMessage}}</div>\n }\n </div>\n </div>\n }\n <!-------------------------------------------->\n <!------------------ has many ---------------->\n <!-------------------------------------------->\n @case (DecoratorTypes.HAS_MANY) {\n <div class=\"hasMany\">\n <h2 class=\"title\">{{metadataHasMany.tableData.baseData.title}}</h2>\n <div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{metadataHasMany.tableData.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyHasManyFilter($event)\">\n </mat-form-field>\n @if (metadataHasMany.tableData.baseData.tableActions.length) {\n <div\n [class.col-lg-2]=\"hasManyAllowCreate\"\n [class.col-lg-4]=\"!hasManyAllowCreate\"\n [class.col-md-3]=\"hasManyAllowCreate\"\n [class.col-md-6]=\"!hasManyAllowCreate\"\n [class.col-sm-6]=\"hasManyAllowCreate\"\n [class.col-sm-12]=\"!hasManyAllowCreate\"\n >\n <button type=\"button\" class=\"actions-button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{metadataHasMany.tableData.baseData.tableActionsLabel}}\n </button>\n </div>\n }\n <mat-menu #menu=\"matMenu\">\n @if (metadataHasMany.tableData.baseData.allowJsonImport) {\n <button type=\"button\" mat-menu-item [disabled]=\"hasManyTableActionDisabled(hasManyImportAction)\" (click)=\"runHasManyTableAction(hasManyImportAction)\">\n {{hasManyImportAction.displayName}}\n </button>\n }\n @for (action of metadataHasMany.tableData.baseData.tableActions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"hasManyTableActionDisabled(action)\" (click)=\"runHasManyTableAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n @if (hasManyAllowCreate) {\n <div\n [class.col-lg-2]=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-lg-4]=\"!metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-md-3]=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-md-6]=\"!metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-sm-6]=\"metadataHasMany.tableData.baseData.tableActions.length\"\n [class.col-sm-12]=\"!metadataHasMany.tableData.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" mat-raised-button (click)=\"createHasManyEntity()\">\n {{metadataHasMany.tableData.baseData.createButtonLabel}}\n </button>\n </div>\n }\n </div>\n \n <div class=\"mat-elevation-z8 elevation-container\">\n <mat-table matSort [dataSource]=\"hasManyDataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [checked]=\"hasManySelection.hasValue() && SelectionUtilities.isAllSelected(hasManySelection, hasManyDataSource)\"\n [indeterminate]=\"hasManySelection.hasValue() && !SelectionUtilities.isAllSelected(hasManySelection, hasManyDataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(hasManySelection, hasManyDataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"enabled\">\n <mat-checkbox [checked]=\"hasManySelection.isSelected(entity)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? hasManySelection.toggle(entity) : null\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n \n @for (dCol of metadataHasMany.tableData.baseData.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\"\n [class.enabled]=\"!dCol.disableClick && (hasManyAllowUpdate(entity) || hasManyAllowRead(entity))\"\n (click)=\"editHasManyEntity(entity, dCol)\"\n >\n @if (dCol.Component) {\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n }\n @else {\n {{getDisplayColumnValue(entity, dCol)}}\n }\n </mat-cell>\n </ng-container>\n }\n <mat-header-row *matHeaderRowDef=\"displayedHasManyColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedHasManyColumns\"></mat-row>\n </mat-table>\n \n @if (hasManyIsLoading && metadataHasMany.tableData.baseData.displayLoadingSpinner) {\n <mat-spinner></mat-spinner>\n }\n <mat-paginator style=\"padding-top: 10px; padding-bottom: 10px;\" [length]=\"hasManyDataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n </div>\n </div>\n }\n \n @default {\n <div>ERROR: The type {{type}} is not known.</div>\n }\n }\n}\n\n\n\n\n<!--------------------------------------------------------->\n<!---------------------------Form-------------------------->\n<!--------------------------------------------------------->\n<ng-template #form let-context>\n <!-- eslint-disable angular/no-call-expression -->\n @if (context.tabs.length > 1) {\n <mat-tab-group preserveContent>\n @for (tab of context.tabs; track $index) {\n <mat-tab [label]=\"tab.tabName\">\n @for (row of tab.rows; track $index) {\n <div class=\"row\">\n @for (key of row.keys; track key) {\n <ngx-mat-entity-input\n [entity]=\"context.entity\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [validEmpty]=\"context.validEmpty?.()\"\n [isReadOnly]=\"context.isReadOnly?.(context.entity, key)\"\n [class]=\"EntityUtilities.getWidthClasses(context.entity, key)\"\n [hideOmitForEdit]=\"context.hideOmitForEdit\"\n [hideOmitForCreate]=\"context.hideOmitForCreate\"\n (inputChangeEvent)=\"context.inputChangeEvent()\"\n >\n </ngx-mat-entity-input>\n }\n </div>\n }\n </mat-tab>\n }\n </mat-tab-group>\n }\n @else {\n @if (!context.tabs.length) {\n <span class=\"no-entity-tabs\">\n ERROR: No Inputs. Did you correctly assign all values in the model constructor?\n </span>\n }\n @else {\n @for (row of context.tabs[0].rows; track $index) {\n <div class=\"row\">\n @for (key of row.keys; track key) {\n <ngx-mat-entity-input\n [entity]=\"context.entity\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [validEmpty]=\"context.validEmpty?.()\"\n [isReadOnly]=\"context.isReadOnly?.(context.entity, key)\"\n [class]=\"EntityUtilities.getWidthClasses(context.entity, key)\"\n [hideOmitForEdit]=\"context.hideOmitForEdit\"\n [hideOmitForCreate]=\"context.hideOmitForCreate\"\n (inputChangeEvent)=\"context.inputChangeEvent()\"\n >\n </ngx-mat-entity-input>\n }\n </div>\n }\n }\n }\n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Add Array Item Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #addArrayItemDialog>\n <div class=\"mat-dialog-title\">\n <div>{{addArrayItemDialogData.title}}</div>\n </div>\n\n <form>\n <mat-dialog-content>\n @if (addArrayItemFormContext) {\n <ng-container *ngTemplateOutlet=\"form; context: addArrayItemFormContext\"></ng-container>\n }\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isArrayItemValid\"\n [matBadge]=\"arrayItemValidationErrors.length\"\n [matBadgeHidden]=\"!arrayItemValidationErrors.length\"\n (click)=\"addArrayItem()\"\n >\n {{addArrayItemDialogData.createButtonLabel}}\n </button>\n @if (arrayItemValidationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"arrayItemTooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"closeAddArrayItemDialog()\">\n {{addArrayItemDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n\n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Edit Array Item Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #editArrayItemDialog>\n <div class=\"mat-dialog-title\">\n <div>{{editArrayItemDialogData.title(arrayItemPriorChanges)}}</div>\n </div>\n \n <form>\n <mat-dialog-content>\n @if (editArrayItemFormContext) {\n <ng-container *ngTemplateOutlet=\"form; context: editArrayItemFormContext\"></ng-container>\n }\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"internalIsReadOnly || !isArrayItemValid || !isArrayItemDirty\"\n [matBadge]=\"arrayItemValidationErrors.length\"\n [matBadgeHidden]=\"!arrayItemValidationErrors.length\"\n (click)=\"saveArrayItem()\"\n >\n {{editArrayItemDialogData.confirmButtonLabel}}\n </button>\n @if (arrayItemValidationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"arrayItemTooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"closeEditArrayItemDialog()\">\n {{editArrayItemDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Create Has Many Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #createHasManyDialog>\n <div class=\"mat-dialog-title\">\n <div>{{metadataHasMany.tableData.createData.title}}</div>\n </div>\n \n <form>\n <mat-dialog-content>\n @if (hasManyCreateFormContext) {\n <ng-container *ngTemplateOutlet=\"form; context: hasManyCreateFormContext\"></ng-container>\n }\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isHasManyEntityValid\"\n [matBadge]=\"hasManyValidationErrors.length\"\n [matBadgeHidden]=\"!hasManyValidationErrors.length\"\n (click)=\"dialogCreateHasMany()\"\n >\n {{metadataHasMany.tableData.createData.createButtonLabel}}\n </button>\n @if (hasManyValidationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"hasManyTooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"dialogCancelCreateHasMany()\">\n {{metadataHasMany.tableData.createData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n \n</ng-template>\n\n<!--------------------------------------------------------->\n<!--------------------Edit Has Many Dialog----------------->\n<!--------------------------------------------------------->\n<ng-template #editHasManyDialog>\n <div class=\"mat-dialog-title\">\n <div>{{metadataHasMany.tableData.editData.title(hasManyEntityPriorChanges)}}</div>\n\n <div class=\"actions-container\">\n @if (metadataHasMany.tableData.editData.actions.length) {\n <button type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{metadataHasMany.tableData.editData.actionsLabel}}\n </button>\n }\n <mat-menu #menu=\"matMenu\">\n @for (action of metadataHasMany.tableData.editData.actions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"hasManyEditActionDisabled(action)\" (click)=\"hasManyRunEditAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n \n @if (hasManyAllowDelete(hasManyEntity)) {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"deleteHasManyEntity()\">\n {{metadataHasMany.tableData.editData.deleteButtonLabel}}\n </button>\n }\n </div>\n </div>\n \n <form>\n <mat-dialog-content>\n @if (hasManyEditFormContext) {\n <ng-container *ngTemplateOutlet=\"form; context: hasManyEditFormContext\"></ng-container>\n }\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"internalIsReadOnly || !isHasManyEntityValid || !isHasManyEntityDirty\"\n [matBadge]=\"hasManyValidationErrors.length\"\n [matBadgeHidden]=\"!hasManyValidationErrors.length\"\n (click)=\"dialogEditHasMany()\"\n >\n {{metadataHasMany.tableData.editData.confirmButtonLabel}}\n </button>\n @if (hasManyValidationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"hasManyTooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"dialogCancelEditHasMany()\">\n {{metadataHasMany.tableData.editData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n</ng-template>","import { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, EventEmitter, Input, OnInit, Output, runInInjectionContext } from '@angular/core';\nimport { MatTabChangeEvent, MatTabsModule } from '@angular/material/tabs';\n\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { EntityTab, EntityUtilities } from '../../utilities/entity.utilities';\nimport { NgxMatEntityInputComponent } from '../input/input.component';\n\n/**\n * A form component based on the ngx-material-entity framework.\n */\n@Component({\n selector: 'ngx-mat-entity-form',\n templateUrl: './form.component.html',\n styleUrls: ['./form.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatTabsModule,\n NgxMatEntityInputComponent\n ]\n})\nexport class NgxMatEntityFormComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The entity that should be represented by the form.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n /**\n * The tabs to display.\n */\n entityTabs!: EntityTab<EntityType>[];\n\n /**\n * Whether or not the entity is readonly.\n * @default false\n */\n @Input()\n isEntityReadOnly: boolean = false;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForCreate?: boolean;\n\n /**\n * Whether to hide a value if it is omitted for editing.\n * Is used internally for the object property.\n * @default false\n */\n @Input()\n hideOmitForEdit?: boolean;\n\n /**\n * Additional keys that should be omitted.\n */\n @Input()\n additionalOmitKeys?: (keyof EntityType)[];\n\n /**\n * Fires whenever an input of the form changes.\n */\n @Output()\n readonly formChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Fires when the selected tab has been changed.\n */\n @Output()\n readonly selectedTabChange: EventEmitter<MatTabChangeEvent> = new EventEmitter<MatTabChangeEvent>();\n\n constructor(private readonly injector: EnvironmentInjector) { }\n\n ngOnInit(): void {\n this.entityTabs = EntityUtilities.getEntityTabs(\n this.entity,\n this.injector,\n this.hideOmitForCreate,\n this.hideOmitForEdit,\n this.additionalOmitKeys\n );\n }\n\n /**\n * Checks if the input with the given key is readonly.\n * @param key - The key for the input to check.\n * @returns Whether or not the input for the key is read only.\n */\n isReadOnly(key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.entity, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return this.isEntityReadOnly || metadata.isReadOnly(this.entity);\n });\n }\n\n /**\n * What happens when an input changes its value.\n * This refreshes the entity tabs to check if there are now different inputs to display and emits the form change.\n */\n inputChange(): void {\n this.entityTabs = EntityUtilities.getEntityTabs(\n this.entity,\n this.injector,\n this.hideOmitForCreate,\n this.hideOmitForEdit,\n this.additionalOmitKeys\n );\n this.formChange.emit();\n }\n}"," <!-- eslint-disable angular/no-call-expression -->\n@if (entityTabs.length > 1) {\n <mat-tab-group preserveContent (selectedTabChange)=\"selectedTabChange.emit()\">\n @for (tab of entityTabs; track $index) {\n <mat-tab [label]=\"tab.tabName\">\n @for (row of tab.rows; track $index) {\n <div class=\"row\">\n @for (key of row.keys; track key) {\n <ngx-mat-entity-input\n [entity]=\"entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [class]=\"EntityUtilities.getWidthClasses(entity, key)\"\n [isReadOnly]=\"isReadOnly(key)\"\n (inputChangeEvent)=\"inputChange()\"\n >\n </ngx-mat-entity-input>\n }\n </div>\n }\n </mat-tab>\n }\n </mat-tab-group>\n}\n@else {\n @if (!entityTabs.length) {\n <span class=\"no-entity-tabs\">\n ERROR: No Inputs. Did you correctly assign all values in the model constructor?\n </span>\n }\n @else {\n @for (row of entityTabs[0].rows; track $index) {\n <div class=\"row\">\n @for (key of row.keys; track key) {\n <ngx-mat-entity-input\n [entity]=\"entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [class]=\"EntityUtilities.getWidthClasses(entity, key)\"\n [isReadOnly]=\"isReadOnly(key)\"\n (inputChangeEvent)=\"formChange.emit()\"\n >\n </ngx-mat-entity-input>\n }\n </div>\n }\n }\n}","import { Location, NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, ElementRef, EnvironmentInjector, HostListener, Inject, InjectionToken, OnInit, Renderer2, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { firstValueFrom } from 'rxjs';\n\nimport { PageCreateDataBuilder, PageCreateDataInternal } from './page-create-data.builder';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { UnsavedChangesPage } from '../../services/unsaved-changes.guard';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../utilities/validation.utilities';\nimport { ConfirmDialogData } from '../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../form/form.component';\nimport { CreateEntityData } from '../table/create-dialog/create-entity-data';\nimport { CreateData } from '../table/table-data';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n/**\n * The data that needs to be provided for a route to be able to create a entity.\n */\n// eslint-disable-next-line stylistic/max-len\nexport type PageCreateData<EntityType extends BaseEntityType<EntityType>> = Omit<CreateEntityData<EntityType>, 'entity' | 'EntityServiceClass'> & {\n /**\n * Whether or not to display a loading spinner while the data for the page is loaded.\n * @default true\n */\n displayLoadingSpinner?: boolean,\n /**\n * The data of the default create page.\n */\n createData?: CreateData & {\n /**\n * The data for the dialog when the user tries to leave the site with unsaved changes.\n */\n confirmUnsavedChangesDialogData?: ConfirmDialogData,\n /**\n * Whether or not leaving with unsaved changes should require a confirm dialog.\n * @default true\n */\n unsavedChangesRequireConfirmDialog?: boolean\n }\n};\n\n/**\n * The entity service that needs to be provided in the providers array of the create page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_CREATE_DATA_ENTITY_SERVICE: InjectionToken<EntityService<any>> = new InjectionToken<EntityService<any>>(\n 'NGX_CREATE_DATA_ENTITY_SERVICE'\n);\n/**\n * The entity class that needs to be provided in the providers array of the create page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_CREATE_DATA_ENTITY: InjectionToken<EntityClassNewable<any>> = new InjectionToken<EntityClassNewable<any>>(\n 'NGX_CREATE_DATA_ENTITY'\n);\n/**\n * The configuration that needs to be provided in the providers array of the create page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_CREATE_DATA: InjectionToken<PageCreateData<any>> = new InjectionToken<PageCreateData<any>>('NGX_CREATE_DATA');\n\n/**\n * A generic page that allows you to create a specific entity.\n * For this to work you need to provide some data for the route.\n */\n@Component({\n selector: 'ngx-mat-entity-create-page',\n templateUrl: './create-page.component.html',\n styleUrls: ['./create-page.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityCreatePageComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit, UnsavedChangesPage {\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The entity to create.\n */\n entity!: EntityType;\n /**\n * The entity before any changes have been made.\n * This is used to determine if leaving the page is possible without interruption.\n */\n entityPriorChanges!: EntityType;\n\n /**\n * Configuration data for this component.\n */\n data!: PageCreateDataInternal<EntityType>;\n\n /**\n * All validation errors of the entity.\n */\n validationErrors!: ValidationError[];\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = false;\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n /**\n * Whether or not the page has been loaded.\n */\n isLoaded: boolean = false;\n\n private inConfirmNavigation: boolean = false;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n get hasUnsavedChanges(): boolean {\n return this.isEntityDirty && this.data.createData.unsavedChangesRequireConfirmDialog;\n }\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly location: Location,\n private readonly injector: EnvironmentInjector,\n @Inject(NGX_CREATE_DATA_ENTITY_SERVICE)\n readonly entityService: EntityService<EntityType>,\n @Inject(NGX_CREATE_DATA_ENTITY)\n private readonly EntityClass: EntityClassNewable<EntityType>,\n @Inject(NGX_CREATE_DATA)\n private readonly inputData: PageCreateData<EntityType>,\n private readonly http: HttpClient,\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) { }\n\n ngOnInit(): void {\n this.data = new PageCreateDataBuilder(this.inputData, this.globalConfig).getResult();\n if (this.data == undefined) {\n this.confirmNavigateBack();\n throw new Error(\n 'No create data was provided for \"NGX_CREATE_DATA\". You need to provide a value in your routes providers array.'\n );\n }\n\n this.entity = new this.EntityClass();\n EntityUtilities.setDefaultValues(this.entity);\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.entity);\n // eslint-disable-next-line promise/prefer-await-to-then\n void this.checkIsEntityValid().then(() => {\n this.isLoaded = true;\n setTimeout(() => this.checkOffset(), 1);\n // setTimeout(() => this.checkEntity(), 1);\n });\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n @HostListener('window:beforeunload')\n canDeactivate(): boolean {\n return !this.hasUnsavedChanges || this.inConfirmNavigation;\n }\n\n /**\n * Checks if the bottom row should be displayed as fixed.\n */\n @HostListener('window:scroll')\n checkOffset(): void {\n const scrollY: number = window.scrollY;\n const bottomRow: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row');\n const bottomRowContainer: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row-container');\n\n if (bottomRow && bottomRowContainer) {\n const bottomRowContainerOffset: number = bottomRowContainer.offsetTop;\n const windowHeight: number = window.innerHeight;\n\n if (scrollY + windowHeight >= bottomRowContainerOffset) {\n this.renderer.removeClass(bottomRow, 'fixed');\n }\n else {\n this.renderer.addClass(bottomRow, 'fixed');\n }\n }\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n await this.checkIsEntityValid();\n this.isEntityDirty = await EntityUtilities.isDirty(this.entity, this.entityPriorChanges, this.http);\n }\n\n private async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.entity, this.injector, 'create');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n }\n\n /**\n * Tries create the entity and navigate back afterwards.\n * Also handles the confirmation if required.\n */\n async create(): Promise<void> {\n if (!this.isEntityValid) {\n return;\n }\n if (!this.data.createData.createRequiresConfirmDialog) {\n await this.confirmCreate();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.createData.confirmCreateDialogData)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmCreate();\n }\n }\n\n private async confirmCreate(): Promise<void> {\n await this.entityService.create(this.entity);\n this.confirmNavigateBack();\n }\n\n /**\n * Tries to navigate back.\n */\n async navigateBack(): Promise<void> {\n if (!this.hasUnsavedChanges) {\n this.confirmNavigateBack();\n return;\n }\n\n const res: boolean = await this.openConfirmNavigationDialog();\n if (res) {\n this.confirmNavigateBack();\n }\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n async openConfirmNavigationDialog(): Promise<boolean> {\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.data.createData.confirmUnsavedChangesDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n return await firstValueFrom(dialogRef.afterClosed()) ?? false;\n }\n\n private confirmNavigateBack(): void {\n this.inConfirmNavigation = true;\n this.location.back();\n }\n\n /**\n * Checks if the input with the given key is readonly.\n * @param key - The key for the input to check.\n * @returns Whether or not the input for the key is read only.\n */\n isReadOnly(key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.entity, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return metadata.isReadOnly(this.entity);\n });\n }\n}","@if (!isLoaded && data.displayLoadingSpinner) {\n <div class=\"container\">\n <br>\n <mat-spinner></mat-spinner>\n <br>\n </div>\n}\n\n@if (isLoaded) {\n <div class=\"container\">\n <br>\n \n <!------------>\n <!-- Header -->\n <!------------>\n <div class=\"header\">\n <div class=\"cancel-container\">\n <button type=\"button\" mat-raised-button class=\"back-button\" tabindex=\"-1\" [class.unsavedChanges]=\"hasUnsavedChanges\" (click)=\"navigateBack()\">\n <i class=\"fas fa-chevron-left\"></i>\n {{data.createData.cancelButtonLabel}}\n @if (hasUnsavedChanges) {\n <i class=\"fas fa-warning\"></i>\n }\n </button>\n </div>\n </div>\n \n <h1>{{data.createData.title}}</h1>\n \n <!----------->\n <!-- Input -->\n <!----------->\n <form>\n <ngx-mat-entity-form [hideOmitForCreate]=\"true\" [entity]=\"entity\" (selectedTabChange)=\"checkOffset()\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n \n <div class=\"bottom-row-container\">\n <div class=\"bottom-row container\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"create()\"\n >\n {{data.createData.createButtonLabel}}\n </button>\n @if (validationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n </div>\n </form>\n \n <br>\n </div>\n}","import { EnvironmentProviders, Provider, Type } from '@angular/core';\nimport { DefaultExport, Route } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { UnsavedChangesGuard } from '../../services/unsaved-changes.guard';\n\n/**\n * The definition for a route to use with the \"NgxMatEntityEditPageComponent\".\n */\nexport interface EditDataRoute extends Route {\n // eslint-disable-next-line jsdoc/require-jsdoc, stylistic/max-len\n loadComponent: () => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>,\n // eslint-disable-next-line jsdoc/require-jsdoc\n providers: (Provider | EnvironmentProviders)[],\n // eslint-disable-next-line jsdoc/require-jsdoc\n title: string,\n // eslint-disable-next-line jsdoc/require-jsdoc\n path: string\n}\n\n/**\n * The default data for a edit route.\n */\nexport const defaultEditDataRoute: Omit<EditDataRoute, 'providers'> = {\n // eslint-disable-next-line promise/prefer-await-to-then\n loadComponent: () => import('./edit-page.component').then(m => m.NgxMatEntityEditPageComponent),\n title: 'Edit',\n path: 'entities:id',\n canDeactivate: [UnsavedChangesGuard]\n};","import { PageEditData } from './edit-page.component';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { defaultTrue } from '../../functions/default-true.function';\nimport { NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { EditDataBuilder, EditDataInternal } from '../table/edit-dialog/edit-data.builder';\nimport { EditEntityDataInternal } from '../table/edit-dialog/edit-entity.builder';\n\n// eslint-disable-next-line jsdoc/require-jsdoc, stylistic/max-len\nexport type PageEditDataInternal<EntityType extends BaseEntityType<EntityType>> = Omit<EditEntityDataInternal<EntityType>, 'entity' | 'EntityServiceClass'> & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayLoadingSpinner: boolean,\n // eslint-disable-next-line jsdoc/require-jsdoc\n editData: EditDataInternal<EntityType> & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n confirmUnsavedChangesDialogData: ConfirmDialogDataInternal,\n // eslint-disable-next-line jsdoc/require-jsdoc\n unsavedChangesRequireConfirmDialog: boolean\n }\n};\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport class PageEditDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<PageEditDataInternal<EntityType>, PageEditData<EntityType>> {\n\n constructor(data: PageEditData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: PageEditData<EntityType>): PageEditDataInternal<EntityType> {\n const editData: EditDataInternal<EntityType> = new EditDataBuilder(this.globalConfig, data.editData)\n .withDefault('cancelButtonLabel', this.globalConfig.backLabel)\n .getResult();\n\n // eslint-disable-next-line stylistic/max-len\n const confirmUnsavedChangesDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, data.editData?.confirmUnsavedChangesDialogData)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesLabel)\n .getResult();\n\n return {\n editData: {\n ...editData,\n confirmUnsavedChangesDialogData: confirmUnsavedChangesDialogData,\n unsavedChangesRequireConfirmDialog: data.editData?.unsavedChangesRequireConfirmDialog ?? true\n },\n allowUpdate: data.allowUpdate ?? defaultTrue,\n allowDelete: data.allowDelete ?? defaultTrue,\n displayLoadingSpinner: data.displayLoadingSpinner ?? true\n };\n }\n}","import { Location, NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, ElementRef, EnvironmentInjector, HostListener, Inject, InjectionToken, OnInit, Renderer2, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActivatedRoute } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { PageEditDataBuilder, PageEditDataInternal } from './page-edit-data.builder';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { UnsavedChangesPage } from '../../services/unsaved-changes.guard';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../utilities/validation.utilities';\nimport { ConfirmDialogData } from '../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../form/form.component';\nimport { EditActionInternal } from '../table/edit-dialog/edit-data.builder';\nimport { EditEntityData } from '../table/edit-dialog/edit-entity-data';\nimport { EditData } from '../table/table-data';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n/**\n * The data that needs to be provided for a route to be able to edit a entity.\n */\n// eslint-disable-next-line stylistic/max-len\nexport type PageEditData<EntityType extends BaseEntityType<EntityType>> = Omit<EditEntityData<EntityType>, 'entity' | 'EntityServiceClass'> & {\n /**\n * Whether or not to display a loading spinner while the entity for the page is loaded.\n * @default true\n */\n displayLoadingSpinner?: boolean,\n /**\n * The data of the default edit page.\n */\n editData?: EditData<EntityType> & {\n /**\n * The data for the dialog when the user tries to leave the site with unsaved changes.\n */\n confirmUnsavedChangesDialogData?: ConfirmDialogData,\n /**\n * Whether or not leaving with unsaved changes should require a confirm dialog.\n * @default true\n */\n unsavedChangesRequireConfirmDialog?: boolean\n }\n};\n\n/**\n * The entity service that needs to be provided in the providers array of the edit page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any, stylistic/max-len\nexport const NGX_EDIT_DATA_ENTITY_SERVICE: InjectionToken<EntityService<any>> = new InjectionToken<EntityService<any>>('NGX_EDIT_DATA_ENTITY_SERVICE');\n/**\n * The entity class that needs to be provided in the providers array of the edit page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any, stylistic/max-len\nexport const NGX_EDIT_DATA_ENTITY: InjectionToken<EntityClassNewable<any>> = new InjectionToken<EntityClassNewable<any>>('NGX_EDIT_DATA_ENTITY');\n/**\n * The configuration that needs to be provided in the providers array of the edit page route.\n */\n// eslint-disable-next-line typescript/no-explicit-any\nexport const NGX_EDIT_DATA: InjectionToken<PageEditData<any>> = new InjectionToken<PageEditData<any>>('NGX_EDIT_DATA');\n\n/**\n * A generic page that allows you to edit a specific entity.\n * For this to work you need to provide some data for the route.\n */\n@Component({\n selector: 'ngx-mat-entity-edit-page',\n templateUrl: './edit-page.component.html',\n styleUrls: ['./edit-page.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatMenuModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityEditPageComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit, UnsavedChangesPage {\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The entity that is being edited.\n */\n entity!: EntityType;\n /**\n * The entity before any changes have been made.\n */\n entityPriorChanges!: EntityType;\n\n /**\n * Configuration data for the component.\n */\n data!: PageEditDataInternal<EntityType>;\n\n /**\n * All validation errors of the entity.\n */\n validationErrors: ValidationError[] = [];\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = true;\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n /**\n * Whether or not the entity is readonly.\n */\n isEntityReadOnly!: boolean;\n /**\n * Whether or not the current user is allowed to delete the entity.\n */\n allowDelete!: boolean;\n\n /**\n * Whether or not the page has been loaded.\n */\n isLoaded: boolean = false;\n\n private inConfirmNavigation: boolean = false;\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n get hasUnsavedChanges(): boolean {\n return this.isEntityDirty && this.data.editData.unsavedChangesRequireConfirmDialog;\n }\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly location: Location,\n private readonly route: ActivatedRoute,\n private readonly injector: EnvironmentInjector,\n @Inject(NGX_EDIT_DATA_ENTITY_SERVICE)\n readonly entityService: EntityService<EntityType>,\n @Inject(NGX_EDIT_DATA_ENTITY)\n private readonly EntityClass: EntityClassNewable<EntityType>,\n @Inject(NGX_EDIT_DATA)\n private readonly inputData: PageEditData<EntityType>,\n private readonly http: HttpClient,\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n protected readonly globalConfig: NgxGlobalDefaultValues\n ) { }\n\n ngOnInit(): void {\n this.data = new PageEditDataBuilder(this.inputData, this.globalConfig).getResult();\n if (this.data == undefined) {\n this.confirmNavigateBack();\n throw new Error('No edit data was provided for \"NGX_EDIT_DATA\". You need to provide a value in your routes providers array.');\n }\n\n const id: EntityType[keyof EntityType] = this.route.snapshot.paramMap.get('id') as EntityType[keyof EntityType];\n // eslint-disable-next-line promise/prefer-await-to-then\n void this.entityService.findById(id).then(foundEntity => {\n if (foundEntity == undefined) {\n this.confirmNavigateBack();\n throw new Error(`Could not find entity with id ${id}`);\n }\n\n this.entity = new this.EntityClass(foundEntity);\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.entity);\n\n runInInjectionContext(this.injector, () => {\n this.isEntityReadOnly = !this.data.allowUpdate(this.entityPriorChanges);\n this.allowDelete = this.data.allowDelete(this.entityPriorChanges);\n });\n this.isLoaded = true;\n setTimeout(() => this.checkOffset(), 1);\n setTimeout(() => void this.checkIsEntityValid(), 1);\n });\n }\n\n /**\n * Checks if the bottom row should be displayed as fixed.\n */\n @HostListener('window:scroll')\n checkOffset(): void {\n const scrollY: number = window.scrollY;\n const bottomRow: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row');\n const bottomRowContainer: HTMLElement | null = (this.el.nativeElement as HTMLElement).querySelector('.bottom-row-container');\n\n if (bottomRow && bottomRowContainer) {\n const bottomRowContainerOffset: number = bottomRowContainer.offsetTop;\n const windowHeight: number = window.innerHeight;\n\n if (scrollY + windowHeight >= bottomRowContainerOffset) {\n this.renderer.removeClass(bottomRow, 'fixed');\n }\n else {\n this.renderer.addClass(bottomRow, 'fixed');\n }\n }\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n @HostListener('window:beforeunload')\n canDeactivate(): boolean {\n return !this.hasUnsavedChanges || this.inConfirmNavigation;\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n await this.checkIsEntityValid();\n this.isEntityDirty = await EntityUtilities.isDirty(this.entity, this.entityPriorChanges, this.http);\n }\n\n private async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.entity, this.injector, 'update');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n }\n\n /**\n * Tries to save the changes and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async edit(): Promise<void> {\n if (this.isEntityReadOnly || !this.isEntityValid || !this.isEntityDirty) {\n return;\n }\n if (!this.data.editData.editRequiresConfirmDialog) {\n await this.confirmEdit();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmEditDialogData)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmEdit();\n }\n }\n\n private async confirmEdit(): Promise<void> {\n await this.entityService.update(this.entity, this.entityPriorChanges);\n this.confirmNavigateBack();\n }\n\n /**\n * Tries to delete the entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async delete(): Promise<void> {\n if (!this.data.editData.deleteRequiresConfirmDialog) {\n await this.confirmDelete();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmDeleteDialogData)\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmDelete();\n }\n }\n\n private async confirmDelete(): Promise<void> {\n await this.entityService.delete(this.entityPriorChanges);\n this.confirmNavigateBack();\n }\n\n /**\n * Tries to navigate back.\n */\n async navigateBack(): Promise<void> {\n if (!this.hasUnsavedChanges) {\n this.confirmNavigateBack();\n return;\n }\n\n const res: boolean = await this.openConfirmNavigationDialog();\n if (res) {\n this.confirmNavigateBack();\n }\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n async openConfirmNavigationDialog(): Promise<boolean> {\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: this.data.editData.confirmUnsavedChangesDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n return await firstValueFrom(dialogRef.afterClosed()) ?? false;\n }\n\n private confirmNavigateBack(): void {\n this.inConfirmNavigation = true;\n EntityUtilities.resetChangesOnEntity(this.entity, this.entityPriorChanges);\n this.location.back();\n }\n\n /**\n * Runs the edit action on the entity.\n * @param action - The action to run.\n */\n async runEditAction(action: EditActionInternal<EntityType>): Promise<void> {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.entityPriorChanges);\n });\n\n if (!requireConfirmDialog) {\n await this.confirmRunEditAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmRunEditAction(action);\n }\n }\n\n private async confirmRunEditAction(action: EditActionInternal<EntityType>): Promise<void> {\n await runInInjectionContext(this.injector, async () => {\n await action.action(this.entity, this.entityPriorChanges);\n await this.checkEntity();\n });\n }\n\n /**\n * Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).\n * @param action - The EditAction to check.\n * @returns Whether or not the Action can be used.\n */\n editActionDisabled(action: EditActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => !action.enabled(this.entityPriorChanges));\n }\n}"," \n<!-- eslint-disable angular/no-call-expression -->\n@if (!isLoaded && data.displayLoadingSpinner) {\n <div class=\"container\">\n <br>\n <mat-spinner></mat-spinner>\n <br>\n </div>\n}\n\n@if (isLoaded) {\n <div class=\"container\">\n <br>\n \n <!------------>\n <!-- Header -->\n <!------------>\n <div class=\"header\">\n <div class=\"cancel-container\">\n <button type=\"button\" mat-raised-button class=\"back-button\" tabindex=\"-1\" [class.unsavedChanges]=\"hasUnsavedChanges\" (click)=\"navigateBack()\">\n <i class=\"fas fa-chevron-left\"></i>\n {{data.editData.cancelButtonLabel}}\n @if (hasUnsavedChanges) {\n <i class=\"fas fa-warning\"></i>\n }\n </button>\n </div>\n <div class=\"actions-container\">\n @if (data.editData.actions.length) {\n <button type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.editData.actionsLabel}}\n </button>\n }\n <mat-menu #menu=\"matMenu\">\n @for (action of data.editData.actions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"editActionDisabled(action)\" (click)=\"runEditAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n \n @if (allowDelete) {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"delete()\">\n {{data.editData.deleteButtonLabel}}\n </button>\n }\n </div>\n </div>\n \n <h1>{{data.editData.title(entityPriorChanges)}}</h1>\n \n <!----------->\n <!-- Input -->\n <!----------->\n <form>\n <ngx-mat-entity-form [hideOmitForEdit]=\"true\" [isEntityReadOnly]=\"isEntityReadOnly\" [entity]=\"entity\" (selectedTabChange)=\"checkOffset()\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n \n <div class=\"bottom-row-container\">\n <div class=\"bottom-row container\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"isEntityReadOnly || !isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"edit()\"\n >\n {{data.editData.confirmButtonLabel}}\n </button>\n @if (validationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n </div>\n </form>\n <br>\n </div>\n}","import { CreateDataBuilder, CreateDataInternal } from './create-data.builder';\nimport { CreateEntityData } from './create-entity-data';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType, EntityServiceClassNewable } from '../../../classes/entity.model';\nimport { NgxGlobalDefaultValues } from '../../../global-configuration-values';\n\n/**\n * The internal CreateEntityDialogData. Requires all default values the user can leave out.\n */\nexport class CreateEntityDataInternal<EntityType extends BaseEntityType<EntityType>> implements CreateEntityData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: EntityServiceClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createData: CreateDataInternal;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: EntityServiceClassNewable<EntityType>,\n createData: CreateDataInternal\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.createData = createData;\n }\n}\n\n/**\n * The Builder for the CreateEntityDialogData. Sets default values.\n */\nexport class CreateEntityDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<CreateEntityDataInternal<EntityType>, CreateEntityData<EntityType>> {\n\n constructor(data: CreateEntityData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: CreateEntityData<EntityType>): CreateEntityDataInternal<EntityType> {\n\n const createDialogData: CreateDataInternal = new CreateDataBuilder(this.globalConfig, data.createData).getResult();\n return new CreateEntityDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n createDialogData\n );\n }\n}","import { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, OnInit, Output, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { firstValueFrom } from 'rxjs';\n\nimport { CreateEntityData } from './create-entity-data';\nimport { CreateEntityDataInternal, CreateEntityDialogDataBuilder } from './create-entity-data.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { LodashUtilities } from '../../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { EntityService } from '../../../services/entity.service';\nimport { EntityUtilities } from '../../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../../utilities/validation.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../../form/form.component';\nimport { TooltipComponent } from '../../tooltip/tooltip.component';\n\n/**\n * The default dialog used to create new entities based on the configuration passed in the MAT_DIALOG_DATA \"inputData\".\n * Used by the ngx-mat-entity-table.\n *\n * It offers a lot of customization options which can be found in \"CreateEntityDialogData\".\n */\n@Component({\n selector: 'ngx-mat-entity-create-dialog',\n templateUrl: './create-entity-dialog.component.html',\n styleUrls: ['./create-entity-dialog.component.scss'],\n standalone: true,\n imports: [\n NgFor,\n NgIf,\n MatDialogModule,\n MatButtonModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityCreateDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n /**\n * Emits when the form is dirty.\n */\n @Output()\n readonly unsavedChanges: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The services that handles the entity.\n */\n entityService!: EntityService<EntityType>;\n\n /**\n * The internal configuration data.\n */\n data!: CreateEntityDataInternal<EntityType>;\n\n private entityPriorChanges!: EntityType;\n\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = false;\n /**\n * The validation errors of the entity.\n */\n validationErrors: ValidationError[] = [];\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: CreateEntityData<EntityType>,\n readonly dialogRef: MatDialogRef<NgxMatEntityCreateDialogComponent<EntityType>>,\n private readonly injector: EnvironmentInjector,\n private readonly dialog: MatDialog,\n private readonly http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n ngOnInit(): void {\n this.data = new CreateEntityDialogDataBuilder(this.inputData, this.globalConfig).getResult();\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.data.entity);\n this.dialogRef.disableClose = true;\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n setTimeout(() => void this.checkIsEntityValid(), 1);\n }\n\n /**\n * Checks if the entity is valid.\n */\n async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.data.entity, this.injector, 'create');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n this.isEntityDirty = await EntityUtilities.isDirty(this.data.entity, this.entityPriorChanges, this.http);\n this.unsavedChanges.emit(this.isEntityDirty);\n }\n\n /**\n * Tries add the new entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async create(): Promise<void> {\n if (!this.isEntityValid) {\n return;\n }\n if (!this.data.createData.createRequiresConfirmDialog) {\n await this.confirmCreate();\n return;\n }\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.createData.confirmCreateDialogData)\n .withDefault('text', this.globalConfig.confirmCreateText)\n .withDefault('confirmButtonLabel', this.globalConfig.createLabel)\n .withDefault('title', this.globalConfig.createLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmCreate();\n }\n }\n private async confirmCreate(): Promise<void> {\n await this.entityService.create(this.data.entity);\n this.dialogRef.close();\n }\n\n /**\n * Closes the dialog.\n */\n async cancel(): Promise<void> {\n if (!this.isEntityDirty || !this.data.createData.unsavedChangesRequireConfirmDialog) {\n this.confirmCancel();\n return;\n }\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.createData.confirmUnsavedChangesDialogData)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n this.confirmCancel();\n }\n }\n private confirmCancel(): void {\n this.dialogRef.close();\n }\n}","<div class=\"mat-dialog-title\">\n <div>{{data.createData.title}}</div>\n</div>\n\n<form>\n <mat-dialog-content>\n <ngx-mat-entity-form [hideOmitForCreate]=\"true\" [entity]=\"data.entity\" (formChange)=\"checkIsEntityValid()\">\n </ngx-mat-entity-form>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"!isEntityValid\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"create()\"\n >\n {{data.createData.createButtonLabel}}\n </button>\n @if (validationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.createData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n</form>\n","import * as js2xml from 'js2xmlparser';\n\n/**\n * Encapsulates functionality of the js2xml package.\n */\nexport abstract class Js2XmlUtilities {\n /**\n * Returns a XML string representation of the specified object using the specified options.\n * @param root - Name of the xml root element.\n * @param value - The json value to convert. Will be a child of root.\n * @param options - Additional options for the conversion.\n * @returns The converted xml string.\n */\n static parse(root: string, value: unknown, options?: js2xml.IOptions): string {\n return js2xml.parse(root, value, options);\n }\n}","import { Type, inject } from '@angular/core';\n\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { Js2XmlUtilities } from '../../encapsulation/js-2-xml.utilities';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { ReflectUtilities } from '../../encapsulation/reflect.utilities';\nimport { EntityService } from '../../services/entity.service';\nimport { FileUtilities } from '../../utilities/file.utilities';\n\nconst CSV_SEPARATOR: string = ';';\n\n/**\n * A multi select action that imports the data from a json file.\n * @param EntityServiceClass - The entity class that handles importing the file.\n */\nexport function importFromJsonMultiAction<EntityType extends BaseEntityType<EntityType>>(\n EntityServiceClass: Type<EntityService<EntityType>>\n): void {\n const service: EntityService<EntityType> = inject(EntityServiceClass);\n const htmlInput: HTMLInputElement = document.createElement('input');\n htmlInput.type = 'file';\n htmlInput.accept = 'application/json';\n htmlInput.multiple = false;\n htmlInput.onchange = () => {\n const file: File | undefined | null = htmlInput.files?.item(0);\n if (file != undefined) {\n void service.import(file);\n }\n };\n htmlInput.click();\n htmlInput.remove();\n}\n\n/**\n * A multi select action that exports the data as a json file.\n * @param selectedEntities - The selected entities to export.\n */\nexport function exportAsJsonMultiAction<EntityType extends BaseEntityType<EntityType>>(selectedEntities: EntityType[]): void {\n const blob: Blob = new Blob([JSON.stringify(selectedEntities, undefined, '\\t')], { type: '.json' });\n FileUtilities.downLoadBlob(blob, 'export.json');\n}\n\n/**\n * A multi select action that exports the data as a csv file.\n * Object values get stringified.\n * @param selectedEntities - The selected entities to export.\n */\nexport function exportAsCsvMultiAction<EntityType extends BaseEntityType<EntityType>>(selectedEntities: EntityType[]): void {\n const blob: Blob = new Blob([convertToCsv(selectedEntities, ReflectUtilities.ownKeys(selectedEntities[0]))], { type: '.csv' });\n FileUtilities.downLoadBlob(blob, 'export.csv');\n}\n\n/**\n * A multi select action that exports the data as a xml file.\n * Object values get stringified.\n * @param selectedEntities - The selected entities to export.\n */\nexport function exportAsXmlMultiAction<EntityType extends BaseEntityType<EntityType>>(selectedEntities: EntityType[]): void {\n const xmlString: string = Js2XmlUtilities.parse('values', selectedEntities);\n const blob: Blob = new Blob([xmlString], { type: '.xml' });\n FileUtilities.downLoadBlob(blob, 'export.xml');\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction convertToCsv<EntityType extends BaseEntityType<EntityType>>(array: EntityType[], headerList: (keyof EntityType)[]): string {\n const headerRow: string = headerList.join(CSV_SEPARATOR);\n let result: string = headerRow + '\\r\\n';\n for (const entity of array) {\n result += getLineForEntity<EntityType>(headerList, entity) + '\\r\\n';\n }\n return result;\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction getLineForEntity<EntityType extends BaseEntityType<EntityType>>(headerList: (keyof EntityType)[], entity: EntityType): string {\n let line: string = '';\n for (const head of headerList) {\n line = line += getLineForHeader<EntityType>(entity, head);\n }\n // eslint-disable-next-line sonar/no-ignored-return\n line.slice(0, line.length - 1);\n return line;\n}\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nfunction getLineForHeader<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, head: keyof EntityType): string {\n const value: unknown = entity[head];\n if (LodashUtilities.isObject(value)) {\n return `${JSON.stringify(value)}${CSV_SEPARATOR}`;\n }\n if (LodashUtilities.isArray(value) && LodashUtilities.isObject(value[0])) {\n return `${value.map(v => JSON.stringify(v))}${CSV_SEPARATOR}`;\n }\n return `${entity[head]}${CSV_SEPARATOR}`;\n}","import { Component, Input } from '@angular/core';\n\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The base component for custom display values.\n *\n * Contains the entity for which the component gets displayed.\n */\n// eslint-disable-next-line angular/prefer-standalone\n@Component({\n selector: 'ngx-mat-entity-base-display-column-value',\n template: ''\n})\nexport abstract class NgxMatEntityBaseDisplayColumnValueComponent<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The entity for which the component gets displayed.\n */\n @Input({ required: true })\n entity!: EntityType;\n}","import { EditDataBuilder, EditDataInternal } from './edit-data.builder';\nimport { EditEntityData } from './edit-entity-data';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType, EntityServiceClassNewable } from '../../../classes/entity.model';\nimport { defaultTrue } from '../../../functions/default-true.function';\nimport { NgxGlobalDefaultValues } from '../../../global-configuration-values';\n\n/**\n * The internal EditEntityData. Requires all default values the user can leave out.\n */\nexport class EditEntityDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditEntityData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: EntityServiceClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editData: EditDataInternal<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowUpdate: (entity: EntityType) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowDelete: (entity: EntityType) => boolean;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: EntityServiceClassNewable<EntityType>,\n editData: EditDataInternal<EntityType>,\n allowUpdate: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.editData = editData;\n this.allowDelete = allowDelete;\n this.allowUpdate = allowUpdate;\n }\n}\n\n/**\n * The Builder for the EditEntityData. Sets default values.\n */\nexport class EditEntityDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditEntityDataInternal<EntityType>, EditEntityData<EntityType>> {\n\n constructor(data: EditEntityData<EntityType>, globalConfig: NgxGlobalDefaultValues) {\n super(globalConfig, data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: EditEntityData<EntityType>): EditEntityDataInternal<EntityType> {\n const editDialogData: EditDataInternal<EntityType> = new EditDataBuilder(this.globalConfig, data.editData).getResult();\n return new EditEntityDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n editDialogData,\n data.allowUpdate ?? defaultTrue,\n data.allowDelete ?? defaultTrue\n );\n }\n}","import { NgFor, NgIf } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, OnInit, Output, runInInjectionContext } from '@angular/core';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { firstValueFrom } from 'rxjs';\n\nimport { EditActionInternal } from './edit-data.builder';\nimport { EditEntityData } from './edit-entity-data';\nimport { EditEntityDataBuilder, EditEntityDataInternal } from './edit-entity.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../../../decorators/base/property-decorator-internal.data';\nimport { LodashUtilities } from '../../../encapsulation/lodash.utilities';\nimport { getValidationErrorsTooltipContent } from '../../../functions/get-validation-errors-tooltip-content.function.ts';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../../global-configuration-values';\nimport { EntityService } from '../../../services/entity.service';\nimport { EntityTab, EntityUtilities } from '../../../utilities/entity.utilities';\nimport { ValidationError, ValidationUtilities } from '../../../utilities/validation.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { NgxMatEntityFormComponent } from '../../form/form.component';\nimport { TooltipComponent } from '../../tooltip/tooltip.component';\n\n/**\n * The default dialog used to edit an existing entity based on the configuration passed in the MAT_DIALOG_DATA \"inputData\".\n * Used by the ngx-mat-entity-table.\n *\n * It offers a lot of customization options which can be found in \"EditEntityDialogData\".\n */\n@Component({\n selector: 'ngx-mat-entity-edit-dialog',\n templateUrl: './edit-entity-dialog.component.html',\n styleUrls: ['./edit-entity-dialog.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatDialogModule,\n MatButtonModule,\n NgxMatEntityConfirmDialogComponent,\n MatMenuModule,\n MatBadgeModule,\n TooltipComponent,\n NgxMatEntityFormComponent\n ]\n})\nexport class NgxMatEntityEditDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n /**\n * Emits when the form is dirty.\n */\n @Output()\n readonly unsavedChanges: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Contains HelperMethods around handling Entities and their property-metadata.\n */\n EntityUtilities: typeof EntityUtilities = EntityUtilities;\n\n /**\n * The tabs of the dialog.\n */\n entityTabs!: EntityTab<EntityType>[];\n\n /**\n * The service of the provided entity.\n */\n entityService!: EntityService<EntityType>;\n\n /**\n * The entity before any changes have been applied.\n */\n entityPriorChanges!: EntityType;\n\n /**\n * The internal configuration data.\n */\n data!: EditEntityDataInternal<EntityType>;\n\n /**\n * Whether or not the entity is valid.\n */\n isEntityValid: boolean = true;\n /**\n * Whether or not the entity is dirty.\n */\n isEntityDirty: boolean = false;\n /**\n * The validation errors of the entity.\n */\n validationErrors: ValidationError[] = [];\n /**\n * What to display inside the tooltip.\n */\n tooltipContent: string = '';\n\n /**\n * Whether or not the entity is readonly.\n */\n isEntityReadOnly!: boolean;\n /**\n * Whether or not deleting the entity is allowed for the current user.\n */\n allowDelete!: boolean;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: EditEntityData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityEditDialogComponent<EntityType>>,\n private readonly injector: EnvironmentInjector,\n private readonly dialog: MatDialog,\n private readonly http: HttpClient,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n ngOnInit(): void {\n this.data = new EditEntityDataBuilder(this.inputData, this.globalConfig).getResult();\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.data.entity);\n runInInjectionContext(this.injector, () => {\n this.isEntityReadOnly = !this.data.allowUpdate(this.entityPriorChanges);\n this.allowDelete = this.data.allowDelete(this.entityPriorChanges);\n });\n this.dialogRef.disableClose = true;\n this.entityTabs = EntityUtilities.getEntityTabs(this.data.entity, this.injector, false, true);\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n setTimeout(() => void this.checkIsEntityValid(), 1);\n }\n\n /**\n * Checks if the input with the given key is readonly.\n * @param key - The key for the input to check.\n * @returns Whether or not the input for the key is read only.\n */\n isReadOnly(key: keyof EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n // eslint-disable-next-line stylistic/max-len\n const metadata: PropertyDecoratorConfigInternal<unknown> | undefined = EntityUtilities.getPropertyMetadata(this.data.entity, key);\n if (!metadata) {\n throw new Error(`No metadata was found for the key \"${String(key)}\"`);\n }\n return this.isEntityReadOnly || metadata.isReadOnly(this.data.entity);\n });\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n await this.checkIsEntityValid();\n this.isEntityDirty = await EntityUtilities.isDirty(this.data.entity, this.entityPriorChanges, this.http);\n this.unsavedChanges.emit(this.isEntityDirty);\n }\n\n private async checkIsEntityValid(): Promise<void> {\n this.validationErrors = await ValidationUtilities.getEntityValidationErrors(this.data.entity, this.injector, 'update');\n this.tooltipContent = runInInjectionContext(this.injector, () => getValidationErrorsTooltipContent(this.validationErrors));\n this.isEntityValid = this.validationErrors.length === 0;\n }\n\n /**\n * Tries to save the changes and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async edit(): Promise<void> {\n if (this.isEntityReadOnly || !this.isEntityValid || !this.isEntityDirty) {\n return;\n }\n if (!this.data.editData.editRequiresConfirmDialog) {\n await this.confirmEdit();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmEditDialogData)\n .withDefault('text', this.globalConfig.confirmSaveText)\n .withDefault('confirmButtonLabel', this.globalConfig.saveLabel)\n .withDefault('title', this.globalConfig.editLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmEdit();\n }\n }\n\n private async confirmEdit(): Promise<void> {\n await this.entityService.update(this.data.entity, this.entityPriorChanges);\n this.dialogRef.close(1);\n }\n\n /**\n * Tries to delete the entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n async delete(): Promise<void> {\n if (!this.data.editData.deleteRequiresConfirmDialog) {\n await this.confirmDelete();\n return;\n }\n\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmDeleteDialogData)\n .withDefault('text', this.globalConfig.confirmDeleteText)\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', this.globalConfig.deleteLabel)\n .withDefault('title', this.globalConfig.deleteLabel)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmDelete();\n }\n }\n\n private async confirmDelete(): Promise<void> {\n await this.entityService.delete(this.entityPriorChanges);\n this.dialogRef.close(2);\n }\n\n /**\n * Closes the dialog.\n */\n async cancel(): Promise<void> {\n if (!this.isEntityDirty || !this.data.editData.unsavedChangesRequireConfirmDialog) {\n this.confirmCancel();\n return;\n }\n // eslint-disable-next-line stylistic/max-len\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.data.editData.confirmUnsavedChangesDialogData)\n .withDefault('text', this.globalConfig.confirmUnsavedChangesDialogText)\n .withDefault('confirmButtonLabel', this.globalConfig.confirmUnsavedChangesDialogLabel)\n .withDefault('title', this.globalConfig.confirmUnsavedChangesTitle)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n this.confirmCancel();\n }\n }\n private confirmCancel(): void {\n EntityUtilities.resetChangesOnEntity(this.data.entity, this.entityPriorChanges);\n this.dialogRef.close(0);\n }\n\n /**\n * Runs the edit action on the entity.\n * @param action - The action to run.\n */\n async runEditAction(action: EditActionInternal<EntityType>): Promise<void> {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.entityPriorChanges);\n });\n\n if (!requireConfirmDialog) {\n await this.confirmRunEditAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmRunEditAction(action);\n }\n }\n\n private async confirmRunEditAction(action: EditActionInternal<EntityType>): Promise<void> {\n await runInInjectionContext(this.injector, async () => {\n await action.action(this.data.entity, this.entityPriorChanges);\n await this.checkEntity();\n });\n }\n\n /**\n * Checks if an EditAction is disabled (e.g. Because the current entry doesn't fullfil the requirements).\n * @param action - The EditAction to check.\n * @returns Whether or not the Action can be used.\n */\n editActionDisabled(action: EditActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => !action.enabled(this.entityPriorChanges));\n }\n}","<!-- eslint-disable angular/no-call-expression -->\n<div class=\"mat-dialog-title\">\n <div>{{data.editData.title(entityPriorChanges)}}</div>\n\n <div class=\"actions-container\">\n @if (data.editData.actions.length) {\n <button type=\"button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.editData.actionsLabel}}\n </button>\n }\n <mat-menu #menu=\"matMenu\">\n @for (action of data.editData.actions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"editActionDisabled(action)\" (click)=\"runEditAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n \n @if (allowDelete) {\n <button type=\"button\" mat-raised-button color=\"warn\" class=\"delete-button\" tabindex=\"-1\" (click)=\"delete()\">\n {{data.editData.deleteButtonLabel}}\n </button>\n }\n </div>\n</div>\n\n<form>\n <mat-dialog-content>\n <ngx-mat-entity-form [hideOmitForEdit]=\"true\" [isEntityReadOnly]=\"isEntityReadOnly\" [entity]=\"data.entity\" (formChange)=\"checkEntity()\">\n </ngx-mat-entity-form>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <div class=\"d-flex align-items-center gap-3\" style=\"margin-top: 10px;\">\n <button type=\"submit\" mat-raised-button matBadgeColor=\"warn\"\n [disabled]=\"isEntityReadOnly || !isEntityValid || !isEntityDirty\"\n [matBadge]=\"validationErrors.length\"\n [matBadgeHidden]=\"!validationErrors.length\"\n (click)=\"edit()\"\n >\n {{data.editData.confirmButtonLabel}}\n </button>\n @if (validationErrors.length) {\n <ngx-mat-entity-tooltip [tooltipContent]=\"tooltipContent\"></ngx-mat-entity-tooltip>\n }\n </div>\n\n\n <button type=\"button\" mat-raised-button class=\"cancel-button\" (click)=\"cancel()\">\n {{data.editData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n</form>\n","import { Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\n\nimport { BaseEntityType } from '../classes/entity.model';\nimport { DynamicStyleClasses } from '../components/table/table-data';\n\n/**\n * Dynamically applies css classes based on a provided function.\n */\n@Directive({ selector: '[dynamicStyleClasses]', standalone: true })\nexport class DynamicStyleClassDirective<EntityType extends BaseEntityType<EntityType>> implements OnChanges {\n\n private styleClassesApplied: string[] = [];\n\n /**\n * The function that gets the css classes to dynamically apply.\n */\n @Input({ required: true })\n dynamicStyleClasses!: DynamicStyleClasses<EntityType>;\n\n /**\n * The input for the dynamic style classes function.\n */\n @Input({ required: true })\n entity!: EntityType;\n\n constructor(private readonly element: ElementRef, private readonly renderer: Renderer2) {}\n\n ngOnChanges(): void {\n this.applyDynamicClasses();\n }\n\n private applyDynamicClasses(): void {\n const classes: string[] | void = this.dynamicStyleClasses(this.entity);\n\n for (const styleClass of this.styleClassesApplied) {\n this.renderer.removeClass(this.element.nativeElement, styleClass);\n }\n this.styleClassesApplied = [];\n if (classes?.length) {\n for (const styleClass of classes) {\n this.renderer.addClass(this.element.nativeElement, styleClass);\n this.styleClassesApplied.push(styleClass);\n }\n }\n }\n}","import { SelectionModel } from '@angular/cdk/collections';\nimport { NgFor, NgIf } from '@angular/common';\nimport { Component, EnvironmentInjector, EventEmitter, Inject, Input, OnInit, Output, ViewChild, inject, runInInjectionContext } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { CreateEntityDataInternal, CreateEntityDialogDataBuilder } from './create-dialog/create-entity-data.builder';\nimport { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';\nimport { DisplayColumnValueComponent } from './display-column-value/display-column-value.component';\nimport { EditEntityData } from './edit-dialog/edit-entity-data';\nimport { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';\nimport { EditEntityDataBuilder, EditEntityDataInternal } from './edit-dialog/edit-entity.builder';\nimport { DisplayColumn, TableData } from './table-data';\nimport { BaseTableActionInternal, TableActionInternal, TableDataBuilder, TableDataInternal } from './table-data.builder';\nimport { BaseEntityType, Entity } from '../../classes/entity.model';\nimport { DynamicStyleClassDirective } from '../../directives/dynamic-style-class.directive';\nimport { NGX_COMPLETE_GLOBAL_DEFAULT_VALUES, NgxGlobalDefaultValues } from '../../global-configuration-values';\nimport { EntityService } from '../../services/entity.service';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { SelectionUtilities } from '../../utilities/selection.utilities';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\n\n/**\n * Generates a fully functional table for displaying, creating, updating and deleting entities\n * based on the configuration passed in the @Input \"tableData\".\n *\n * It offers a lot of customization options which can be found in \"TableData\".\n */\n@Component({\n selector: 'ngx-mat-entity-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n MatProgressSpinnerModule,\n NgxMatEntityCreateDialogComponent,\n NgxMatEntityEditDialogComponent,\n DisplayColumnValueComponent,\n DynamicStyleClassDirective\n ]\n})\nexport class NgxMatEntityTableComponent<EntityType extends BaseEntityType<Entity>> implements OnInit {\n\n /**\n * The configuration for the component.\n */\n @Input({ required: true })\n tableData!: TableData<EntityType>;\n\n /**\n * Emits when there are unsaved changes on either the create or update dialog.\n */\n @Output()\n readonly unsavedDialogChanges: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * The internal TableData.\n */\n data!: TableDataInternal<EntityType>;\n\n /**\n * Whether or not the table content is currently loading.\n */\n isLoading: boolean = true;\n /**\n * Whether or not the current user is allowed to create entries for the table.\n */\n allowCreate!: boolean;\n\n private entityService!: EntityService<EntityType>;\n /**\n * The paginator from the html.\n */\n @ViewChild(MatPaginator, { static: true })\n paginator!: MatPaginator;\n /**\n * The sort from the html.\n */\n @ViewChild(MatSort, { static: true })\n sort!: MatSort;\n /**\n * The filter (search) from the html.\n */\n @ViewChild('filter', { static: true })\n filter!: string;\n /**\n * The columns of the table.\n */\n displayedColumns!: string[];\n /**\n * The table dataSource.\n */\n dataSource: MatTableDataSource<EntityType> = new MatTableDataSource();\n /**\n * The selection of the table.\n */\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n\n /**\n * Provides functionality around material selections inside of tables.\n */\n SelectionUtilities: typeof SelectionUtilities = SelectionUtilities;\n\n /**\n * The internal BaseTableAction. Sets default values.\n */\n importAction!: BaseTableActionInternal;\n\n constructor(\n private readonly dialog: MatDialog,\n private readonly injector: EnvironmentInjector,\n private readonly router: Router,\n @Inject(NGX_COMPLETE_GLOBAL_DEFAULT_VALUES)\n private readonly globalConfig: NgxGlobalDefaultValues\n ) {}\n\n /**\n * Sets up all the configuration for the table and the EntityService.\n */\n ngOnInit(): void {\n this.data = new TableDataBuilder(this.globalConfig, this.tableData).getResult();\n runInInjectionContext(this.injector, () => {\n this.allowCreate = this.data.baseData.allowCreate();\n });\n\n this.importAction = new BaseTableActionInternal({\n ...this.data.baseData.importActionData,\n action: () => this.startImportJson()\n }, this.globalConfig);\n\n runInInjectionContext(this.injector, () => {\n this.entityService = inject<EntityService<EntityType>>(this.data.baseData.EntityServiceClass);\n });\n\n const givenDisplayColumns: string[] = this.data.baseData.displayColumns.map((v) => v.displayName);\n // eslint-disable-next-line unicorn/prefer-ternary\n if (this.data.baseData.tableActions.filter(tA => tA.type === 'multi-select').length) {\n this.displayedColumns = ['select'].concat(givenDisplayColumns);\n }\n else {\n this.displayedColumns = givenDisplayColumns;\n }\n\n this.dataSource.sortingDataAccessor = (entity: EntityType, header: string) => {\n return runInInjectionContext(this.injector, () => {\n return this.data.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity) as string;\n });\n };\n this.dataSource.sort = this.sort;\n this.dataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr: string = this.data.baseData.searchString(entity);\n const formattedSearchString: string = searchStr.toLowerCase();\n const formattedFilterString: string = filter.toLowerCase();\n return formattedSearchString.includes(formattedFilterString);\n };\n this.dataSource.filter = this.filter;\n this.dataSource.paginator = this.paginator;\n\n this.entityService.entitiesSubject.subscribe((entities) => {\n this.dataSource.data = entities;\n this.selection.clear();\n });\n // eslint-disable-next-line promise/prefer-await-to-then\n void this.entityService.read().then(() => {\n this.isLoading = false;\n });\n }\n\n /**\n * Gets the value to display in the column.\n * Runs in environment context to enable injection.\n * @param entity - The entity to get the value from.\n * @param displayColumn - The display column to get the value from.\n * @returns The value of the display column.\n */\n getDisplayColumnValue(entity: EntityType, displayColumn: DisplayColumn<EntityType>): unknown {\n return runInInjectionContext(this.injector, () => {\n return displayColumn.value(entity);\n });\n }\n\n private startImportJson(): void {\n const input: HTMLInputElement = document.createElement('input');\n input.type = 'file';\n input.accept = 'application/json';\n input.onchange = async () => {\n if (input.files) {\n await this.importJson(input.files[0]);\n }\n };\n input.click();\n }\n\n private async importJson(file: File): Promise<void> {\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.globalConfig, this.importAction.confirmDialogData)\n .withDefault('text', this.data.baseData.importActionData.confirmDialogData.text)\n .withDefault('title', this.importAction.displayName)\n .getResult();\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.entityService.import(file);\n }\n }\n\n /**\n * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.\n * @param entity - The entity that should be updated.\n * @param dCol - The display column. Is needed if a custom component was used that handles the click event differently.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n editEntity(entity: EntityType, dCol: DisplayColumn<EntityType>): void {\n if (dCol.disableClick == true) {\n return;\n }\n if (!(this.allowUpdate(entity) || this.allowRead(entity))) {\n return;\n }\n if (!this.data.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.data.baseData.edit) {\n this.data.baseData.edit(new this.data.baseData.EntityClass(entity));\n return;\n }\n if (this.data.baseData.defaultEdit == 'page') {\n this.editDefaultPage(new this.data.baseData.EntityClass(entity));\n return;\n }\n void this.editDefaultDialog(new this.data.baseData.EntityClass(entity));\n }\n\n /**\n * Whether updating the provided entity is allowed.\n * @param entity - The entity that the user wants to edit.\n * @returns True when the user can edit the provided entity and false otherwise.\n */\n allowUpdate(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.data.baseData.allowUpdate(entity);\n });\n }\n\n /**\n * Whether viewing the provided entity is allowed.\n * @param entity - The entity that the user wants to view.\n * @returns True when the user can view the provided entity and false otherwise.\n */\n allowRead(entity: EntityType): boolean {\n return runInInjectionContext(this.injector, () => {\n return this.data.baseData.allowRead(entity);\n });\n }\n\n private editDefaultPage(entity: EntityType): void {\n void this.router.navigate(['', this.entityService.editBaseRoute, entity.id]);\n }\n\n private async editDefaultDialog(entity: EntityType): Promise<void> {\n const inputDialogData: EditEntityData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n allowUpdate: this.data.baseData.allowUpdate,\n allowDelete: this.data.baseData.allowDelete,\n editData: this.data.editData\n };\n const dialogData: EditEntityDataInternal<EntityType> = new EditEntityDataBuilder(inputDialogData, this.globalConfig).getResult();\n const dialogRef: MatDialogRef<NgxMatEntityEditDialogComponent<BaseEntityType<unknown>>, number> = this.dialog.open(\n NgxMatEntityEditDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n }\n );\n dialogRef.componentInstance.unsavedChanges.subscribe(res => this.unsavedDialogChanges.emit(res));\n const res: number | undefined = await firstValueFrom(dialogRef.afterClosed());\n this.unsavedDialogChanges.emit(false);\n if (res === 0) {\n const data: EntityType[] = this.dataSource.data;\n data[this.dataSource.data.findIndex((e) => e[this.entityService.idKey] === entity[this.entityService.idKey])] = entity;\n this.dataSource.data = data;\n this.selection.clear();\n }\n }\n\n /**\n * Creates a new Entity. This either calls the create-Method provided by the user or uses a default create-dialog.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n createEntity(): void {\n if (this.allowCreate) {\n if (!this.data.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n const entity: EntityType = new this.data.baseData.EntityClass();\n EntityUtilities.setDefaultValues(entity);\n if (this.data.baseData.create) {\n this.data.baseData.create(entity);\n return;\n }\n if (this.data.baseData.defaultCreate == 'page') {\n this.createDefaultPage();\n return;\n }\n void this.createDefaultDialog(entity);\n }\n }\n\n private createDefaultPage(): void {\n void this.router.navigateByUrl(this.entityService.createBaseRoute);\n }\n\n private async createDefaultDialog(entity: EntityType): Promise<void> {\n const dialogData: CreateEntityDataInternal<EntityType> = new CreateEntityDialogDataBuilder(\n {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n createData: this.data.createData\n },\n this.globalConfig\n ).getResult();\n const dialogRef: MatDialogRef<NgxMatEntityCreateDialogComponent<BaseEntityType<unknown>>> = this.dialog.open(\n NgxMatEntityCreateDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }\n );\n dialogRef.componentInstance.unsavedChanges.subscribe(res => this.unsavedDialogChanges.emit(res));\n await firstValueFrom(dialogRef.afterClosed());\n this.unsavedDialogChanges.emit(false);\n }\n\n /**\n * Runs the TableAction for all selected entries.\n * Also handles confirmation with an additional dialog if configured.\n * @param action - The TableAction to run.\n */\n async runTableAction(action: TableActionInternal<EntityType>): Promise<void> {\n const requireConfirmDialog: boolean = runInInjectionContext(this.injector, () => {\n return action.requireConfirmDialog(this.selection.selected);\n });\n\n if (!requireConfirmDialog) {\n await this.confirmRunTableAction(action);\n return;\n }\n const dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent, boolean> = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: action.confirmDialogData,\n autoFocus: false,\n restoreFocus: false\n });\n const res: boolean | undefined = await firstValueFrom(dialogRef.afterClosed());\n if (res == true) {\n await this.confirmRunTableAction(action);\n }\n }\n\n private async confirmRunTableAction(action: TableActionInternal<EntityType>): Promise<void> {\n await runInInjectionContext(this.injector, async () => {\n await action.action(this.selection.selected);\n });\n }\n\n /**\n * Checks if an TableAction is disabled (e.g. Because no entries have been selected).\n * @param action - The TableAction to check.\n * @returns Whether or not the Action can be used.\n */\n tableActionDisabled(action: TableActionInternal<EntityType>): boolean {\n return runInInjectionContext(this.injector, () => {\n return !action.enabled(this.selection.selected);\n });\n }\n\n /**\n * Applies the search input to filter the table entries.\n * @param event - The keyup-event which contains the search-string of the user.\n */\n applyFilter(event: Event): void {\n const filterValue: string = (event.target as HTMLInputElement).value;\n this.dataSource.filter = filterValue.trim().toLowerCase();\n }\n\n}"," \n<!-- eslint-disable angular/no-call-expression -->\n<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\">\n </mat-form-field>\n @if (data.baseData.tableActions.length) {\n <div\n [class.col-lg-2]=\"allowCreate\"\n [class.col-lg-4]=\"!allowCreate\"\n [class.col-md-3]=\"allowCreate\"\n [class.col-md-6]=\"!allowCreate\"\n [class.col-sm-6]=\"allowCreate\"\n [class.col-sm-12]=\"!allowCreate\"\n >\n <button type=\"button\" class=\"actions-button\" mat-raised-button [matMenuTriggerFor]=\"menu\">\n {{data.baseData.tableActionsLabel}}\n </button>\n </div>\n }\n <mat-menu #menu=\"matMenu\">\n @if (data.baseData.allowJsonImport) {\n <button type=\"button\" mat-menu-item [disabled]=\"tableActionDisabled(importAction)\" (click)=\"runTableAction(importAction)\">\n {{importAction.displayName}}\n </button>\n }\n @for (action of data.baseData.tableActions; track $index) {\n <button type=\"button\" mat-menu-item [disabled]=\"tableActionDisabled(action)\" (click)=\"runTableAction(action)\">\n {{action.displayName}}\n </button>\n }\n </mat-menu>\n\n @if (allowCreate) {\n <div\n [class.col-lg-2]=\"data.baseData.tableActions.length\"\n [class.col-lg-4]=\"!data.baseData.tableActions.length\"\n [class.col-md-3]=\"data.baseData.tableActions.length\"\n [class.col-md-6]=\"!data.baseData.tableActions.length\"\n [class.col-sm-6]=\"data.baseData.tableActions.length\"\n [class.col-sm-12]=\"!data.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" mat-raised-button (click)=\"createEntity()\">\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n }\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table matSort [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\"\n [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\"\n (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\" [dynamicStyleClasses]=\"data.baseData.dynamicRowStyleClasses\" [entity]=\"entity\">\n <mat-checkbox [checked]=\"selection.isSelected(entity)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(entity) : null\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n @for (dCol of data.baseData.displayColumns; track $index) {\n <ng-container [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell *matCellDef=\"let entity\" class=\"entity\"\n [class.enabled]=\"!dCol.disableClick && (allowUpdate(entity) || allowRead(entity))\"\n [dynamicStyleClasses]=\"data.baseData.dynamicRowStyleClasses\" [entity]=\"entity\"\n (click)=\"editEntity(entity, dCol)\"\n >\n @if (dCol.Component) {\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n }\n @else {\n {{getDisplayColumnValue(entity, dCol)}}\n }\n </mat-cell>\n </ng-container>\n }\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n @if (isLoading && data.baseData.displayLoadingSpinner) {\n <mat-spinner>\n </mat-spinner>\n }\n\n <mat-paginator style=\"padding-top: 10px; padding-bottom: 10px;\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n</div>","/**\n * A bootstrap column value (a range from 1 - 12).\n */\nexport type Col = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\n/**\n * The base options for all propertyDecorators.\n */\nexport abstract class PropertyDecoratorConfig<ValueType> {\n /**\n * Whether or not the Property is displayed at all.\n * @default true\n */\n // eslint-disable-next-line typescript/no-explicit-any\n display?: boolean | ((entity: any) => boolean);\n /**\n * The name of the property used as a label for form fields.\n */\n displayName!: string;\n /**\n * Whether or not the Property is required.\n * @default true\n */\n // eslint-disable-next-line typescript/no-explicit-any\n required?: boolean | ((entity: any) => boolean);\n /**\n * Whether or not the property gets omitted when creating new Entities.\n * @default false\n */\n omitForCreate?: boolean;\n /**\n * Whether or not the property gets omitted when updating Entities.\n * @default false\n */\n omitForUpdate?: boolean;\n /**\n * Defines the width of the input property when used inside the default create or edit dialog.\n * Has 3 bootstrap values for different breakpoints for simple responsive design.\n * The first value sets the columns for the screen size lg, the second for md and the third for sm.\n * @default [6, 6, 12]\n */\n defaultWidths?: [Col, Col, Col];\n /**\n * Specifies the how to position this property when using default create/edit dialogs.\n * @default { row: -1, order: -1} (Adds the property at the end)\n */\n position?: Position;\n /**\n * Whether or not this property is readonly.\n * Can either be a boolean or a function returning a boolean.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n isReadOnly?: boolean | ((entity: any) => boolean);\n /**\n * The value that the property should be prefilled with. Only active in create mode.\n */\n default?: ValueType | (() => ValueType);\n /**\n * A function that runs just before the inputChangeEvent every time the property is changed.\n */\n // eslint-disable-next-line typescript/no-explicit-any\n change?: (entity: any) => void;\n}\n\n/**\n * The options for positioning a property when using default create/edit dialogs.\n */\nexport interface Position {\n /**\n * Specifies a tab in which this property is displayed.\n * If no property has the tab metadata specified no tabs are displayed.\n * Ordering is ascending.\n * @default -1 (sets this property in the first tab)\n */\n tab?: number,\n /**\n * Specifies the name of the tab. Can only be set by one property in each tab.\n * Requires \"tab\" to be set.\n * @default `Tab ${numberOfTheTab}`\n */\n tabName?: string,\n /**\n * Specifies the (bootstrap)-row in which this property is displayed.\n * Ordering is ascending.\n * @default -1 (sets this property after the last row)\n */\n row?: number,\n /**\n * Specifies order of the input property inside the specified row.\n * Ordering is ascending.\n * @default -1 (sets this property at the end of the row)\n */\n order?: number\n}","import { DateFilterFn } from '@angular/material/datepicker';\n\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { CreateData, DisplayColumn } from '../../components/table/table-data';\nimport { Time } from '../../utilities/date.utilities';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\nimport { DateRange } from '../date/date-decorator.data';\nimport { StringAutocompleteValues } from '../string/string-decorator.data';\n\n/**\n * Interface definition for the @array metadata.\n */\nexport abstract class ArrayDecoratorConfig<ValueType> extends PropertyDecoratorConfig<ValueType> {\n /**\n * The type of the items inside the array.\n */\n itemType!: DecoratorTypes;\n\n /**\n * Whether or not duplicate values are allowed inside the array.\n * @default false\n */\n allowDuplicates?: boolean;\n\n /**\n * The error dialog to display when the user tries to add a duplicate entry.\n */\n duplicatesErrorDialog?: ConfirmDialogData;\n}\n\n/**\n * The dialog data for the entities array edit dialog.\n */\nexport interface EditArrayItemDialogData<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The title of the default edit-dialog.\n */\n title?: (entity: EntityType) => string,\n /**\n * The label on the confirm-button of the default edit-dialog or page. Defaults to \"Save\".\n */\n confirmButtonLabel?: string,\n /**\n * The label on the cancel-button for the default edit-dialog or page. Defaults to \"Cancel\".\n */\n cancelButtonLabel?: string\n}\n\n/**\n * Definition for an array of Entities.\n */\nexport interface EntityArrayDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ArrayDecoratorConfig<EntityType[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.OBJECT,\n\n /**\n * The EntityClass used for generating the create inputs.\n */\n EntityClass: EntityClassNewable<EntityType>,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<EntityType>[],\n\n /**\n * The data for the add-item-dialog.\n * Can be omitted when adding items inline.\n */\n createDialogData?: CreateData,\n\n /**\n * The data for the edit-item-dialog.\n * Can be omitted when adding items inline.\n */\n editDialogData?: EditArrayItemDialogData<EntityType>,\n\n /**\n * Whether or not the form for adding items to the array\n * should be displayed inline.\n * @default true\n */\n createInline?: boolean,\n\n /**\n * The label for the add button when createInline is true.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button when createInline is true.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string\n}\n\n/**\n * Definition for an array of Dates.\n */\nexport interface DateArrayDecoratorConfig extends ArrayDecoratorConfig<Date[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string,\n\n /**\n * A function to get the minimum value of the date.\n */\n min?: (date?: Date) => Date,\n\n /**\n * A function to get the maximum value of the date.\n */\n max?: (date?: Date) => Date,\n\n /**\n * A filter function to do more specific filtering. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date | null | undefined>\n}\n\n/**\n * Definition for an array of DateTimes.\n */\nexport interface DateTimeArrayDecoratorConfig extends ArrayDecoratorConfig<Date[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_TIME,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string,\n\n /**\n * The selectable times.\n */\n times?: DropdownValue<Time>[],\n\n /**\n * The name to use as a label for the time form field.\n * @default 'Time'\n */\n timeDisplayName?: string,\n\n /**\n * A function to get the minimum value of the date.\n */\n minDate?: (date?: Date) => Date,\n\n /**\n * A function to get the maximum value of the date.\n */\n maxDate?: (date?: Date) => Date,\n\n /**\n * A filter function to do more specific date filtering. This could be the removal of e.g. All weekends.\n */\n filterDate?: DateFilterFn<Date | null | undefined>,\n\n /**\n * A function to get the minimum value of the time.\n */\n minTime?: (date?: Date) => Time,\n\n /**\n * A function to get the maximum value of the time.\n */\n maxTime?: (date?: Date) => Time,\n\n /**\n * A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.\n */\n filterTime?: ((time: Time) => boolean) | (() => boolean)\n}\n\n/**\n * Definition for an array of DateRanges.\n */\nexport interface DateRangeArrayDecoratorConfig extends ArrayDecoratorConfig<DateRange[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.DATE_RANGE,\n\n /**\n * The definition of the columns to display. Consists of the displayName to show in the header of the row\n * and the value, which is a function that generates the value to display inside a column.\n */\n displayColumns: DisplayColumn<DateRange>[],\n\n /**\n * The label for the add button.\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n * @default 'Remove'\n */\n removeButtonLabel?: string,\n\n /**\n * The error-message to display when the array is required but contains no values.\n */\n missingErrorMessage?: string,\n\n /**\n * A function to get the minimum value of the start date.\n */\n minStart?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the start date.\n */\n maxStart?: (date?: Date) => Date,\n /**\n * A function to get the minimum value of the end date.\n */\n minEnd?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the end date.\n */\n maxEnd?: (date?: Date) => Date,\n /**\n * A filter function to do more specific filtering on the disallowed end date values. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date>,\n /**\n * The placeholder for the start date of the date range picker.\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n * @default \"End\"\n */\n placeholderEnd?: string\n}\n\n/**\n * Definition for an array of strings displayed as a chips list.\n */\nexport interface StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<string[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING,\n\n /**\n * The class for the <i> tag used to remove an entry from the array.\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string,\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp\n}\n\n/**\n * Definition for an array of autocomplete strings displayed as a chips list.\n */\nexport interface AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecoratorConfig<string[]> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n itemType: DecoratorTypes.STRING_AUTOCOMPLETE,\n\n /**\n * The class for the <i> tag used to remove an entry from the array.\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string,\n /**\n * The autocomplete values.\n */\n autocompleteValues: StringAutocompleteValues,\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp,\n /**\n * Whether or not valid inputs should be restricted to the autocomplete options.\n * @default false\n */\n restrictToOptions?: boolean\n}","import { AutocompleteStringChipsArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from './array-decorator-internal.data';\nimport { AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting array property metadata.\n * @param metadata - The metadata of the array property.\n * @returns The method that defines the metadata.\n * @throws When the given type of the array-items is unknown.\n */\nexport function array<EntityType extends BaseEntityType<EntityType>>(\n metadata: EntityArrayDecoratorConfig<EntityType>\n | StringChipsArrayDecoratorConfig\n | AutocompleteStringChipsArrayDecoratorConfig\n | DateArrayDecoratorConfig\n | DateTimeArrayDecoratorConfig\n | DateRangeArrayDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.itemType) {\n case DecoratorTypes.OBJECT:\n return baseProperty(new EntityArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults), DecoratorTypes.ARRAY);\n case DecoratorTypes.DATE:\n return baseProperty(new DateArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults), DecoratorTypes.ARRAY_DATE);\n case DecoratorTypes.DATE_TIME:\n return baseProperty(\n new DateTimeArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_DATE_TIME\n );\n case DecoratorTypes.DATE_RANGE:\n return baseProperty(\n new DateRangeArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_DATE_RANGE\n );\n case DecoratorTypes.STRING:\n return baseProperty(\n new StringChipsArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_STRING_CHIPS\n );\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n return baseProperty(\n new AutocompleteStringChipsArrayDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\n );\n default:\n // eslint-disable-next-line typescript/no-explicit-any, typescript/no-unsafe-member-access\n throw new Error(`Unknown itemType ${(metadata as any).itemType}`);\n }\n}","import { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * The Definition for the @boolean metadata.\n */\nabstract class BooleanDecoratorConfig extends PropertyDecoratorConfig<boolean> {\n /**\n * Whether to display the booleans as a checkbox, a toggle button or as a dropdown.\n */\n displayStyle!: 'checkbox' | 'dropdown' | 'toggle';\n}\n\n/**\n * The configuration options for a boolean property displayed in a dropdown.\n */\nexport interface DropdownBooleanDecoratorConfig extends BooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The name of the true value if displayStyle dropdown is used.\n * @default 'Yes'\n */\n dropdownTrue?: string,\n /**\n * The name of the false value if displayStyle dropdown is used.\n * @default 'No'\n */\n dropdownFalse?: string\n}\n\n/**\n * The configuration options for a boolean property displayed as a checkbox.\n */\nexport interface CheckboxBooleanDecoratorConfig extends BooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'checkbox'\n}\n/**\n * The configuration options for a boolean property displayed as a mat-toggle.\n */\nexport interface ToggleBooleanDecoratorConfig extends BooleanDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'toggle'\n}","import { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from './boolean-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting boolean property metadata.\n * @param metadata - The metadata of the boolean property.\n * @returns The method that defines the metadata.\n */\nexport function boolean(\n metadata: CheckboxBooleanDecoratorConfig | ToggleBooleanDecoratorConfig | DropdownBooleanDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(\n new DropdownBooleanDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.BOOLEAN_DROPDOWN\n );\n }\n else if (metadata.displayStyle === 'checkbox') {\n return baseProperty(new CheckboxBooleanDecoratorConfigInternal(metadata), DecoratorTypes.BOOLEAN_CHECKBOX);\n }\n else {\n return baseProperty(new ToggleBooleanDecoratorConfigInternal(metadata), DecoratorTypes.BOOLEAN_TOGGLE);\n }\n}","import { Type } from '@angular/core';\n\nimport { CustomDecoratorConfig } from './custom-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../components/input/base-input.component';\nimport { LodashUtilities } from '../../encapsulation/lodash.utilities';\nimport { defaultTrue } from '../../functions/default-true.function';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The default function to use for checking if the value is dirty.\n * @param value - The current value.\n * @param valuePriorChanges - The value before any changes.\n * @returns Whether or not the provided value has been changed.\n */\nfunction defaultIsEqual<ValueType>(value: ValueType, valuePriorChanges: ValueType): boolean {\n return LodashUtilities.isEqual(value, valuePriorChanges);\n}\n\n/**\n * The internal config for the @custom decorator.\n * Sets default values.\n */\nexport class CustomDecoratorConfigInternal<\n EntityType extends BaseEntityType<EntityType>,\n ValueType,\n MetadataType extends BaseEntityType<MetadataType>,\n ComponentType extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, ValueType, MetadataType>\n> extends PropertyDecoratorConfigInternal<ValueType> implements CustomDecoratorConfig<EntityType, ValueType, MetadataType, ComponentType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n component: Type<ComponentType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n isValid: (value: ValueType, omit?: 'create' | 'update') => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n isEqual: (\n value: ValueType,\n valuePriorChanges: ValueType,\n metadata: CustomDecoratorConfig<EntityType, ValueType, MetadataType, ComponentType>\n ) => boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n customMetadata: MetadataType;\n\n constructor(data: CustomDecoratorConfig<EntityType, ValueType, MetadataType, ComponentType>) {\n super(data);\n this.component = data.component;\n this.isValid = data.isValid ?? defaultTrue;\n this.isEqual = data.isEqual ?? defaultIsEqual;\n this.customMetadata = data.customMetadata;\n }\n}","import { CustomDecoratorConfigInternal } from './custom-decorator-internal.data';\nimport { CustomDecoratorConfig } from './custom-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting custom property metadata.\n * @param metadata - The metadata of the custom property.\n * @param metadataKeysToReset - Any metadata keys which values should be set to undefined on reset.\n * @returns The method that defines the metadata.\n */\nexport function custom<\n ValueType,\n CustomMetadataType extends BaseEntityType<CustomMetadataType>,\n EntityType extends BaseEntityType<EntityType>\n>(\n metadata: CustomDecoratorConfig<\n EntityType,\n ValueType,\n CustomMetadataType,\n // eslint-disable-next-line typescript/no-explicit-any\n any\n >,\n metadataKeysToReset?: string[]\n): (target: object, propertyKey: string) => void {\n return baseProperty<DecoratorTypes.CUSTOM, CustomMetadataType>(\n new CustomDecoratorConfigInternal(metadata),\n DecoratorTypes.CUSTOM,\n metadataKeysToReset\n );\n}","import { DateFilterFn } from '@angular/material/datepicker';\n\nimport { Time } from '../../utilities/date.utilities';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * This is the needed type for an property that should be displayed as a date range.\n */\nexport interface DateRange {\n /**\n * The start date of the range.\n */\n start: Date,\n /**\n * The end date of the range.\n */\n end: Date,\n /**\n * The actual Date values. These are needed if the date range might contain some values that are disabled.\n * E.g. When you build a tool to request vacation you may want the user to select 3 weeks in the range picker\n * but don't want the weekend dates in the final result.\n */\n values: Date[]\n}\n\n/**\n * Definition for the @date metadata.\n */\nabstract class DateDecoratorConfig<ValueType> extends PropertyDecoratorConfig<ValueType> {\n /**\n * How to display the date.\n */\n displayStyle!: 'date' | 'datetime' | 'daterange';\n}\n\n/**\n * The configuration options for a date property displayed as a default single date picker.\n */\nexport interface DefaultDateDecoratorConfig extends DateDecoratorConfig<Date> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'date',\n /**\n * A function to get the minimum value of the date.\n */\n min?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the date.\n */\n max?: (date?: Date) => Date,\n /**\n * A filter function to do more specific filtering. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date | null | undefined>\n}\n\n/**\n * The configuration options for a date property displayed as a date range.\n */\nexport interface DateRangeDateDecoratorConfig extends DateDecoratorConfig<DateRange> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'daterange',\n /**\n * A function to get the minimum value of the start date.\n */\n minStart?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the start date.\n */\n maxStart?: (date?: Date) => Date,\n /**\n * A function to get the minimum value of the end date.\n */\n minEnd?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the end date.\n */\n maxEnd?: (date?: Date) => Date,\n /**\n * A filter function to do more specific filtering on the disallowed end date values. This could be the removal of e.g. All weekends.\n */\n filter?: DateFilterFn<Date>,\n /**\n * The placeholder for the start date of the date range picker.\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n * @default \"End\"\n */\n placeholderEnd?: string\n}\n\n/**\n * The configuration options for a date property displayed as date time.\n */\nexport interface DateTimeDateDecoratorConfig extends DateDecoratorConfig<Date> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'datetime',\n /**\n * The selectable times.\n */\n times?: DropdownValue<Time | undefined>[],\n /**\n * The name to use as a label for the time form field.\n * @default 'Time'\n */\n timeDisplayName?: string,\n /**\n * A function to get the minimum value of the date.\n */\n minDate?: (date?: Date) => Date,\n /**\n * A function to get the maximum value of the date.\n */\n maxDate?: (date?: Date) => Date,\n /**\n * A filter function to do more specific date filtering. This could be the removal of e.g. All weekends.\n */\n filterDate?: DateFilterFn<Date | null | undefined>,\n /**\n * A function to get the minimum value of the time.\n */\n minTime?: (date?: Date) => Time,\n /**\n * A function to get the maximum value of the time.\n */\n maxTime?: (date?: Date) => Time,\n /**\n * A filter function to do more specific time filtering. This could be e.g. The removal of lunch breaks.\n */\n filterTime?: ((time: Time) => boolean) | (() => boolean)\n}","import { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from './date-decorator-internal.data';\nimport { DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting date property metadata.\n * @param metadata - The metadata of the date property.\n * @returns The method that defines the metadata.\n */\nexport function date(\n metadata: DefaultDateDecoratorConfig | DateRangeDateDecoratorConfig | DateTimeDateDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'date') {\n return baseProperty(new DefaultDateDecoratorConfigInternal(metadata), DecoratorTypes.DATE);\n }\n else if (metadata.displayStyle === 'datetime') {\n return baseProperty(\n new DateTimeDateDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.DATE_TIME,\n [EntityUtilities.TIME_KEY]\n );\n }\n else {\n return baseProperty(\n new DateRangeDateDecoratorConfigInternal(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.DATE_RANGE\n );\n }\n}","import { FileDataWithFile, FileDataWithUrl } from './file-decorator-internal.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * The type of a property annotated with @file.\n */\nexport type FileData = FileDataWithFile | FileDataWithUrl;\n\n/**\n * Definition for the @file metadata.\n */\nabstract class FileDecoratorConfig extends PropertyDecoratorConfig<FileData> {\n /**\n * Specifies whether or not the decorated property can have multiple files.\n */\n multiple!: boolean;\n\n /**\n * The type of the upload.\n */\n type!: 'image' | 'other';\n\n /**\n * The class for the <i> tag used to remove a file from the input.\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string;\n\n /**\n * Whether or not the file should be displayed inside a preview.\n * @default true\n */\n preview?: boolean;\n\n /**\n * Specifies allowed File types like 'image/jpg' etc.\n * Allows every file type if not set.\n */\n allowedMimeTypes?: string[];\n\n /**\n * The error dialog to display when the user inputs files that are not of the allowed mime types.\n */\n mimeTypeErrorDialog?: ConfirmDialogData;\n\n /**\n * The maximum allowed size of a single file in MB.\n * @default 10\n */\n maxSize?: number;\n\n /**\n * The error dialog to display when the user inputs a single file that is bigger than the 'maxSize' value.\n */\n maxSizeErrorDialog?: ConfirmDialogData;\n\n /**\n * The maximum allowed size of all files in MB.\n * @default 100\n */\n maxSizeTotal?: number;\n\n /**\n * The error dialog to display when the user inputs files which are in total bigger than the 'maxSizeTotal' value.\n */\n maxSizeTotalErrorDialog?: ConfirmDialogData;\n\n /**\n * Defines whether or not a dropdown box is displayed.\n * @default\n * true // when multiple is set to true.\n * false // when multiple is set to false.\n */\n dragAndDrop?: boolean;\n}\n\n/**\n * Definition for a default file.\n */\nexport interface DefaultFileDecoratorConfig extends FileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'other',\n // eslint-disable-next-line jsdoc/require-jsdoc\n preview?: false\n}\n\n/**\n * Definition for a image file.\n */\nexport interface ImageFileDecoratorConfig extends FileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'image',\n /**\n * Specifies allowed File types like image/jpg etc. In a comma separated string.\n * @default ['image/*']\n */\n allowedMimeTypes?: string[],\n /**\n * Url to the file that gets displayed in the preview when no file has been selected yet.\n */\n previewPlaceholderUrl?: string\n}","import { DefaultFileDecoratorConfig, FileData, ImageFileDecoratorConfig } from './file-decorator.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * Contains data about a file property where a blob exists.\n */\nexport interface FileDataWithFile {\n /**\n * The name of the file.\n */\n name: string,\n /**\n * The file data itself in form of a blob.\n */\n file: Blob,\n /**\n * The mime type of the file.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n type: string,\n /**\n * The size of the file in bytes.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n size: number,\n /**\n * The url where the blob is saved.\n */\n url?: string\n}\n\n/**\n * Contains data about a file property where no blob exists.\n */\nexport interface FileDataWithUrl {\n /**\n * The name of the file.\n */\n name: string,\n /**\n * The file data itself in form of a blob.\n */\n file?: Blob,\n /**\n * The mime type of the file.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n type: string,\n /**\n * The size of the file in bytes.\n * This is needed to increase performance when checking if the provided file is valid.\n */\n size: number,\n /**\n * The url where the blob is saved.\n */\n url: string\n}\n\nconst errorAddingFiles: string = 'Error adding files';\nconst errorAddingFile: string = 'Error adding file';\n\n/**\n * The internal DefaultFileDecoratorConfig. Sets default values.\n */\nexport class DefaultFileDecoratorConfigInternal extends PropertyDecoratorConfigInternal<FileData> implements DefaultFileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'other';\n // eslint-disable-next-line jsdoc/require-jsdoc\n preview: false;\n // eslint-disable-next-line jsdoc/require-jsdoc\n multiple: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowedMimeTypes: string[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSize: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotal: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n mimeTypeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotalErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dragAndDrop: boolean;\n\n constructor(data: DefaultFileDecoratorConfig) {\n super(data);\n this.type = data.type;\n this.preview = false;\n this.multiple = data.multiple;\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.allowedMimeTypes = data.allowedMimeTypes ?? ['*'];\n this.maxSize = data.maxSize ?? 10;\n this.maxSizeTotal = data.maxSizeTotal ?? 100;\n this.mimeTypeErrorDialog = data.mimeTypeErrorDialog ?? getDefaultMimeTypeErrorDialogData(data);\n this.maxSizeErrorDialog = data.maxSizeErrorDialog ?? getDefaultMaxSizeErrorDialogData(data);\n this.maxSizeTotalErrorDialog = data.maxSizeTotalErrorDialog ?? getDefaultMaxSizeTotalErrorDialogData(data);\n this.dragAndDrop = data.dragAndDrop ?? data.multiple;\n }\n}\n\n/**\n * The internal ImageFileDecoratorConfig. Sets default values.\n */\nexport class ImageFileDecoratorConfigInternal extends PropertyDecoratorConfigInternal<FileData> implements ImageFileDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n type: 'image';\n // eslint-disable-next-line jsdoc/require-jsdoc\n allowedMimeTypes: string[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n multiple: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n preview: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n previewPlaceholderUrl?: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n deleteIcon: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSize: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotal: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n mimeTypeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n maxSizeTotalErrorDialog: ConfirmDialogData;\n // eslint-disable-next-line jsdoc/require-jsdoc\n dragAndDrop: boolean;\n\n constructor(data: ImageFileDecoratorConfig) {\n super(data);\n this.type = data.type;\n this.allowedMimeTypes = data.allowedMimeTypes ?? ['image/*'];\n this.multiple = data.multiple;\n this.preview = data.preview ?? true;\n this.deleteIcon = data.deleteIcon ?? 'fas fa-circle-minus';\n this.maxSize = data.maxSize ?? 10;\n this.maxSizeTotal = data.maxSizeTotal ?? 100;\n this.mimeTypeErrorDialog = data.mimeTypeErrorDialog ?? getDefaultMimeTypeErrorDialogData(data);\n this.maxSizeErrorDialog = data.maxSizeErrorDialog ?? getDefaultMaxSizeErrorDialogData(data);\n this.maxSizeTotalErrorDialog = data.maxSizeTotalErrorDialog ?? getDefaultMaxSizeTotalErrorDialogData(data);\n this.previewPlaceholderUrl = data.previewPlaceholderUrl;\n this.dragAndDrop = data.dragAndDrop ?? data.multiple;\n }\n}\n\n/**\n * Gets the default dialog data for the error dialog to display\n * when the user tries to add a file with a wrong type.\n * @param data - The File Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultMimeTypeErrorDialogData(data: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): ConfirmDialogData {\n return {\n type: data.mimeTypeErrorDialog?.type ?? 'info-only',\n // eslint-disable-next-line stylistic/max-len\n text: data.mimeTypeErrorDialog?.text ?? (data.multiple ? ['One of the uploaded files has the wrong type.'] : ['The uploaded file has the wrong type.']),\n title: data.mimeTypeErrorDialog?.title ?? (data.multiple ? errorAddingFiles : errorAddingFile),\n confirmButtonLabel: data.mimeTypeErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.mimeTypeErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.mimeTypeErrorDialog?.requireConfirmation,\n confirmationText: data.mimeTypeErrorDialog?.confirmationText\n };\n}\n\n/**\n * Gets the default dialog data for the error dialog to display\n * when the user tries to add a single file that is bigger than the allowed maxSize.\n * @param data - The File Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultMaxSizeErrorDialogData(data: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): ConfirmDialogData {\n return {\n type: data.mimeTypeErrorDialog?.type ?? 'info-only',\n // eslint-disable-next-line stylistic/max-len\n text: data.mimeTypeErrorDialog?.text ?? (data.multiple ? ['One of the uploaded files is too big'] : ['The uploaded files is too big']),\n title: data.mimeTypeErrorDialog?.title ?? (data.multiple ? errorAddingFiles : errorAddingFile),\n confirmButtonLabel: data.mimeTypeErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.mimeTypeErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.mimeTypeErrorDialog?.requireConfirmation,\n confirmationText: data.mimeTypeErrorDialog?.confirmationText\n };\n}\n\n/**\n * Gets the default dialog data for the error dialog to display\n * when the user tries to add a single file that is bigger than the allowed maxSize.\n * @param data - The File Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultMaxSizeTotalErrorDialogData(data: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): ConfirmDialogData {\n return {\n type: data.mimeTypeErrorDialog?.type ?? 'info-only',\n text: data.mimeTypeErrorDialog?.text ?? ['The size of all files combined is too big'],\n title: data.mimeTypeErrorDialog?.title ?? (data.multiple ? errorAddingFiles : errorAddingFile),\n confirmButtonLabel: data.mimeTypeErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.mimeTypeErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.mimeTypeErrorDialog?.requireConfirmation,\n confirmationText: data.mimeTypeErrorDialog?.confirmationText\n };\n}","import { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from './file-decorator-internal.data';\nimport { DefaultFileDecoratorConfig, ImageFileDecoratorConfig } from './file-decorator.data';\nimport { EntityUtilities } from '../../utilities/entity.utilities';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting file property metadata.\n * @param metadata - The metadata of the file property.\n * @returns The method that defines the metadata.\n * @throws When an unknown metadata type was provided.\n */\nexport function file(metadata: DefaultFileDecoratorConfig | ImageFileDecoratorConfig): (target: object, propertyKey: string) => void {\n switch (metadata.type) {\n case 'other':\n return baseProperty(\n new DefaultFileDecoratorConfigInternal(metadata),\n DecoratorTypes.FILE_DEFAULT,\n [EntityUtilities.FILENAMES_KEY]\n );\n case 'image':\n return baseProperty(\n new ImageFileDecoratorConfigInternal(metadata),\n DecoratorTypes.FILE_IMAGE,\n [EntityUtilities.FILENAMES_KEY, EntityUtilities.MULTI_PREVIEW_IMAGES_KEY, EntityUtilities.SINGLE_PREVIEW_IMAGE_KEY]\n );\n default:\n // eslint-disable-next-line typescript/no-unsafe-member-access, typescript/no-explicit-any\n throw new Error(`Unknown metadata type ${(metadata as any).type}`);\n }\n}","import { HasManyDecoratorConfigInternal } from './has-many-decorator-internal.data';\nimport { HasManyDecoratorConfig } from './has-many-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting has many property metadata.\n * @param metadata - The metadata of the has many property.\n * @returns The method that defines the metadata.\n */\nexport function hasMany<EntityType extends BaseEntityType<EntityType>, RelatedBaseEntityType extends BaseEntityType<RelatedBaseEntityType>>(\n metadata: HasManyDecoratorConfig<EntityType, RelatedBaseEntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(\n new HasManyDecoratorConfigInternal<EntityType, RelatedBaseEntityType>(\n metadata,\n needsUpdateGlobalDefaults\n ),\n DecoratorTypes.HAS_MANY\n );\n}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type NumberDropdownValues =\n DropdownValue<number | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<number | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<number | undefined>[]>);\n\n/**\n * Definition for the @number metadata.\n */\nabstract class NumberDecoratorConfig extends PropertyDecoratorConfig<number> {\n /**\n * Whether to display the number in a single line or as a dropdown.\n */\n displayStyle!: 'line' | 'dropdown' | 'slider';\n}\n\n/**\n * The configuration options for a number property displayed in a default number input.\n */\nexport interface DefaultNumberDecoratorConfig extends NumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line',\n /**\n * The minimum value of the number.\n */\n min?: number,\n /**\n * The maximum value of the number.\n */\n max?: number\n}\n\n/**\n * The configuration options for a number property displayed in a dropdown.\n */\nexport interface DropdownNumberDecoratorConfig extends NumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value.\n */\n dropdownValues: NumberDropdownValues\n}\n\n/**\n * The configuration options for a number property displayed as a slider input.\n */\nexport interface SliderNumberDecoratorConfig extends NumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'slider',\n /**\n * The minimum value of the number.\n */\n min?: number,\n /**\n * The maximum value of the number.\n */\n max?: number,\n /**\n * How big a single step is at which the thumb label will snap.\n */\n step?: number,\n /**\n * Function that transforms the value to display inside the thumb label.\n */\n formatThumbLabelValue?: (value: number) => string,\n /**\n * Whether or not ticks should be displayed.\n */\n showTickMarks?: boolean\n}","import { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\nimport { dropdownValuesToFunction } from '../../functions/dropdown-values-to-function.function';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class DefaultNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal<number> implements DefaultNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line';\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: number;\n\n constructor(data: DefaultNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.max = data.max;\n this.min = data.min;\n }\n}\n\n/**\n * The internal DropdownNumberDecoratorConfig. Sets default values.\n */\nexport class DropdownNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal<number>\n implements DropdownNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n dropdownValues: ((entity: any) => Promise<DropdownValue<number | undefined>[]>);\n\n constructor(data: DropdownNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = dropdownValuesToFunction(data.dropdownValues);\n }\n}\n\n/**\n * The internal SliderNumberDecoratorConfig. Sets default values.\n */\nexport class SliderNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal<number> implements SliderNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'slider';\n // eslint-disable-next-line jsdoc/require-jsdoc\n min?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n max?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n step?: number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n formatThumbLabelValue: (value: number) => string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n showTickMarks?: boolean;\n\n constructor(data: SliderNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.max = data.max;\n this.min = data.min;\n this.step = data.step;\n this.formatThumbLabelValue = data.formatThumbLabelValue ?? defaultFormatThumbLabelValue;\n this.showTickMarks = data.showTickMarks;\n }\n}\n\n/**\n * The default function to format values for the number slider thumb label.\n * @param value - The value of the slider.\n * @returns Just the value without any formatting done.\n */\nexport function defaultFormatThumbLabelValue(value: number): string {\n return value.toString();\n}","import { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from './number-decorator-internal.data';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting number property metadata.\n * @param metadata - The metadata of the number property.\n * @returns The method that defines the metadata.\n */\nexport function number(\n metadata: DefaultNumberDecoratorConfig | DropdownNumberDecoratorConfig | SliderNumberDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.displayStyle) {\n case 'dropdown':\n return baseProperty(new DropdownNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER_DROPDOWN);\n case 'slider':\n return baseProperty(new SliderNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER_SLIDER);\n default:\n return baseProperty(new DefaultNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER);\n }\n}","import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type ObjectDropdownValues<EntityType extends BaseEntityType<EntityType>> =\n DropdownValue<EntityType | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<EntityType | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<EntityType | undefined>[]>);\n\n/**\n * Definition for the @object metadata.\n */\nabstract class ObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends PropertyDecoratorConfig<EntityType> {\n /**\n * The class of the object. Is used to call the constructor so that all metadata is initialized.\n */\n EntityClass!: EntityClassNewable<EntityType>;\n\n /**\n * How to display the object.\n *\n * The objects properties are added as input fields in an section of the entity.\n * Useful if the object only contains a few properties (e.g. A address on a user).\n */\n displayStyle!: 'dropdown' | 'inline';\n\n /**\n * Some properties of the objects entity class that should be omitted.\n */\n omit?: (keyof EntityType)[];\n}\n\n/**\n * The configuration options for a object property.\n */\nexport interface DefaultObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ObjectDecoratorConfig<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'inline'\n}\n\n/**\n * The configuration options for a dropdown object property.\n */\nexport interface DropdownObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ObjectDecoratorConfig<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value.\n * Can also receive a function to determine the values.\n */\n dropdownValues: ObjectDropdownValues<EntityType>\n}","import { DefaultObjectDecoratorConfig, DropdownObjectDecoratorConfig } from './object-decorator.data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { dropdownValuesToFunction } from '../../functions/dropdown-values-to-function.function';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\n\n/**\n * The internal DefaultObjectDecoratorConfig. Sets default values.\n */\nexport class DefaultObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements DefaultObjectDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'inline';\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n omit: (keyof EntityType)[];\n\n constructor(data: DefaultObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.EntityClass = data.EntityClass;\n this.omit = data.omit ?? [];\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n }\n}\n\n/**\n * The internal DropdownObjectDecoratorConfig. Sets default values.\n */\nexport class DropdownObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements DropdownObjectDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n omit: (keyof EntityType)[];\n // eslint-disable-next-line jsdoc/require-jsdoc, typescript/no-explicit-any\n dropdownValues: ((entity: any) => Promise<DropdownValue<EntityType | undefined>[]>);\n\n constructor(data: DropdownObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.EntityClass = data.EntityClass;\n this.dropdownValues = dropdownValuesToFunction(data.dropdownValues);\n this.omit = data.omit ?? [];\n this.defaultWidths = data.defaultWidths ?? [6, 6, 12];\n }\n}","import { DefaultObjectDecoratorConfigInternal, DropdownObjectDecoratorConfigInternal } from './object-decorator-internal.data';\nimport { DefaultObjectDecoratorConfig, DropdownObjectDecoratorConfig } from './object-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting object property metadata.\n * @param metadata - The metadata of the object property.\n * @returns The method that defines the metadata.\n */\nexport function object<EntityType extends BaseEntityType<EntityType>>(\n metadata: DefaultObjectDecoratorConfig<EntityType> | DropdownObjectDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n // eslint-disable-next-line sonar/no-small-switch\n switch (metadata.displayStyle) {\n case 'dropdown':\n return baseProperty(new DropdownObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT_DROPDOWN);\n default:\n return baseProperty(new DefaultObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT);\n }\n}","import { ReferencesManyDecoratorConfigInternal } from './references-many-decorator-internal.data';\nimport { ReferencesManyDecoratorConfig } from './references-many-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { needsUpdateGlobalDefaults } from '../../default-global-configuration-values';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting references many property metadata.\n * @param metadata - The metadata of the references many property.\n * @returns The method that defines the metadata.\n */\nexport function referencesMany<EntityType extends BaseEntityType<EntityType>>(\n metadata: ReferencesManyDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(\n new ReferencesManyDecoratorConfigInternal<EntityType>(metadata, needsUpdateGlobalDefaults),\n DecoratorTypes.REFERENCES_MANY\n );\n}","import { ReferencesOneDecoratorConfig } from './references-one-decorator.data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { defaultGetEntityForId } from '../references-many/references-many-decorator-internal.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class ReferencesOneDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal<EntityType> implements ReferencesOneDecoratorConfig<EntityType> {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n getReferencedEntities: () => Promise<EntityType[]>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n getDropdownValues: (referencedEntities: EntityType[]) => DropdownValue<string>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n getEntityForId: (entityId: string, allReferencedEntities: EntityType[]) => EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityClass: EntityClassNewable<EntityType>;\n\n constructor(data: ReferencesOneDecoratorConfig<EntityType>) {\n super(data);\n this.getReferencedEntities = data.getReferencedEntities;\n this.getDropdownValues = data.getDropdownValues;\n this.getEntityForId = data.getEntityForId ?? defaultGetEntityForId;\n this.EntityClass = data.EntityClass;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n }\n}","import { ReferencesOneDecoratorConfigInternal } from './references-one-decorator-internal.data';\nimport { ReferencesOneDecoratorConfig } from './references-one-decorator.data';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting references one property metadata.\n * @param metadata - The metadata of the references one property.\n * @returns The method that defines the metadata.\n */\nexport function referencesOne<EntityType extends BaseEntityType<EntityType>>(\n metadata: ReferencesOneDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(new ReferencesOneDecoratorConfigInternal<EntityType>(metadata), DecoratorTypes.REFERENCES_ONE);\n}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type StringDropdownValues =\n DropdownValue<string | undefined>[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => DropdownValue<string | undefined>[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<DropdownValue<string | undefined>[]>);\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type StringAutocompleteValues =\n string[]\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => string[])\n // eslint-disable-next-line typescript/no-explicit-any\n | ((entity: any) => Promise<string[]>);\n\n/**\n * Definition for the @string metadata.\n */\nabstract class StringDecoratorConfig extends PropertyDecoratorConfig<string> {\n /**\n * How to display the string.\n */\n displayStyle!: 'line' | 'textbox' | 'autocomplete' | 'dropdown' | 'password';\n}\n\n/**\n * The configuration options for a string property displayed as a dropdown.\n */\nexport interface DropdownStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value\n * Can also receive a function to determine the values.\n */\n dropdownValues: StringDropdownValues\n}\n\n/**\n * The configuration options for a string property displayed in a default text input.\n */\nexport interface DefaultStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'line',\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp\n}\n\n/**\n * The configuration options for a string property displayed in a textbox input.\n */\nexport interface TextboxStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'textbox',\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number\n}\n\n/**\n * The configuration options for a string property displayed in a mat-autocomplete input.\n */\nexport interface AutocompleteStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'autocomplete',\n /**\n * The autocomplete values.\n */\n autocompleteValues: StringAutocompleteValues,\n /**\n * The minimum required length of the string.\n */\n minLength?: number,\n /**\n * The maximum required length of the string.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp,\n /**\n * Whether or not valid inputs should be restricted to the autocomplete options.\n */\n restrictToOptions?: boolean\n}\n\n/**\n * The configuration options for a string property displayed in a password input.\n */\nexport interface PasswordStringDecoratorConfig extends StringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'password',\n /**\n * The minimum required length of the password.\n */\n minLength?: number,\n /**\n * The maximum required length of the password.\n */\n maxLength?: number,\n /**\n * A regex used for validation.\n */\n regex?: RegExp,\n /**\n * Whether or not the password needs to be retyped.\n * @default true\n */\n needsConfirmation?: boolean,\n /**\n * Whether or not the password strength should be displayed.\n * @default true\n */\n displayPasswordStrength?: boolean,\n /**\n * The display name of the confirmation password input.\n * @default 'Confirm Password'\n */\n confirmationDisplayName?: string\n}","import { Directive, ElementRef, HostListener } from '@angular/core';\n\n/**\n * A directive that only allows number inputs.\n */\n@Directive({\n selector: '[number]',\n standalone: true\n})\nexport class NumberDirective {\n constructor(private readonly el: ElementRef) {}\n\n /**\n * Prevents the default event when a key is pressed that is not a valid number, eg. 'A', 'B', 'C', 'D' etc.\n * @param e - The keydown event from the user.\n */\n @HostListener('keydown', ['$event'])\n onKeyDown(e: KeyboardEvent): void {\n if (\n !Number.isNaN(Number.parseInt(e.key))\n || ['.', ',', 'Escape', 'Enter', 'Delete', 'Backspace', 'Home', 'End', 'Left', 'Right', 'Tab'].includes(e.key)\n || (e.ctrlKey || e.metaKey) // && ['a', 'c', 'v', 'x', 'z'].includes(e.key)\n ) {\n return;\n }\n e.preventDefault();\n }\n}","/**\n * Public API Surface of ngx-material-entity.\n */\n\n// classes\nexport * from './classes/entity.model';\n// components\nexport * from './components/confirm-dialog/confirm-dialog-data';\nexport * from './components/confirm-dialog/confirm-dialog.component';\nexport * from './components/create-page/create-data.route';\nexport * from './components/create-page/create-page.component';\nexport * from './components/edit-page/edit-data.route';\nexport * from './components/edit-page/edit-page.component';\nexport * from './components/input/base-input.component';\nexport * from './components/input/input.component';\nexport * from './components/table/create-dialog/create-entity-data';\nexport * from './components/table/create-dialog/create-entity-dialog.component';\nexport * from './components/table/default.actions';\nexport * from './components/table/display-column-value/base-display-column-value.component';\nexport * from './components/table/edit-dialog/edit-entity-data';\nexport * from './components/table/edit-dialog/edit-entity-dialog.component';\nexport * from './components/table/table-data';\nexport * from './components/table/table.component';\nexport * from './components/tooltip/tooltip.component';\n// decorators\nexport * from './decorators/array/array-decorator.data';\nexport * from './decorators/array/array.decorator';\nexport * from './decorators/base/decorator-types.enum';\nexport * from './decorators/base/dropdown-value.interface';\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport { Col, Position } from './decorators/base/property-decorator.data';\nexport * from './decorators/boolean/boolean-decorator.data';\nexport * from './decorators/boolean/boolean.decorator';\nexport * from './decorators/custom/custom-decorator.data';\nexport * from './decorators/custom/custom.decorator';\nexport * from './decorators/date/date-decorator.data';\nexport * from './decorators/date/date.decorator';\nexport * from './decorators/file/file-decorator.data';\nexport * from './decorators/file/file.decorator';\nexport * from './decorators/has-many/has-many-decorator.data';\nexport * from './decorators/has-many/has-many.decorator';\nexport * from './decorators/number/number-decorator.data';\nexport * from './decorators/number/number.decorator';\nexport * from './decorators/object/object-decorator.data';\nexport * from './decorators/object/object.decorator';\nexport * from './decorators/references-many/references-many-decorator.data';\nexport * from './decorators/references-many/references-many.decorator';\nexport * from './decorators/references-one/references-one-decorator.data';\nexport * from './decorators/references-one/references-one.decorator';\nexport * from './decorators/string/string-decorator.data';\nexport * from './decorators/string/string.decorator';\n// directives\nexport * from './directives/dynamic-style-class.directive';\nexport * from './directives/included-in.directive';\nexport * from './directives/number.directive';\nexport * from './directives/tooltip.directive';\n// functions\nexport * from './functions/get-validation-error-message.function';\nexport * from './functions/get-validation-errors-tooltip-content.function.ts';\n// services\nexport * from './services/entity.service';\nexport * from './services/unsaved-changes.guard';\n//utilities\nexport * from './utilities/date.utilities';\nexport * from './utilities/entity.utilities';\nexport * from './utilities/file.utilities';\nexport * from './utilities/validation.utilities';\n// default values\nexport * from './global-configuration-values';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i5","i9","i8","i11","i1","i6","i7","i15","i17","i10"],"mappings":"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"}
|