ngx-material-entity 1.0.6 → 1.1.1
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/capsulation/jszip.utilities.d.ts +12 -0
- package/classes/entity.utilities.d.ts +0 -9
- package/classes/file.utilities.d.ts +13 -0
- package/components/confirm-dialog/confirm-dialog.component.d.ts +1 -1
- package/components/input/array/array-date-input/array-date-input.component.d.ts +1 -1
- package/components/input/array/array-date-range-input/array-date-range-input.component.d.ts +1 -1
- package/components/input/array/array-date-time-input/array-date-time-input.component.d.ts +1 -1
- package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +1 -1
- package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +1 -1
- package/components/input/array/array-table.class.d.ts +2 -2
- package/components/input/base-input.component.d.ts +1 -1
- package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +1 -1
- package/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.d.ts +1 -1
- package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +1 -1
- package/components/input/custom/custom.component.d.ts +1 -1
- package/components/input/date/date-input/date-input.component.d.ts +1 -1
- package/components/input/date/date-range-input/date-range-input.component.d.ts +1 -1
- package/components/input/date/date-time-input/date-time-input.component.d.ts +1 -1
- package/components/input/file/file-default-input/file-default-input.component.d.ts +1 -1
- package/components/input/file/file-image-input/file-image-input.component.d.ts +1 -1
- package/components/input/file/file-input/dragDrop.directive.d.ts +1 -1
- package/components/input/file/file-input/file-input.component.d.ts +7 -7
- package/components/input/input.component.d.ts +1 -1
- package/components/input/number/number-dropdown-input/number-dropdown-input.component.d.ts +1 -1
- package/components/input/number/number-input/number-input.component.d.ts +1 -1
- package/components/input/number/number-slider-input/number-slider-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/input/string/string-input/string-input.component.d.ts +1 -1
- package/components/input/string/string-password-input/string-password-input.component.d.ts +1 -1
- package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +1 -1
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +1 -1
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +6 -3
- package/components/table/table.component.d.ts +1 -1
- package/decorators/file/file-decorator-internal.data.d.ts +2 -0
- package/decorators/file/file-decorator.data.d.ts +9 -1
- package/esm2020/capsulation/jszip.utilities.mjs +17 -0
- package/esm2020/classes/entity.model.mjs +1 -1
- package/esm2020/classes/entity.utilities.mjs +23 -16
- package/esm2020/classes/file.utilities.mjs +40 -1
- package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +9 -9
- package/esm2020/components/confirm-dialog/confirm-dialog.module.mjs +5 -5
- package/esm2020/components/input/array/array-date-input/array-date-input.component.mjs +12 -12
- package/esm2020/components/input/array/array-date-range-input/array-date-range-input.component.mjs +12 -12
- package/esm2020/components/input/array/array-date-time-input/array-date-time-input.component.mjs +14 -14
- package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +12 -12
- package/esm2020/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +10 -10
- package/esm2020/components/input/array/array-table.class.mjs +5 -5
- package/esm2020/components/input/base-input.component.mjs +4 -4
- package/esm2020/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +6 -6
- package/esm2020/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +7 -7
- package/esm2020/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +6 -6
- package/esm2020/components/input/custom/custom.component.mjs +5 -5
- package/esm2020/components/input/date/date-input/date-input.component.mjs +7 -7
- package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +7 -7
- package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +11 -11
- package/esm2020/components/input/file/file-default-input/file-default-input.component.mjs +5 -5
- package/esm2020/components/input/file/file-image-input/file-image-input.component.mjs +7 -7
- package/esm2020/components/input/file/file-input/dragDrop.directive.mjs +4 -4
- package/esm2020/components/input/file/file-input/file-input.component.mjs +61 -36
- package/esm2020/components/input/input.component.mjs +36 -33
- package/esm2020/components/input/input.module.mjs +20 -22
- package/esm2020/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +9 -9
- package/esm2020/components/input/number/number-input/number-input.component.mjs +4 -4
- package/esm2020/components/input/number/number-slider-input/number-slider-input.component.mjs +7 -7
- package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +10 -10
- package/esm2020/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +9 -9
- package/esm2020/components/input/string/string-input/string-input.component.mjs +4 -4
- package/esm2020/components/input/string/string-password-input/string-password-input.component.mjs +8 -8
- package/esm2020/components/input/string/string-textbox-input/string-textbox-input.component.mjs +7 -7
- package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +12 -9
- package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +10 -12
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +20 -15
- package/esm2020/components/table/edit-dialog/edit-entity-dialog.module.mjs +11 -13
- package/esm2020/components/table/table.component.mjs +12 -12
- package/esm2020/components/table/table.module.mjs +16 -18
- package/esm2020/decorators/file/file-decorator-internal.data.mjs +3 -1
- package/esm2020/decorators/file/file-decorator.data.mjs +1 -1
- package/fesm2015/ngx-material-entity.mjs +534 -434
- package/fesm2015/ngx-material-entity.mjs.map +1 -1
- package/fesm2020/ngx-material-entity.mjs +517 -423
- package/fesm2020/ngx-material-entity.mjs.map +1 -1
- package/{ngx-material-entity.d.ts → index.d.ts} +0 -0
- package/package.json +14 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-material-entity.mjs","sources":["../../../projects/ngx-material-entity/src/capsulation/reflect.utilities.ts","../../../projects/ngx-material-entity/src/decorators/base/base-property.decorator.ts","../../../projects/ngx-material-entity/src/decorators/base/decorator-types.enum.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/decorators/string/string.decorator.ts","../../../projects/ngx-material-entity/src/capsulation/lodash.utilities.ts","../../../projects/ngx-material-entity/src/classes/date.utilities.ts","../../../projects/ngx-material-entity/src/classes/file.utilities.ts","../../../projects/ngx-material-entity/src/classes/entity.utilities.ts","../../../projects/ngx-material-entity/src/classes/entity.model.ts","../../../projects/ngx-material-entity/src/classes/entity.service.ts","../../../projects/ngx-material-entity/src/classes/base.builder.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog-data.builder.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/components/confirm-dialog/confirm-dialog.module.ts","../../../projects/ngx-material-entity/src/components/get-validation-error-message.function.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/input/add-array-item-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/input/base-input.component.ts","../../../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/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/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-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/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/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/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/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-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-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/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-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/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-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/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/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/components/input/file/file-input/dragDrop.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/custom/custom.component.ts","../../../projects/ngx-material-entity/src/components/input/custom/custom.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/input/input.module.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-dialog-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/components/table/edit-dialog/edit-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.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/components/table/table-data.builder.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/components/table/create-dialog/create-entity-dialog.module.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.module.ts","../../../projects/ngx-material-entity/src/components/table/table.module.ts","../../../projects/ngx-material-entity/src/decorators/array/array-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/array/array.decorator.ts","../../../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/boolean/boolean-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean.decorator.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/date/date-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/date/date.decorator.ts","../../../projects/ngx-material-entity/src/decorators/date/date-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/number/number-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/object/object-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/string/string-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/file/file-decorator.data.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/public-api.ts","../../../projects/ngx-material-entity/src/ngx-material-entity.ts"],"sourcesContent":["\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 *\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 *\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 return Reflect.ownKeys(target) as (keyof T)[];\n }\n\n /**\n * Gets the property of target, equivalent to `target[propertyKey]`.\n *\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 *\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 *\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 * Define a unique metadata entry on the target.\n *\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 { ReflectUtilities } from '../../capsulation/reflect.utilities';\nimport { DecoratorType, DecoratorTypes } from './decorator-types.enum';\n\n/**\n * The base decorator for setting metadata on properties.\n *\n * @param metadata - The metadata to define.\n * @param type - The type of metadata.\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) {\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}","import { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal } 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 { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from '../number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../object/object-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 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 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-eslint/no-explicit-any\n : T extends DecoratorTypes.OBJECT ? DefaultObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line @typescript-eslint/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-eslint/no-explicit-any\n : T extends DecoratorTypes.CUSTOM ? CustomDecoratorConfigInternal<any, any, CustomMetadataType, any>\n : never;","import { Col, Position, PropertyDecoratorConfig } from './property-decorator.data';\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) {\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 minimum value for a bootstrap column)');\n }\n }\n if (data?.row != null && data.row < 1) {\n throw new Error('row must be at least 1');\n }\n if (data?.tab != null && data.tab < 2) {\n throw new Error('tab must be at least 2');\n }\n }\n}\n\n/**\n * The internal PropertyDecoratorConfig. Sets default values.\n */\nexport abstract class PropertyDecoratorConfigInternal implements PropertyDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n display: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n required: 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\n constructor(data: PropertyDecoratorConfig) {\n this.display = data.display ?? true;\n this.displayName = data.displayName;\n this.required = 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 }\n}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\n\n/**\n * The internal DropdownStringDecoratorConfig. Sets default values.\n */\nexport class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DropdownStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<string>[];\n\n constructor(data: DropdownStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = data.dropdownValues;\n }\n}\n\n/**\n * The internal DefaultStringDecoratorConfig. Sets default values.\n */\nexport class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 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 implements AutocompleteStringDecoratorConfig {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'autocomplete';\n // eslint-disable-next-line jsdoc/require-jsdoc\n autocompleteValues: 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: AutocompleteStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.autocompleteValues = data.autocompleteValues;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n }\n}\n\n/**\n * The internal PasswordStringDecoratorConfig. Sets default values.\n */\nexport class PasswordStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal 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 passwordsDontMatchErrorMessage: string;\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.passwordsDontMatchErrorMessage = data.passwordsDontMatchErrorMessage ?? 'Passwords need to match!';\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from './string-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\n\n/**\n * Decorator for setting and getting string Property metadata.\n *\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(new PasswordStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_PASSWORD);\n default:\n return baseProperty(new DefaultStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING);\n }\n}","import { cloneDeep, Dictionary, isArray, isEqual, isNil, Many, omit, omitBy, ValueKeyIteratee } 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 *\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 *\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 *\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 *\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 *\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>(object: Dictionary<T> | null | undefined, predicate?: ValueKeyIteratee<T>): Dictionary<T> {\n return omitBy(object, predicate);\n }\n\n /**\n * Checks if value is classified as an Array object.\n *\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}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { DropdownValue } from '../decorators/base/dropdown-value.interface';\n\nconst DAY_IN_MS = 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> = () => true;\n\n /**\n * Gets the given value as a date value.\n *\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 *\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 = 0; hour < 24; hour++) {\n for (let minute = 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 = `${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 *\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 *\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 *\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>[],\n date?: Date,\n min?: (date?: Date) => Time,\n max?: (date?: Date) => Time,\n filter?: ((time: Time) => boolean) | (() => boolean)\n ): DropdownValue<Time>[] {\n if (min) {\n const minTime: Time = min(date);\n times = times.filter(t =>\n !(t.value as Time | undefined)\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 as Time | undefined)\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 as Time | undefined) || 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 *\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\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 { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { FileDataWithFile } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\n\n/**\n * Provides functionality regarding files.\n */\nexport abstract class FileUtilities {\n /**\n * Gets the accept value for the html input.\n *\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 *\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 = 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 *\n * @param url - The url to get the file from.\n * @returns A promise of the File.\n */\n private static async getFileFromUrl(url: string): Promise<Blob> {\n const res = await fetch(url);\n if (!res.ok) {\n // TODO make error more robust\n throw new Error(`Error fetching the file from the url ${url}`);\n }\n return await res.blob();\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 *\n * @param data - The File Data to get the file data with blob from.\n * @returns FileDataWithFile.\n */\n static async getFileData(data: FileData): 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),\n name: data.name,\n url: data.url,\n type: data.type,\n size: data.size\n };\n }\n }\n\n /**\n * Checks if the given file has a valid mime type.\n *\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 *\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 = 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 { DecoratorType, DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { DateRangeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { DefaultStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../decorators/string/string-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal } from '../decorators/number/number-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from '../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../decorators/date/date-decorator.data';\nimport { Time } from '@angular/common';\nimport { DateUtilities } from './date.utilities';\nimport { ReflectUtilities } from '../capsulation/reflect.utilities';\nimport { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { ToggleBooleanDecoratorConfigInternal } from '../decorators/boolean/boolean-decorator-internal.data';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from './entity.model';\nimport { CustomDecoratorConfigInternal } from '../decorators/custom/custom-decorator-internal.data';\n\n/**\n * Shows information about differences between two entities.\n */\ninterface 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 * Gets the properties to omit when updating the entity.\n *\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 of EntityUtilities.keysOf(entity)) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n if (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 *\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 of EntityUtilities.keysOf(entity)) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n if (metadata.omitForCreate) {\n res.push(key);\n }\n }\n return res;\n }\n\n /**\n * Gets all properties on the given entity which are files.\n *\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 of EntityUtilities.keysOf(entity)) {\n const type = EntityUtilities.getPropertyType(entity, key);\n if (type === DecoratorTypes.FILE_DEFAULT || type === DecoratorTypes.FILE_IMAGE) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\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 *\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 @typescript-eslint/no-unused-vars\n type?: T\n ): DecoratorType<T, CustomMetadataType> {\n const metadata = ReflectUtilities.getMetadata('metadata', entity, propertyKey);\n if (metadata == null) {\n throw new Error(\n `Could not find metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n return metadata as DecoratorType<T, CustomMetadataType>;\n }\n\n /**\n * Gets the type of the property-metadata.\n *\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 {\n try {\n const propertyType = ReflectUtilities.getMetadata('type', entity, propertyKey);\n if (propertyType == null) {\n throw new Error(\n `Could not find type metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n return propertyType as DecoratorTypes;\n }\n catch (error) {\n throw new Error(\n `Could not find type metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n }\n\n /**\n * Sets all property values based on a given entity data-object.\n *\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 = EntityUtilities.getPropertyType(target, key);\n let value = entity ? ReflectUtilities.get(entity, key) : undefined;\n switch (type) {\n case DecoratorTypes.OBJECT:\n const objectMetadata = EntityUtilities.getPropertyMetadata(target, key, DecoratorTypes.OBJECT);\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 const arrayMetadata = EntityUtilities.getPropertyMetadata(target, key, DecoratorTypes.ARRAY);\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-eslint/member-ordering, jsdoc/require-jsdoc\n static construct = EntityUtilities.new;\n // eslint-disable-next-line @typescript-eslint/member-ordering, jsdoc/require-jsdoc\n static build = EntityUtilities.new;\n\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 *\n * @param entity - The entity to validate.\n * @param omit - Whether to check for creating or editing validity.\n * @returns Whether or not the entity is valid.\n */\n static isEntityValid<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, omit: 'create' | 'update'): boolean {\n for (const key in entity) {\n if (!EntityUtilities.isPropertyValid(entity, key, omit)) {\n return false;\n }\n }\n return true;\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 private static isPropertyValid<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n key: keyof EntityType,\n omit: 'create' | 'update'\n ): boolean {\n const type = EntityUtilities.getPropertyType(entity, key);\n const metadata: PropertyDecoratorConfigInternal = EntityUtilities.getPropertyMetadata(entity, key, type);\n\n if (metadata.omitForCreate && omit === 'create') {\n return true;\n }\n if (metadata.omitForUpdate && omit === 'update') {\n return true;\n }\n if (metadata.required) {\n if (entity[key] == null || entity[key] === '') {\n return false;\n }\n }\n switch (type) {\n case DecoratorTypes.BOOLEAN_DROPDOWN:\n break;\n case DecoratorTypes.BOOLEAN_CHECKBOX:\n case DecoratorTypes.BOOLEAN_TOGGLE:\n const entityBoolean = entity[key] as boolean;\n const booleanMetadata = metadata as ToggleBooleanDecoratorConfigInternal;\n if (!EntityUtilities.isBooleanValid(entityBoolean, booleanMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_DROPDOWN:\n break;\n case DecoratorTypes.STRING:\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n const entityString = entity[key] as string;\n const stringMetadata = metadata as DefaultStringDecoratorConfigInternal;\n if (!EntityUtilities.isStringValid(entityString, stringMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_TEXTBOX:\n const entityTextbox = entity[key] as string;\n const textboxMetadata = metadata as TextboxStringDecoratorConfigInternal;\n if (!EntityUtilities.isTextboxValid(entityTextbox, textboxMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_PASSWORD:\n const entityPassword = entity[key] as string;\n const passwordMetadata = metadata as PasswordStringDecoratorConfigInternal;\n const confirmPassword = ReflectUtilities.getMetadata('confirmPassword', entity, key) as string;\n if (!EntityUtilities.isPasswordValid(entityPassword, passwordMetadata, confirmPassword)) {\n return false;\n }\n break;\n case DecoratorTypes.NUMBER_DROPDOWN:\n return true;\n case DecoratorTypes.NUMBER:\n case DecoratorTypes.NUMBER_SLIDER:\n const entityNumber = entity[key] as number;\n const numberMetadata = metadata as DefaultNumberDecoratorConfigInternal;\n if (!EntityUtilities.isNumberValid(entityNumber, numberMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.OBJECT:\n const entityObject = entity[key] as EntityType;\n for (const parameterKey in entityObject) {\n if (!EntityUtilities.isPropertyValid(entityObject, parameterKey, omit)) {\n return false;\n }\n }\n break;\n case DecoratorTypes.ARRAY_STRING_CHIPS:\n case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_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 = entity[key] as unknown[];\n const arrayMetadata = metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (arrayMetadata.required && !entityArray.length) {\n return false;\n }\n break;\n case DecoratorTypes.DATE:\n const entityDate: Date = new Date(entity[key] as Date);\n const dateMetadata = metadata as DefaultDateDecoratorConfigInternal;\n if (!EntityUtilities.isDateValid(entityDate, dateMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.DATE_RANGE:\n const entityDateRange: DateRange = LodashUtilities.cloneDeep(entity[key] as DateRange);\n const dateRangeMetadata = metadata as DateRangeDateDecoratorConfigInternal;\n if (!EntityUtilities.isDateRangeValid(entityDateRange, dateRangeMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.DATE_TIME:\n const entityDateTime: Date = new Date(entity[key] as Date);\n const dateTimeMetadata = metadata as DateTimeDateDecoratorConfigInternal;\n if (!EntityUtilities.isDateTimeValid(entityDateTime, dateTimeMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.FILE_DEFAULT:\n case DecoratorTypes.FILE_IMAGE:\n const entityFile: FileData | FileData[] = entity[key] as FileData | FileData[];\n const entityFileMetadata = metadata as DefaultFileDecoratorConfigInternal;\n if (!EntityUtilities.isFileDataValid(entityFile, entityFileMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const customMetadata = metadata as CustomDecoratorConfigInternal<EntityType, any, any, any>;\n if (!customMetadata.isValid(entity[key], omit)) {\n return false;\n }\n break;\n default:\n throw new Error(`Could not validate the input because the DecoratorType ${type} is not known`);\n }\n return true;\n }\n\n private static isBooleanValid(value: boolean, metadata: ToggleBooleanDecoratorConfigInternal): boolean {\n if (metadata.required && !value) {\n return false;\n }\n return true;\n }\n\n private static isStringValid(value: string, metadata: DefaultStringDecoratorConfigInternal): boolean {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return false;\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return false;\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return false;\n }\n return true;\n }\n\n private static isTextboxValid(value: string, metadata: TextboxStringDecoratorConfigInternal): boolean {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return false;\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return false;\n }\n return true;\n }\n\n private static isPasswordValid(value: string, metadata: PasswordStringDecoratorConfigInternal, confirmPassword: string): boolean {\n if (value !== confirmPassword) {\n return false;\n }\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return false;\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return false;\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return false;\n }\n return true;\n }\n\n private static isNumberValid(value: number, metadata: DefaultNumberDecoratorConfigInternal): boolean {\n if (metadata.max && value > metadata.max) {\n return false;\n }\n if (metadata.min && value < metadata.min) {\n return false;\n }\n return true;\n }\n\n private static isDateValid(value: Date, metadata: DefaultDateDecoratorConfigInternal): boolean {\n if (metadata.min && value.getTime() < metadata.min(value).getTime()) {\n return false;\n }\n if (metadata.max && value.getTime() > metadata.max(value).getTime()) {\n return false;\n }\n if (metadata.filter && !metadata.filter(value)) {\n return false;\n }\n return true;\n }\n\n private static isDateRangeValid(value: DateRange, metadata: DateRangeDateDecoratorConfigInternal): boolean {\n if (metadata.required) {\n if (!(value.start as Date | undefined)) {\n return false;\n }\n if (!(value.end as Date | undefined)) {\n return false;\n }\n }\n value.start = new Date(value.start);\n value.end = new Date(value.end);\n if (metadata.minStart && value.start.getTime() < metadata.minStart(value.start).getTime()) {\n return false;\n }\n if (metadata.maxStart && value.start.getTime() > metadata.maxStart(value.start).getTime()) {\n return false;\n }\n if (metadata.minEnd && value.end.getTime() < metadata.minEnd(value.end).getTime()) {\n return false;\n }\n if (metadata.maxEnd && value.end.getTime() > metadata.maxEnd(value.end).getTime()) {\n return false;\n }\n if (metadata.filter) {\n if (!metadata.filter(value.start)) {\n return false;\n }\n if (!metadata.filter(value.end)) {\n return false;\n }\n if (value.values) {\n for (const date of value.values) {\n if (!metadata.filter(date)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n private static isDateTimeValid(value: Date, metadata: DateTimeDateDecoratorConfigInternal): boolean {\n if (metadata.minDate && value.getTime() < metadata.minDate(value).getTime()) {\n return false;\n }\n if (metadata.maxDate && value.getTime() > metadata.maxDate(value).getTime()) {\n return false;\n }\n if (metadata.filterDate && !metadata.filterDate(value)) {\n return false;\n }\n const time: Time = {\n hours: value.getHours(),\n minutes: value.getMinutes()\n };\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 false;\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 false;\n }\n }\n if (metadata.filterTime) {\n if (!metadata.filterTime(time)) {\n return false;\n }\n }\n return true;\n }\n\n private static isFileDataValid(value: FileData | FileData[], metadata: DefaultFileDecoratorConfigInternal): boolean {\n const files = metadata.multiple ? value as FileData[] : [value as FileData];\n let fileSizeTotal: number = 0;\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < files.length; i++) {\n if (!files[i].name || !files[i].file && !files[i].url) {\n return false;\n }\n if (!FileUtilities.isMimeTypeValid(files[i].type, metadata.allowedMimeTypes)) {\n return false;\n }\n if (FileUtilities.transformToMegaBytes(files[i].size, 'B') > metadata.maxSize) {\n return false;\n }\n fileSizeTotal += files[i].size;\n if (FileUtilities.transformToMegaBytes(fileSizeTotal, 'B') > metadata.maxSizeTotal) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if an entity is \"dirty\" (if its values have changed).\n *\n * @param entity - The entity after all changes.\n * @param entityPriorChanges - The entity before the changes.\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 ): Promise<boolean> {\n if (!(entityPriorChanges as EntityType | undefined)) {\n return false;\n }\n else {\n const differences = await EntityUtilities.differencesForDirty(entity, entityPriorChanges);\n return differences.length ? true : false;\n }\n }\n\n private static async differencesForDirty<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType\n ): Promise<Difference<EntityType>[]> {\n const res: Difference<EntityType>[] = [];\n for (const key in entity) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n const type = EntityUtilities.getPropertyType(entity, key);\n if (!(await EntityUtilities.isEqual(entity[key], entityPriorChanges[key], metadata, type))) {\n res.push({\n key: key,\n before: entityPriorChanges[key],\n after: entity[key]\n });\n }\n }\n return res;\n }\n\n /**\n * Compares two Entities and returns their difference in an object.\n *\n * @param entity - The first entity to compare.\n * @param entityPriorChanges - The second entity to compare.\n * @returns The difference between the two Entities in form of a Partial.\n */\n static async difference<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType\n ): Promise<Partial<EntityType>> {\n const res: Partial<EntityType> = {};\n for (const key in entity) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n const type = EntityUtilities.getPropertyType(entity, key);\n if (!(await EntityUtilities.isEqual(entity[key], entityPriorChanges[key], metadata, type))) {\n res[key] = 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 *\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 * @returns Whether or not the given values are equal.\n */\n static async isEqual(\n value: unknown,\n valuePriorChanges: unknown,\n metadata: PropertyDecoratorConfigInternal,\n type: DecoratorTypes\n ): Promise<boolean> {\n switch (type) {\n case DecoratorTypes.DATE_RANGE:\n return EntityUtilities.isEqualDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeDateDecoratorConfigInternal).filter\n );\n case DecoratorTypes.DATE:\n return EntityUtilities.isEqualDate(value, valuePriorChanges);\n case DecoratorTypes.DATE_TIME:\n return EntityUtilities.isEqualDateTime(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE:\n case DecoratorTypes.ARRAY_DATE_TIME:\n return EntityUtilities.isEqualArrayDate(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE_RANGE:\n return EntityUtilities.isEqualArrayDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeArrayDecoratorConfigInternal).filter\n );\n case DecoratorTypes.FILE_IMAGE:\n case DecoratorTypes.FILE_DEFAULT:\n return EntityUtilities.isEqualFile(value, valuePriorChanges, (metadata as DefaultFileDecoratorConfigInternal).multiple);\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line max-len, @typescript-eslint/no-explicit-any\n return EntityUtilities.isEqualCustom(value, valuePriorChanges, metadata as CustomDecoratorConfigInternal<any, any, any, any>);\n default:\n return LodashUtilities.isEqual(value, valuePriorChanges);\n }\n }\n\n private static isEqualArrayDate(value: unknown, valuePriorChanges: unknown): boolean {\n const newValue = (value as Date[]).map(v => new Date(v)).sort();\n const newValuePriorChanges = (valuePriorChanges as Date[]).map(v => new Date(v)).sort();\n return LodashUtilities.isEqual(newValue, newValuePriorChanges);\n }\n\n private static isEqualArrayDateRange(value: unknown, valuePriorChanges: unknown, filter?: DateFilterFn<Date>): boolean {\n const dateRanges = (value as DateRange[]).sort();\n const dateRangesPriorChanges = (valuePriorChanges as DateRange[]).sort();\n if (dateRanges.length !== dateRangesPriorChanges.length) {\n return false;\n }\n for (let i = 0; i < dateRanges.length; i++) {\n if (!EntityUtilities.isEqualDateRange(dateRanges[i], dateRangesPriorChanges[i], filter)) {\n return false;\n }\n }\n return true;\n }\n\n private static isEqualDateTime(value: unknown, valuePriorChanges: unknown): boolean {\n const date = new Date(value as Date);\n const datePriorChanges = 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 = new Date(value as Date);\n const datePriorChanges = 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 = LodashUtilities.cloneDeep(value) as DateRange;\n dateRange.start = new Date((value as DateRange).start);\n dateRange.end = new Date((value as DateRange).end);\n dateRange.values = DateUtilities.getDatesBetween(\n dateRange.start,\n dateRange.end,\n filter\n );\n const dateRangePriorChanges = LodashUtilities.cloneDeep(valuePriorChanges) as DateRange;\n dateRangePriorChanges.start = new Date((valuePriorChanges as DateRange).start);\n dateRangePriorChanges.end = new Date((valuePriorChanges as DateRange).end);\n dateRangePriorChanges.values = DateUtilities.getDatesBetween(\n dateRangePriorChanges.start,\n dateRangePriorChanges.end,\n filter\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): Promise<boolean> {\n const files = multiple ? (value as FileData[]).sort() : [value as FileData].sort();\n const filesPriorChanges = multiple ? (valuePriorChanges as FileData[]).sort() : [valuePriorChanges as FileData].sort();\n if (files.length !== filesPriorChanges.length) {\n return false;\n }\n for (let i = 0; i < files.length; i++) {\n // checks this before actually getting any files due to performance reasons.\n if (\n !LodashUtilities.isEqual(files[i]?.name, filesPriorChanges[i]?.name)\n || !LodashUtilities.isEqual(files[i]?.url, filesPriorChanges[i]?.url)\n ) {\n return false;\n }\n files[i] = filesPriorChanges[i].file && !files[i].file ? await FileUtilities.getFileData(files[i]) : files[i];\n // eslint-disable-next-line max-len\n filesPriorChanges[i] = files[i].file && !filesPriorChanges[i].file ? await FileUtilities.getFileData(filesPriorChanges[i]) : filesPriorChanges[i];\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-eslint/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 *\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 = EntityUtilities.getPropertyMetadata(entity, a);\n const metadataB = EntityUtilities.getPropertyMetadata(entity, b);\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 values for \"lg\", \"md\", \"sm\".\n *\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 * @param type - Defines for which screen size the column values should be returned.\n * @returns Bootstrap column value.\n */\n static getWidth<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n key: keyof EntityType, type: 'lg' | 'md' | 'sm'\n ): number {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n switch (type) {\n case 'lg':\n return metadata.defaultWidths[0];\n case 'md':\n return metadata.defaultWidths[1];\n case 'sm':\n return metadata.defaultWidths[2];\n }\n }\n\n /**\n * Resets all changes on an entity.\n *\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 }\n }\n\n /**\n * Gets the rows that are used to display the given entity.\n *\n * @param entity - The entity to get the rows from.\n * @param tab - The tab number for which the rows should be returned.\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 The sorted Rows containing the row number and the keys to display in that row.\n */\n private static getEntityRows<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n tab: number,\n hideOmitForCreate: boolean,\n hideOmitForEdit: boolean\n ): EntityRow<EntityType>[] {\n const res: EntityRow<EntityType>[] = [];\n\n const keys: (keyof EntityType)[] = EntityUtilities.keysOf(entity, hideOmitForCreate, hideOmitForEdit);\n const numberOfRows: number = EntityUtilities.getNumberOfRows<EntityType>(keys, entity, tab);\n for (let i = 1; i <= numberOfRows; i++) {\n const row: EntityRow<EntityType> = {\n row: i,\n keys: EntityUtilities.getKeysForRow<EntityType>(keys, entity, i, tab)\n };\n res.push(row);\n }\n\n if (EntityUtilities.getKeysForRow<EntityType>(keys, entity, -1, tab).length) {\n const lastRow: EntityRow<EntityType> = {\n row: numberOfRows + 1,\n keys: EntityUtilities.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 *\n * @param entity - The entity to get the rows from.\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 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 hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false\n ): EntityTab<EntityType>[] {\n const res: EntityTab<EntityType>[] = [];\n const keys: (keyof EntityType)[] = EntityUtilities.keysOf(entity, hideOmitForCreate, hideOmitForEdit);\n const numberOfTabs: number = EntityUtilities.getNumberOfTabs<EntityType>(keys, entity);\n\n if (EntityUtilities.getEntityRows<EntityType>(entity, -1, hideOmitForCreate, hideOmitForEdit).length) {\n const firstTab: EntityTab<EntityType> = {\n tabName: 'Tab 1',\n tab: -1,\n rows: EntityUtilities.getEntityRows<EntityType>(entity, -1, hideOmitForCreate, hideOmitForEdit)\n };\n res.push(firstTab);\n }\n\n for (let i = 2; i <= numberOfTabs; i++) {\n const tab: EntityTab<EntityType> = {\n tabName: EntityUtilities.getTabName(entity, i),\n tab: i,\n rows: EntityUtilities.getEntityRows<EntityType>(entity, i, hideOmitForCreate, hideOmitForEdit)\n };\n res.push(tab);\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 => EntityUtilities.getPropertyMetadata(entity, k).position.row === row)\n .filter(k => EntityUtilities.getPropertyMetadata(entity, k).position.tab === tab)\n .sort((a, b) => EntityUtilities.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 => EntityUtilities.getPropertyMetadata(entity, k).position.tab === tab)\n .map(k => EntityUtilities.getPropertyMetadata(entity, k).position.row)\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 .map(k => EntityUtilities.getPropertyMetadata(entity, k).position.tab)\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 = EntityUtilities.keysOf(entity)\n .map(k => EntityUtilities.getPropertyMetadata(entity, k))\n .find(m => m.position.tab === tab && m.position.tabName)?.position.tabName;\n return providedTabName ?? `Tab ${tab}`;\n }\n\n /**\n * Gets the keys of the provided entity correctly typed.\n *\n * @param entity - The entity to get the keys of.\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 hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false\n ): (keyof EntityType)[] {\n let keys: (keyof EntityType)[] = ReflectUtilities.ownKeys(entity);\n if (hideOmitForCreate) {\n const omitForCreateKeys: (keyof EntityType)[] = EntityUtilities.getOmitForCreate(entity);\n keys = keys.filter(k => !omitForCreateKeys.includes(k));\n }\n if (hideOmitForEdit) {\n const omitForUpdateKeys: (keyof EntityType)[] = EntityUtilities.getOmitForUpdate(entity);\n keys = keys.filter(k => !omitForUpdateKeys.includes(k));\n }\n return keys;\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 { string } from '../decorators/string/string.decorator';\nimport { EntityUtilities } from './entity.utilities';\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 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 EntityUtilities.new(this, entity);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { EntityUtilities } from './entity.utilities';\nimport { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from './entity.model';\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 * The key which holds the id value.\n *\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 * Gets the entities in an array from the internal entitiesSubject.\n *\n * @returns The current entities in form of an array.\n */\n get entities(): EntityType[] {\n return this.entitiesSubject.value;\n }\n\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Creates a new Entity and pushes it to the entities array.\n *\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 * @returns A Promise of the created entity.\n */\n async create(entity: EntityType): Promise<EntityType> {\n const body: Partial<EntityType> = LodashUtilities.omit(entity, EntityUtilities.getOmitForCreate(entity)) as Partial<EntityType>;\n const filePropertyKeys: (keyof EntityType)[] = EntityUtilities.getFileProperties(entity);\n if (!filePropertyKeys.length) {\n return await this.createWithJson(body);\n }\n else {\n return await this.createWithFormData(body, filePropertyKeys, entity);\n }\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 *\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 * @returns The created entity from the server.\n */\n protected async createWithFormData(\n body: Partial<EntityType>,\n filePropertyKeys: (keyof EntityType)[],\n entity: EntityType\n ): Promise<EntityType> {\n const 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).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)).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)).file, fileData.name);\n }\n }\n const e = await firstValueFrom(this.http.post<EntityType>(this.baseUrl, formData));\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 *\n * @param body - The body Of the request.\n * @returns The created entity from the server.\n */\n protected async createWithJson(body: Partial<EntityType>): Promise<EntityType> {\n const e = await firstValueFrom(this.http.post<EntityType>(this.baseUrl, body));\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 *\n * @returns A Promise of all received Entities.\n */\n async read(): Promise<EntityType[]> {\n const e = await firstValueFrom(this.http.get<EntityType[]>(this.baseUrl));\n this.entitiesSubject.next(e);\n return e;\n }\n\n /**\n * Updates a specific Entity.\n *\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 body: Partial<EntityType> = LodashUtilities.omit(\n await EntityUtilities.difference(entity, entityPriorChanges),\n EntityUtilities.getOmitForUpdate(entity)\n ) as unknown as Partial<EntityType>;\n const filePropertyKeys = EntityUtilities.getFileProperties(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 // 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 *\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 = new FormData();\n formData.append('body', JSON.stringify(LodashUtilities.omitBy(body, LodashUtilities.isNil)));\n for (const key of filePropertyKeys) {\n if (EntityUtilities.getPropertyMetadata(entity, key, DecoratorTypes.FILE_DEFAULT).multiple) {\n // eslint-disable-next-line max-len\n const fileDataValues = body[key] as FileData[];\n for (const value of fileDataValues) {\n formData.append(key as string, (await FileUtilities.getFileData(value)).file, value.name);\n }\n }\n else {\n // eslint-disable-next-line max-len\n const fileData = body[key] as FileData;\n formData.append(key as string, (await FileUtilities.getFileData(fileData)).file, fileData.name);\n }\n }\n const updatedEntity = await firstValueFrom(\n this.http.patch<EntityType>(`${this.baseUrl}/${id}`, formData)\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 *\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 = await firstValueFrom(\n this.http.patch<EntityType>(\n `${this.baseUrl}/${id}`,\n LodashUtilities.omitBy(body, LodashUtilities.isNil)\n )\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 *\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 { BaseEntityType } from './entity.model';\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 protected constructor(data?: InputType) {\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 *\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 *\n * @param data - The user input.\n */\n // eslint-disable-next-line @typescript-eslint/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 *\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 == null || this.inputData[key] == null) {\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 *\n * @returns The build value.\n */\n getResult(): InternalType {\n return this.data;\n }\n}","import { BaseBuilder } from '../../classes/base.builder';\nimport { ConfirmDialogData, ConfirmDialogTypes } from './confirm-dialog-data';\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(data?: ConfirmDialogData) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected override generateBaseData(data?: ConfirmDialogData): ConfirmDialogDataInternal {\n return new ConfirmDialogDataInternal(\n data?.text ?? ['Do you really want to do this?'],\n data?.type ?? 'default',\n data?.confirmButtonLabel ?? 'Confirm',\n data?.cancelButtonLabel ?? 'Cancel',\n data?.title ?? 'Confirmation',\n data?.requireConfirmation ?? false,\n data?.confirmationText\n );\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected override validateInput(data?: ConfirmDialogData): void {\n if (!data) {\n return;\n }\n if (data.requireConfirmation === true && !data.confirmationText) {\n throw new Error(`Missing required Input data \"confirmationText\".\n 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) {\n throw new Error('The \"cancelButtonLabel\" will never be shown because \"type\" is set to \"info-only\"');\n }\n }\n}","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ConfirmDialogData } from './confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from './confirm-dialog-data.builder';\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})\nexport class NgxMatEntityConfirmDialogComponent implements OnInit {\n\n confirm = false;\n\n data!: ConfirmDialogDataInternal;\n\n constructor(\n private readonly dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: ConfirmDialogData\n ) {}\n\n ngOnInit(): void {\n this.data = new ConfirmDialogDataBuilder(this.inputData).getResult();\n this.dialogRef.disableClose = true;\n }\n\n /**\n * Closes the dialog with value 1 to signal that the action should be run.\n */\n confirmAction(): void {\n this.dialogRef.close(1);\n }\n\n /**\n * Closes the dialog.\n */\n cancel(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title *ngIf=\"data.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 [(ngModel)]=\"confirm\" name=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button *ngIf=\"data.type === 'delete'\" mat-raised-button color=\"warn\" (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button *ngIf=\"data.type !== 'delete'\" mat-raised-button (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button *ngIf=\"data.type !== 'info-only'\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgxMatEntityConfirmDialogComponent } from './confirm-dialog.component';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n@NgModule({\n declarations: [NgxMatEntityConfirmDialogComponent],\n imports: [CommonModule, MatDialogModule, FormsModule, MatCheckboxModule, MatButtonModule],\n exports: [NgxMatEntityConfirmDialogComponent]\n})\nexport class NgxMatEntityConfirmDialogModule {}","import { NgModel } from '@angular/forms';\n\n/**\n * Generates a default error message for most validation errors.\n *\n * @param model - The ngModel to get the error from.\n * @returns The Validation Error Message to display.\n */\nexport function 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-eslint/no-unsafe-member-access\n return `needs to be at least ${model.getError('minlength').requiredLength} characters long`;\n }\n else if (model.hasError('min')) {\n // eslint-disable-next-line @typescript-eslint/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-eslint/no-unsafe-member-access\n return `needs to be equal or smaller than ${model.getError('max').max}`;\n }\n else if (model.hasError('required')) {\n return 'required';\n }\n // eslint-disable-next-line @typescript-eslint/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 { BaseBuilder } from '../../../classes/base.builder';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateDialogData } from '../table-data';\n\n/**\n * The internal CreateDialogData. Requires all default values the user can leave out.\n */\nexport class CreateDialogDataInternal implements CreateDialogData {\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\n constructor(\n title: string,\n createButtonLabel: string,\n cancelButtonLabel: string,\n createRequiresConfirmDialog: boolean,\n confirmCreateDialogData: ConfirmDialogDataInternal\n ) {\n this.title = title;\n this.createButtonLabel = createButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.createRequiresConfirmDialog = createRequiresConfirmDialog;\n this.confirmCreateDialogData = confirmCreateDialogData;\n }\n}\n\n/**\n * The Builder for the CreateDialogData. Sets default values.\n */\nexport class CreateDialogDataBuilder extends BaseBuilder<CreateDialogDataInternal, CreateDialogData> {\n\n constructor(data?: CreateDialogData) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: CreateDialogData): CreateDialogDataInternal {\n const confirmCreateDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmCreateDialogData)\n .withDefault('confirmButtonLabel', 'create')\n .withDefault('text', ['Do you really want to create this entity?'])\n .withDefault('title', 'Create')\n .getResult();\n return new CreateDialogDataInternal(\n data?.title ?? 'Create',\n data?.createButtonLabel ?? 'Create',\n data?.cancelButtonLabel ?? 'Cancel',\n data?.createRequiresConfirmDialog ?? false,\n confirmCreateDialogData\n );\n }\n}","import { NgModel } from '@angular/forms';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { getValidationErrorMessage as defaultGetValidationErrorMessage } from '../get-validation-error-message.function';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from '../table/create-dialog/create-dialog-data.builder';\nimport { AddArrayItemDialogData } from './add-array-item-dialog-data';\n\n/**\n * The internal AddArrayItemDialogData. Requires all default values the user can leave out.\n */\nexport class AddArrayItemDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements AddArrayItemDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData: CreateDialogDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n getValidationErrorMessage: (model: NgModel) => string;\n\n constructor(\n entity: EntityType,\n createDialogData: CreateDialogDataInternal,\n getValidationErrorMessage: (model: NgModel) => string\n ) {\n this.entity = entity;\n this.createDialogData = createDialogData;\n this.getValidationErrorMessage = getValidationErrorMessage;\n }\n}\n\n/**\n * The Builder for the AddArrayItemDialogData. Sets default values.\n */\nexport class AddArrayItemDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<AddArrayItemDialogDataInternal<EntityType>, AddArrayItemDialogData<EntityType>> {\n\n constructor(data: AddArrayItemDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: AddArrayItemDialogData<EntityType>): AddArrayItemDialogDataInternal<EntityType> {\n const createDialogData = new CreateDialogDataBuilder(data.createDialogData)\n .withDefault('createButtonLabel', 'Add')\n .withDefault('title', 'Add to array')\n .getResult();\n return new AddArrayItemDialogDataInternal(\n data.entity,\n createDialogData,\n data.getValidationErrorMessage ?? defaultGetValidationErrorMessage,\n );\n }\n}","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { DecoratorType, DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { EntityUtilities } from '../../classes/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@Component({\n selector: 'ngx-mat-entity-base-input',\n template: ''\n})\n// eslint-disable-next-line max-len\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 @Output()\n inputChangeEvent = 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 // eslint-disable-next-line jsdoc/require-jsdoc\n set propertyValue(value: ValueType | undefined) {\n (this.entity[this.key] as ValueType | undefined) = value;\n }\n\n /**\n * The metadata of the property.\n */\n metadata!: DecoratorType<Type, CustomMetadataType>;\n\n ngOnInit(): void {\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.key);\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 { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-input',\n templateUrl: './string-input.component.html',\n styleUrls: ['./string-input.component.scss']\n})\nexport class StringInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING, string> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-textbox-input',\n templateUrl: './string-textbox-input.component.html',\n styleUrls: ['./string-textbox-input.component.scss']\n})\nexport class StringTextboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_TEXTBOX, string> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [required]=\"metadata.required\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-autocomplete-input',\n templateUrl: './string-autocomplete-input.component.html',\n styleUrls: ['./string-autocomplete-input.component.scss']\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 override ngOnInit(): void {\n super.ngOnInit();\n this.autocompleteStrings = this.metadata.autocompleteValues;\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n *\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input?: string): void {\n if (input) {\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(input.toLowerCase()));\n }\n }\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matAutocomplete]=\"auto\"\n (keyup)=\"filterAutocompleteStrings(propertyValue)\"\n [required]=\"metadata.required\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\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 { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-dropdown-input',\n templateUrl: './string-dropdown-input.component.html',\n styleUrls: ['./string-dropdown-input.component.scss']\n})\nexport class StringDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_DROPDOWN, string> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select (ngModelChange)=\"emitChange()\" [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\" [required]=\"metadata.required\" [disabled]=\"isReadOnly\">\n <mat-option *ngFor=\"let value of metadata.dropdownValues\" [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 { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\nimport { ReflectUtilities } from '../../../../capsulation/reflect.utilities';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-password-input',\n templateUrl: './string-password-input.component.html',\n styleUrls: ['./string-password-input.component.scss']\n})\nexport class StringPasswordInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_PASSWORD, string> implements OnInit {\n\n hide = true;\n hideConfirm = true;\n\n confirmRequired!: boolean;\n confirmPassword?: string;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.confirmRequired = this.metadata.required;\n this.confirmPassword = LodashUtilities.cloneDeep(this.propertyValue);\n ReflectUtilities.defineMetadata('confirmPassword', this.confirmPassword, this.entity, this.key);\n }\n\n passwordInput(): void {\n this.confirmRequired = Boolean(this.propertyValue);\n ReflectUtilities.defineMetadata('confirmPassword', this.confirmPassword, this.entity, this.key);\n this.emitChange();\n }\n}","<div class=\"password-row\">\n <mat-form-field [class.w-50]=\"metadata.needsConfirmation\" [class.w-100]=\"!metadata.needsConfirmation\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n [type]=\"hide ? 'password' : 'text'\"\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n (ngModelChange)=\"passwordInput()\"\n [disabled]=\"isReadOnly\"\n >\n <button (click)=\"hide = !hide\" [disabled]=\"isReadOnly\" mat-icon-button matSuffix>\n <i *ngIf=\"hide\" class=\"fas fa-eye-slash\"></i>\n <i *ngIf=\"!hide\" class=\"fas fa-eye\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <div *ngIf=\"metadata.needsConfirmation\" style=\"margin-left: 5px;margin-right: 5px;\"></div>\n <mat-form-field class=\"w-50\" *ngIf=\"metadata.needsConfirmation\">\n <mat-label>{{metadata.confirmationDisplayName}}</mat-label>\n <input\n [type]=\"hideConfirm ? 'password' : 'text'\"\n matInput\n [(ngModel)]=\"confirmPassword\"\n [name]=\"key.toString() + 'confirmPassword'\"\n #confirmModel=\"ngModel\"\n [required]=\"metadata.required || confirmRequired\"\n (ngModelChange)=\"passwordInput()\"\n [disabled]=\"isReadOnly\"\n >\n <button (click)=\"hideConfirm = !hideConfirm\" [disabled]=\"isReadOnly\" mat-icon-button matSuffix>\n <i *ngIf=\"hideConfirm\" class=\"fas fa-eye-slash\"></i>\n <i *ngIf=\"!hideConfirm\" class=\"fas fa-eye\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(confirmModel)}}</mat-error>\n </mat-form-field>\n</div>\n\n<mat-error *ngIf=\"metadata.needsConfirmation && propertyValue && confirmPassword && (confirmPassword !== propertyValue)\">\n {{metadata.passwordsDontMatchErrorMessage}}\n</mat-error>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'boolean-checkbox-input',\n templateUrl: './boolean-checkbox-input.component.html',\n styleUrls: ['./boolean-checkbox-input.component.scss']\n})\nexport class BooleanCheckboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_CHECKBOX, boolean> implements OnInit {\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.propertyValue = this.propertyValue ?? false;\n }\n}","<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-checkbox\n color=\"primary\"\n (ngModelChange)=\"emitChange()\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n [class.disabled]=\"isReadOnly\"\n [class.mat-checkbox-disabled]=\"false\"\n >\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'boolean-toggle-input',\n templateUrl: './boolean-toggle-input.component.html',\n styleUrls: ['./boolean-toggle-input.component.scss']\n})\nexport class BooleanToggleInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_TOGGLE, boolean> implements OnInit {\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.propertyValue = this.propertyValue ?? false;\n }\n}","<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-slide-toggle\n color=\"primary\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n >\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'boolean-dropdown-input',\n templateUrl: './boolean-dropdown-input.component.html',\n styleUrls: ['./boolean-dropdown-input.component.scss']\n})\nexport class BooleanDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_DROPDOWN, boolean> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\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 { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss']\n})\nexport class NumberInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER, number> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n type=\"number\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'number-dropdown-input',\n templateUrl: './number-dropdown-input.component.html',\n styleUrls: ['./number-dropdown-input.component.scss']\n})\nexport class NumberDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_DROPDOWN, number> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select (ngModelChange)=\"emitChange()\" [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\" [required]=\"metadata.required\" [disabled]=\"isReadOnly\">\n <mat-option *ngFor=\"let value of metadata.dropdownValues\" [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 { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'number-slider-input',\n templateUrl: './number-slider-input.component.html',\n styleUrls: ['./number-slider-input.component.scss']\n})\nexport class NumberSliderInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_SLIDER, number> implements OnInit {\n}","<mat-form-field floatLabel=\"always\" class=\"hideUnderline\">\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 matInput\n #hiddenInput\n type=\"number\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n <mat-slider\n id=\"slider\"\n color=\"primary\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [step]=\"metadata.step\"\n [thumbLabel]=\"true\"\n [displayWith]=\"metadata.formatThumbLabelValue\"\n [tickInterval]=\"metadata.tickInterval\"\n [disabled]=\"isReadOnly\"\n >\n </mat-slider>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { LodashUtilities } from '../../../capsulation/lodash.utilities';\nimport { EntityUtilities } from '../../../classes/entity.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../base-input.component';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { Component, OnInit } from '@angular/core';\n\ntype ArrayTableType = DecoratorTypes.ARRAY | DecoratorTypes.ARRAY_DATE\n | DecoratorTypes.ARRAY_DATE_RANGE | DecoratorTypes.ARRAY_DATE_TIME;\n\n/**\n * The base data needed for all arrays that are displayed as a table.\n */\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 constructor(private readonly matDialog: MatDialog) {\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 * Toggles all array-items in the table.\n *\n */\n masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n }\n else {\n this.dataSource.data.forEach(row => this.selection.select(row));\n }\n }\n\n /**\n * Checks if all array-items in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n *\n * @returns Whether or not all array-items in the table have been selected.\n */\n isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\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)\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 this.selection.selected.forEach(s => {\n this.propertyValue?.splice(this.propertyValue.indexOf(s), 1);\n });\n this.dataSource.data = this.propertyValue ?? [];\n this.selection.clear();\n this.emitChange();\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'array-date-input',\n templateUrl: './array-date-input.component.html',\n styleUrls: ['./array-date-input.component.scss']\n})\nexport class ArrayDateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE> implements OnInit {\n\n DateUtilities = DateUtilities;\n}","<div class=\"mat-elevation-z8\" style=\"border-radius: 5px;padding: 15px;margin-bottom: 15px;margin-top: 15px;\">\n <div style=\"padding-bottom: 10px;\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div *ngIf=\"!isReadOnly\">\n <mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"input\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\n [min]=\"metadata.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? DateUtilities.defaultDateFilter\"\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 mat-raised-button\n [disabled]=\"model.errors\"\n (click)=\"add()\">\n {{metadata.addButtonLabel}}\n </button>\n <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\" (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadata.required && !dataSource.data.length\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayDateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE_TIME> implements OnInit {\n\n DateUtilities = DateUtilities;\n\n dateTime?: Date;\n time?: Time;\n timeDropdownValues!: DropdownValue<Time>[];\n\n override ngOnInit(): void {\n super.ngOnInit();\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}","<div class=\"mat-elevation-z8\" style=\"border-radius: 5px;padding: 15px;margin-bottom: 15px;margin-top: 15px;\">\n <div style=\"padding-bottom: 10px;\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div *ngIf=\"!isReadOnly\">\n <div class=\"date-time\">\n <mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"input\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\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 [(ngModel)]=\"time\"\n [name]=\"key.toString() + 'time'\"\n #timeModel=\"ngModel\"\n [required]=\"metadata.required\"\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 mat-raised-button\n [disabled]=\"model.errors || timeModel.errors || DateUtilities.timeIsUnprocessable(time)\"\n (click)=\"addDateTime()\">\n {{metadata.addButtonLabel}}\n </button>\n <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\" (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadata.required && !dataSource.data.length\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { ArrayTableComponent } from '../array-table.class';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayDateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<DateRange, EntityType, DecoratorTypes.ARRAY_DATE_RANGE> implements OnInit {\n\n DateUtilities = DateUtilities;\n\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.input = {\n start: undefined as unknown as Date,\n end: undefined as unknown as Date,\n values: undefined\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;\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}","<div class=\"mat-elevation-z8\" style=\"border-radius: 5px;padding: 15px;margin-bottom: 15px;margin-top: 15px;\">\n <div style=\"padding-bottom: 10px;\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div *ngIf=\"!isReadOnly\">\n <mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input matStartDate\n [(ngModel)]=\"dateRangeStart\"\n [name]=\"key.toString() + 'start'\"\n #startModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n >\n <input matEndDate\n [(ngModel)]=\"dateRangeEnd\"\n [name]=\"key.toString() + 'end'\"\n #endModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\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 mat-raised-button\n [disabled]=\"startModel.errors || endModel.errors\"\n (click)=\"addDateRange()\">\n {{metadata.addButtonLabel}}\n </button>\n <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\" (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadata.required && !dataSource.data.length\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayStringChipsInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.ARRAY_STRING_CHIPS, string[]> implements OnInit {\n\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 *\n * @param event - The event that fires when a new chip is completed.\n */\n addStringChipArrayValue(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n }\n event.chipInput?.clear();\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 *\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\n /**\n * Handles adding a string to the array when an autocomplete value has been selected.\n *\n * @param event - The autocomplete selected event.\n * @param chipsInput - The element where the user typed the value.\n */\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement): void {\n const value = (event.option.viewValue || '').trim();\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n chipsInput.value = '';\n }\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayStringAutocompleteChipsComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS, string[]> implements OnInit {\n\n filteredAutocompleteStrings!: string[];\n\n chipsInput: string = '';\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.metadata.autocompleteValues);\n }\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 *\n * @param event - The event that fires when a new chip is completed.\n */\n addStringChipArrayValue(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n }\n event.chipInput?.clear();\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 *\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\n /**\n * Handles adding a string to the array when an autocomplete value has been selected.\n *\n * @param event - The autocomplete selected event.\n * @param chipsInput - The element where the user typed the value.\n */\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement): void {\n const value = (event.option.viewValue || '').trim();\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n chipsInput.value = '';\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n *\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input: unknown): void {\n if (input != null) {\n const filterValue = (input as string).toLowerCase();\n this.filteredAutocompleteStrings = this.metadata.autocompleteValues.filter(s => s.toLowerCase().includes(filterValue));\n }\n }\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let value of propertyValue\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n #chipsElement\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement)\">\n <mat-option *ngFor=\"let value of metadata.autocompleteValues\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'date-input',\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss']\n})\nexport class DateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE, Date> implements OnInit {\n\n DateUtilities = DateUtilities;\n}","<mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n (ngModelChange)=\"emitChange()\"\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\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 >\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>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\nconst EMPTY_DATERANGE: DateRange = {\n start: undefined as unknown as Date,\n end: undefined as unknown as Date,\n values: undefined\n};\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'date-range-input',\n templateUrl: './date-range-input.component.html',\n styleUrls: ['./date-range-input.component.scss']\n})\nexport class DateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_RANGE, DateRange> implements OnInit {\n\n dateRange!: DateRange;\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n defaultDateFilter = DateUtilities.defaultDateFilter;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.dateRange = LodashUtilities.cloneDeep(this.propertyValue) ?? EMPTY_DATERANGE;\n this.dateRangeStart = new Date(this.dateRange.start);\n this.dateRangeEnd = new Date(this.dateRange.end);\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 this.dateRange.start = new Date(this.dateRangeStart);\n this.dateRange.end = new Date(this.dateRangeEnd);\n const values: Date[] = DateUtilities.getDatesBetween(\n new Date(this.dateRange.start),\n new Date(this.dateRange.end),\n this.metadata.filter\n );\n this.dateRange.values = values.length ? values : undefined;\n }\n else {\n this.dateRange.values = undefined;\n }\n this.propertyValue = this.dateRange;\n this.emitChange();\n }\n}","<mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required\" [dateFilter]=\"metadata.filter ?? defaultDateFilter\" [disabled]=\"isReadOnly\">\n <input matStartDate\n [(ngModel)]=\"dateRangeStart\"\n [name]=\"key.toString() + 'start'\"\n #startModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minStart ? metadata.minStart(dateRange.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(dateRange.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n (ngModelChange)=\"setDateRangeValues()\"\n >\n <input matEndDate\n [(ngModel)]=\"dateRangeEnd\"\n [name]=\"key.toString() + 'end'\"\n #endModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minEnd ? metadata.minEnd(dateRange.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(dateRange.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n (ngModelChange)=\"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 { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'date-time-input',\n templateUrl: './date-time-input.component.html',\n styleUrls: ['./date-time-input.component.scss']\n})\nexport class DateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_TIME, Date> implements OnInit {\n\n DateUtilities = DateUtilities;\n\n time?: Time;\n timeDropdownValues!: DropdownValue<Time>[];\n\n defaultDateFilter: DateFilterFn<Date | null | undefined> = (): boolean => true;\n\n override ngOnInit(): void {\n super.ngOnInit();\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 *\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 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}","<div class=\"date-time\">\n <mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minDate ? metadata.minDate(propertyValue) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(propertyValue) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? defaultDateFilter\"\n (dateInput)=\"setTime()\"\n [disabled]=\"isReadOnly\"\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 [(ngModel)]=\"time\"\n [name]=\"key.toString() + 'time'\"\n #timeModel=\"ngModel\"\n [required]=\"metadata.required\"\n [compareWith]=\"compareTimes\"\n (ngModelChange)=\"setTime()\"\n [disabled]=\"isReadOnly\"\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 // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[dragDrop]'\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 *\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 *\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 *\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 { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { EntityUtilities } from '../../../../classes/entity.utilities';\nimport { DefaultFileDecoratorConfigInternal } from '../../../../decorators/file/file-decorator-internal.data';\nimport { FileUtilities } from '../../../../classes/file.utilities';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NgxMatEntityConfirmDialogComponent } from '../../../confirm-dialog/confirm-dialog.component';\nimport { BaseEntityType } from '../../../../classes/entity.model';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrls: ['./file-input.component.scss']\n})\nexport class FileInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n singleFileData?: FileData;\n multiFileData?: FileData[];\n filenames?: string[];\n\n FileUtilities = FileUtilities;\n\n @Input()\n entity!: EntityType;\n\n @Input()\n key!: keyof EntityType;\n\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n @Input()\n isReadOnly!: boolean;\n\n @Output()\n fileDataChangeEvent = new EventEmitter<FileData | FileData[]>();\n\n metadata!: DefaultFileDecoratorConfigInternal;\n\n constructor(private readonly dialog: MatDialog) { }\n\n async ngOnInit(): Promise<void> {\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.key, DecoratorTypes.FILE_DEFAULT);\n if (this.metadata.multiple) {\n this.initMultiFile();\n }\n else {\n this.initSingleFile();\n }\n this.fileDataChangeEvent.emit(this.singleFileData ?? this.multiFileData);\n }\n\n private initMultiFile(): void {\n this.multiFileData = this.entity[this.key] as FileData[] | undefined;\n if (this.multiFileData) {\n this.filenames = this.multiFileData.map(f => f.name);\n }\n }\n\n private initSingleFile(): void {\n this.singleFileData = this.entity[this.key] as FileData | undefined;\n if (this.singleFileData) {\n this.filenames = LodashUtilities.cloneDeep([this.singleFileData.name]);\n }\n }\n\n async setFileFromInput(event: Event): Promise<void> {\n const files = (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 = 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.singleFileData ?? this.multiFileData);\n }\n\n private resetFileInputs(): void {\n this.filenames = undefined;\n this.singleFileData = undefined;\n this.multiFileData = undefined;\n this.fileDataChangeEvent.emit();\n }\n\n private async setMultiFile(files: File[]): Promise<void> {\n const data: FileData[] = [];\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 data.push(fileData);\n }\n this.multiFileData = LodashUtilities.cloneDeep(data);\n this.filenames = this.multiFileData.map(f => f.name);\n }\n\n private async setSingleFile(file: File): Promise<void> {\n this.singleFileData = {\n file: file,\n name: file.name,\n type: file.type,\n size: file.size\n };\n this.filenames = LodashUtilities.cloneDeep([this.singleFileData.name]);\n }\n\n removeFile(name: string): void {\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 = this.multiFileData?.find(f => f.name === name) as FileData;\n this.multiFileData?.splice(this.multiFileData.indexOf(fileDataToRemove), 1);\n if (!this.multiFileData?.length) {\n this.multiFileData = undefined;\n }\n }\n else {\n this.filenames = undefined;\n this.singleFileData = undefined;\n }\n this.fileDataChangeEvent.emit(this.singleFileData ?? this.multiFileData);\n }\n}","<input #fileInput\n type=\"file\" hidden\n [multiple]=\"metadata.multiple\"\n [accept]=\"FileUtilities.getAcceptString(metadata.allowedMimeTypes)\"\n (change)=\"setFileFromInput($event)\"\n>\n\n<mat-form-field [class.readOnly]=\"isReadOnly\" floatLabel=\"always\" (click)=\"!isReadOnly ? fileInput.click() : null\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n [(ngModel)]=\"filenames\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let name of filenames\" (removed)=\"removeFile(name)\">\n {{name}}\n <button matChipRemove>\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <input [matChipInputFor]=\"chipList\" [readonly]=\"true\">\n </mat-chip-list>\n <button mat-icon-button matSuffix [disabled]=\"isReadOnly\">\n <i class=\"fas fa-upload\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>\n\n<div *ngIf=\"metadata.dragAndDrop && !isReadOnly\" class=\"dropdown\" dragDrop (files)=\"setFile($event)\">\n <i class=\"fas fa-file-arrow-up\"></i>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FileUtilities } from '../../../../classes/file.utilities';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'file-default-input',\n templateUrl: './file-default-input.component.html',\n styleUrls: ['./file-default-input.component.scss']\n})\nexport class FileDefaultInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_DEFAULT, FileData | FileData[]> implements OnInit {\n\n FileUtilities = FileUtilities;\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 (fileDataChangeEvent)=\"refreshFileData($event)\"\n [entity]=\"entity\"\n [key]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n >\n </file-input>\n</div>","// eslint-disable-next-line max-len\nexport const placeholder = 'data:image/png;base64,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';","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FileUtilities } from '../../../../classes/file.utilities';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { placeholder } from '../../../../mocks/placeholder-data.png';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'file-image-input',\n templateUrl: './file-image-input.component.html',\n styleUrls: ['./file-image-input.component.scss']\n})\nexport class FileImageInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_IMAGE, FileData | FileData[]> implements OnInit {\n\n FileUtilities = FileUtilities;\n\n singlePreviewImage?: string;\n multiPreviewImages?: string[];\n imageIndex: number = 0;\n placeHolder = placeholder;\n\n private async setSinglePreviewImage(): Promise<void> {\n if (this.propertyValue) {\n this.propertyValue = await FileUtilities.getFileData(this.propertyValue as FileData);\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 = this.propertyValue as FileData[] | undefined;\n const previewImages: string[] = [];\n if (multiFileData?.length) {\n for (let i = 0; i < multiFileData.length; i++) {\n if (i === index) {\n multiFileData[index] = await FileUtilities.getFileData(multiFileData[index]);\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}","<div *ngIf=\"!metadata.dragAndDrop && !metadata.preview\">\n <file-input\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n [entity]=\"entity\"\n [key]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n >\n </file-input>\n</div>\n\n<div *ngIf=\"metadata.dragAndDrop || metadata.preview\" class=\"file-input mat-elevation-z8\">\n <file-input\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n [entity]=\"entity\"\n [key]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n >\n </file-input>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && metadata.multiple\">\n <i (click)=\"prev()\" [class.disabled]=\"imageIndex === 0\" class=\"prev-button fa-solid fa-angle-left\"></i>\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 <i (click)=\"next()\"\n [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\"\n class=\"next-button fa-solid fa-angle-right\"\n >\n </i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && metadata.multiple\">\n <button (click)=\"setIndex(imageIndex-4)\" mat-icon-button *ngIf=\"\n this.multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (this.multiPreviewImages.length - 1)\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 3}}</span>\n </button>\n <!-- eslint-disable-next-line @angular-eslint/template/conditional-complexity -->\n <button (click)=\"setIndex(imageIndex-3)\" mat-icon-button *ngIf=\"this.multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (this.multiPreviewImages.length - 2)\n || imageIndex === (this.multiPreviewImages.length - 1)\n )\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex-1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-1]\">\n <i class=\"dot\"></i>\n <span class=\"image-index\">{{imageIndex}}</span>\n </button>\n <button mat-icon-button disabled>\n <i class=\"dot selected\"></i>\n <span class=\"image-index\">{{imageIndex + 1}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+1]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 2}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 3}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+3)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+3] && imageIndex <= 1\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 4}}</span>\n </button>\n <button (click)=\"setIndex(imageIndex+4)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+4] && imageIndex === 0\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 5}}</span>\n </button>\n </div>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <i class=\"prev-button disabled fa-solid fa-angle-left\"></i>\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n <i class=\"next-button disabled fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <button disabled mat-icon-button>\n <span class=\"dot selected\"></span>\n <span class=\"image-index\">1</span>\n </button>\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, ComponentRef, OnInit, Type, ViewContainerRef } from '@angular/core';\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-eslint/component-selector\n selector: 'custom-input',\n templateUrl: './custom.component.html',\n styleUrls: ['./custom.component.scss']\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> 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}","","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { EntityTab, EntityUtilities } from '../../classes/entity.utilities';\nimport { DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { getValidationErrorMessage } from '../get-validation-error-message.function';\nimport { EntityArrayDecoratorConfigInternal } from '../../decorators/array/array-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../../decorators/object/object-decorator-internal.data';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { AddArrayItemDialogDataBuilder, AddArrayItemDialogDataInternal } from './add-array-item-dialog-data.builder';\nimport { AddArrayItemDialogData } from './add-array-item-dialog-data';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { DateUtilities } from '../../classes/date.utilities';\nimport { LodashUtilities } from '../../capsulation/lodash.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { BaseEntityType } from '../../classes/entity.model';\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})\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()\n entity?: EntityType;\n internalEntity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjunction with the \"entity\".\n */\n @Input()\n propertyKey?: keyof EntityType;\n internalPropertyKey!: 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 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 *\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 *\n * @default false\n */\n @Input()\n hideOmitForEdit?: boolean;\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 *\n * @default false\n */\n @Input()\n isReadOnly?: boolean;\n internalIsReadOnly!: boolean;\n\n @Output()\n inputChangeEvent = new EventEmitter<void>();\n\n @ViewChild('addArrayItemDialog')\n addArrayItemDialog!: TemplateRef<unknown>;\n addArrayItemDialogRef!: MatDialogRef<unknown>;\n\n type!: DecoratorTypes;\n metadata!: PropertyDecoratorConfigInternal;\n\n metadataDefaultObject!: DefaultObjectDecoratorConfigInternal<EntityType>;\n objectProperty!: EntityType;\n objectPropertyTabs!: EntityTab<EntityType>[];\n\n metadataEntityArray!: EntityArrayDecoratorConfigInternal<EntityType>;\n entityArrayValues!: EntityType[];\n arrayItem!: EntityType;\n private arrayItemPriorChanges!: EntityType;\n arrayItemInlineTabs!: EntityTab<EntityType>[];\n dataSource!: MatTableDataSource<EntityType>;\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n displayedColumns!: string[];\n isArrayItemValid: boolean = false;\n\n dialogInputData!: AddArrayItemDialogData<EntityType>;\n dialogData!: AddArrayItemDialogDataInternal<EntityType>;\n arrayItemDialogTabs!: EntityTab<EntityType>[];\n isDialogArrayItemValid: boolean = false;\n\n readonly DecoratorTypes = DecoratorTypes;\n\n EntityUtilities = EntityUtilities;\n DateUtilities = DateUtilities;\n\n constructor(\n private readonly dialog: MatDialog\n ) {}\n\n /**\n * This is needed for the inputs to work inside an ngFor.\n *\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 ngOnInit(): void {\n if (!this.entity) {\n throw new Error('Missing required Input data \"entity\"');\n }\n this.internalEntity = this.entity;\n\n if (this.propertyKey == null) {\n throw new Error('Missing required Input data \"propertyKey\"');\n }\n this.internalPropertyKey = this.propertyKey;\n\n this.internalGetValidationErrorMessage = this.getValidationErrorMessage ?? getValidationErrorMessage;\n this.internalIsReadOnly = this.isReadOnly ?? false;\n\n this.type = EntityUtilities.getPropertyType(this.internalEntity, this.internalPropertyKey);\n this.metadata = EntityUtilities.getPropertyMetadata(this.internalEntity, this.internalPropertyKey, this.type);\n\n if (this.type === DecoratorTypes.OBJECT) {\n this.initObjectInput();\n }\n if (this.type === DecoratorTypes.ARRAY) {\n this.initEntityArray();\n }\n }\n\n private initEntityArray(): void {\n this.metadataEntityArray = this.metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (this.internalEntity[this.internalPropertyKey] == null) {\n (this.internalEntity[this.internalPropertyKey] as EntityType[]) = [];\n }\n this.entityArrayValues = this.internalEntity[this.internalPropertyKey] 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.displayedColumns = this.internalIsReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.dataSource = new MatTableDataSource();\n this.dataSource.data = this.entityArrayValues;\n this.arrayItem = new this.metadataEntityArray.EntityClass();\n this.arrayItemInlineTabs = EntityUtilities.getEntityTabs(this.arrayItem, true);\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n\n this.dialogInputData = {\n entity: this.arrayItem,\n createDialogData: this.metadataEntityArray.createDialogData,\n getValidationErrorMessage: this.getValidationErrorMessage\n };\n this.dialogData = new AddArrayItemDialogDataBuilder(this.dialogInputData).getResult();\n this.arrayItemDialogTabs = EntityUtilities.getEntityTabs(this.dialogData.entity, true);\n }\n\n private initObjectInput(): void {\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfigInternal<EntityType>;\n this.objectProperty = this.internalEntity[this.internalPropertyKey] as EntityType;\n this.objectPropertyTabs = EntityUtilities.getEntityTabs(this.objectProperty, this.hideOmitForCreate, this.hideOmitForEdit);\n }\n\n /**\n * Checks if the arrayItem is valid.\n */\n checkIsArrayItemValid(): void {\n this.isArrayItemValid = EntityUtilities.isEntityValid(this.arrayItem, 'create');\n }\n\n /**\n * Checks if the arrayItem inside the dialog is valid.\n */\n checkIsDialogArrayItemValid(): void {\n this.isDialogArrayItemValid = EntityUtilities.isEntityValid(this.dialogData.entity, 'create');\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 if (this.metadataEntityArray.createInline) {\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))) {\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.dataSource.data = this.entityArrayValues;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n this.checkIsArrayItemValid();\n this.emitChange();\n }\n else {\n this.addArrayItemDialogRef = this.dialog.open(\n this.addArrayItemDialog,\n {\n data: this.dialogData,\n autoFocus: false,\n restoreFocus: false\n }\n );\n }\n }\n\n /**\n * Adds the array item defined in the dialog.\n */\n addArrayItem(): void {\n this.addArrayItemDialogRef.close();\n this.entityArrayValues.push(LodashUtilities.cloneDeep(this.arrayItem));\n this.dataSource.data = this.entityArrayValues;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n this.checkIsArrayItemValid();\n this.emitChange();\n }\n\n /**\n * Cancels adding the array item defined in the dialog.\n */\n cancelAddArrayItem(): void {\n this.addArrayItemDialogRef.close();\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n this.emitChange();\n }\n\n /**\n * Removes all selected entries from the entity array.\n *\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-eslint/no-explicit-any\n 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 this.emitChange();\n }\n\n /**\n * Toggles all array-items in the table.\n *\n * @param selection - The selection to toggle.\n * @param dataSource - The dataSource of the selection.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n masterToggle(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): void {\n if (this.isAllSelected(selection, dataSource)) {\n selection.clear();\n }\n else {\n dataSource.data.forEach(row => selection.select(row));\n }\n }\n\n /**\n * Checks if all array-items in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n *\n * @param selection - The selection to check.\n * @param dataSource - The dataSource of the selection.\n * @returns Whether or not all array-items in the table have been selected.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isAllSelected(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): boolean {\n const numSelected = selection.selected.length;\n const numRows = dataSource.data.length;\n return numSelected === numRows;\n }\n}","<div [ngSwitch]=\"type\" *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <string-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <string-textbox-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-textbox-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <string-autocomplete-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-autocomplete-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <string-dropdown-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-dropdown-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_PASSWORD\">\n <string-password-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-password-input>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <boolean-checkbox-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </boolean-checkbox-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <boolean-toggle-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </boolean-toggle-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <boolean-dropdown-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </boolean-dropdown-input>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <number-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </number-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <number-dropdown-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </number-dropdown-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_SLIDER\">\n <number-slider-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </number-slider-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 class=\"row\" *ngFor=\"let row of tab.rows;\">\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 [isReadOnly]=\"internalIsReadOnly\"\n class=\"col-lg-{{EntityUtilities.getWidth(objectProperty, key, 'lg')}} col-md-{{EntityUtilities.getWidth(objectProperty, key, 'md')}} col-sm-{{EntityUtilities.getWidth(objectProperty, key, 'sm')}}\"\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 class=\"row\" *ngFor=\"let row of objectPropertyTabs[0].rows\">\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 [isReadOnly]=\"internalIsReadOnly\"\n class=\"col-lg-{{EntityUtilities.getWidth(objectProperty, key, 'lg')}} col-md-{{EntityUtilities.getWidth(objectProperty, key, 'md')}} col-sm-{{EntityUtilities.getWidth(objectProperty, key, 'sm')}}\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n <div class=\"entityArray\" *ngSwitchCase=\"DecoratorTypes.ARRAY\">\n <div class=\"mat-elevation-z8\" style=\"border-radius: 5px;padding: 15px;margin-bottom: 15px;margin-top: 15px;\">\n <div style=\"padding-bottom: 10px\">\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 class=\"row\" *ngFor=\"let row of tab.rows\">\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=\"col-lg-{{EntityUtilities.getWidth(arrayItem, key, 'lg')}} col-md-{{EntityUtilities.getWidth(arrayItem, key, 'md')}} col-sm-{{EntityUtilities.getWidth(arrayItem, key, 'sm')}}\"\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 class=\"row\" *ngFor=\"let row of arrayItemInlineTabs[0].rows\">\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=\"col-lg-{{EntityUtilities.getWidth(arrayItem, key, 'lg')}} col-md-{{EntityUtilities.getWidth(arrayItem, key, 'md')}} col-sm-{{EntityUtilities.getWidth(arrayItem, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\" *ngIf=\"!internalIsReadOnly\">\n <button mat-raised-button\n [disabled]=\"metadataEntityArray.createInline && !isArrayItemValid\"\n (click)=\"addEntity()\">\n {{metadataEntityArray.addButtonLabel}}\n </button>\n <button mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove(selection, entityArrayValues, dataSource)\">\n {{metadataEntityArray.removeButtonLabel}}\n </button>\n </div>\n \n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\" *ngIf=\"!internalIsReadOnly\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [disabled]=\"!dataSource.data.length\" (change)=\"$event ? masterToggle(selection, dataSource) : null\"\n [checked]=\"selection.hasValue() && isAllSelected(selection, dataSource)\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected(selection, dataSource)\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadataEntityArray.required && !dataSource.data.length\">\n {{metadataEntityArray.missingErrorMessage}}\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE\">\n <array-date-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-date-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE_TIME\">\n <array-date-time-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-date-time-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE_RANGE\">\n <array-date-range-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-date-range-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_CHIPS\">\n <array-string-chips-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-string-chips-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\">\n <array-string-autocomplete-chips\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-string-autocomplete-chips>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Dates-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.DATE\">\n <date-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </date-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.DATE_RANGE\">\n <date-range-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </date-range-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.DATE_TIME\">\n <date-time-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </date-time-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Files-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.FILE_DEFAULT\">\n <file-default-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </file-default-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.FILE_IMAGE\">\n <file-image-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </file-image-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Custom------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.CUSTOM\">\n <custom-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </custom-input>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}} is not known.</div>\n</div>\n\n<!--------------------------------------------------------->\n<!--------------------Add Array Item Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #addArrayItemDialog>\n <h2 mat-dialog-title>{{dialogData.createDialogData.title}}</h2>\n\n <mat-dialog-content>\n <form #form=\"ngForm\" class=\"row\">\n <mat-tab-group *ngIf=\"arrayItemDialogTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of arrayItemDialogTabs\" [label]=\"tab.tabName\">\n <div class=\"row\" *ngFor=\"let row of tab.rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"dialogData.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"dialogData.getValidationErrorMessage\"\n class=\"col-lg-{{EntityUtilities.getWidth(dialogData.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(dialogData.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(dialogData.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsDialogArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"arrayItemDialogTabs.length <= 1\">\n <div class=\"row\" *ngFor=\"let row of arrayItemDialogTabs[0].rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"dialogData.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"dialogData.getValidationErrorMessage\"\n class=\"col-lg-{{EntityUtilities.getWidth(dialogData.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(dialogData.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(dialogData.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsDialogArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </form>\n </mat-dialog-content>\n\n <mat-dialog-actions>\n <button mat-raised-button (click)=\"addArrayItem()\" [disabled]=\"!isDialogArrayItemValid\">\n {{dialogData.createDialogData.createButtonLabel}}\n </button>\n <button mat-raised-button (click)=\"cancelAddArrayItem()\" class=\"cancel-button\">\n {{dialogData.createDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n\n</ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityInputComponent } from './input.component';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { StringInputComponent } from './string/string-input/string-input.component';\nimport { StringTextboxInputComponent } from './string/string-textbox-input/string-textbox-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 { BooleanCheckboxInputComponent } from './boolean/boolean-checkbox-input/boolean-checkbox-input.component';\nimport { BooleanToggleInputComponent } from './boolean/boolean-toggle-input/boolean-toggle-input.component';\nimport { BooleanDropdownInputComponent } from './boolean/boolean-dropdown-input/boolean-dropdown-input.component';\nimport { NumberInputComponent } from './number/number-input/number-input.component';\nimport { NumberDropdownInputComponent } from './number/number-dropdown-input/number-dropdown-input.component';\nimport { ArrayStringChipsInputComponent } from './array/array-string-chips-input/array-string-chips-input.component';\nimport { ArrayStringAutocompleteChipsComponent } from './array/array-string-autocomplete-chips/array-string-autocomplete-chips.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 { ArrayDateInputComponent } from './array/array-date-input/array-date-input.component';\nimport { ArrayDateTimeInputComponent } from './array/array-date-time-input/array-date-time-input.component';\nimport { ArrayDateRangeInputComponent } from './array/array-date-range-input/array-date-range-input.component';\nimport { FileInputComponent } from './file/file-input/file-input.component';\nimport { FileImageInputComponent } from './file/file-image-input/file-image-input.component';\nimport { FileDefaultInputComponent } from './file/file-default-input/file-default-input.component';\nimport { DragDropDirective } from './file/file-input/dragDrop.directive';\nimport { CustomInputComponent } from './custom/custom.component';\nimport { StringPasswordInputComponent } from './string/string-password-input/string-password-input.component';\nimport { NumberSliderInputComponent } from './number/number-slider-input/number-slider-input.component';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@NgModule({\n declarations: [\n StringInputComponent,\n StringTextboxInputComponent,\n StringAutocompleteInputComponent,\n StringDropdownInputComponent,\n StringPasswordInputComponent,\n BooleanCheckboxInputComponent,\n BooleanToggleInputComponent,\n BooleanDropdownInputComponent,\n NumberInputComponent,\n NumberDropdownInputComponent,\n NumberSliderInputComponent,\n ArrayStringChipsInputComponent,\n ArrayStringAutocompleteChipsComponent,\n DateInputComponent,\n DateRangeInputComponent,\n DateTimeInputComponent,\n ArrayDateInputComponent,\n ArrayDateTimeInputComponent,\n ArrayDateRangeInputComponent,\n FileInputComponent,\n FileImageInputComponent,\n FileDefaultInputComponent,\n DragDropDirective,\n CustomInputComponent,\n NgxMatEntityInputComponent\n ],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatIconModule,\n MatTableModule,\n MatDialogModule,\n MatButtonModule,\n MatDatepickerModule,\n MatSliderModule,\n MatTabsModule\n ],\n exports: [NgxMatEntityInputComponent]\n})\nexport class NgxMatEntityInputModule {}","import { EntityService } from '../../../classes/entity.service';\nimport { CreateEntityDialogData } from './create-entity-dialog-data';\nimport { HttpClient } from '@angular/common/http';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from './create-dialog-data.builder';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The internal CreateEntityDialogData. Requires all default values the user can leave out.\n */\nexport class CreateEntityDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements CreateEntityDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData: CreateDialogDataInternal;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>,\n createDialogData: CreateDialogDataInternal\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.createDialogData = createDialogData;\n }\n}\n\n/**\n * The Builder for the CreateEntityDialogData. Sets default values.\n */\nexport class CreateEntityDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<CreateEntityDialogDataInternal<EntityType>, CreateEntityDialogData<EntityType>> {\n\n constructor(data: CreateEntityDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: CreateEntityDialogData<EntityType>): CreateEntityDialogDataInternal<EntityType> {\n const createDialogData: CreateDialogDataInternal = new CreateDialogDataBuilder(data.createDialogData).getResult();\n return new CreateEntityDialogDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n createDialogData\n );\n }\n}","import { Component, Inject, Injector, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { EntityService } from '../../../classes/entity.service';\nimport { EntityTab, EntityUtilities } from '../../../classes/entity.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateEntityDialogDataBuilder, CreateEntityDialogDataInternal } from './create-entity-dialog-data.builder';\nimport { CreateEntityDialogData } from './create-entity-dialog-data';\nimport { BaseEntityType } from '../../../classes/entity.model';\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})\nexport class NgxMatEntityCreateDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityTabs!: EntityTab<EntityType>[];\n\n entityService!: EntityService<EntityType>;\n\n data!: CreateEntityDialogDataInternal<EntityType>;\n\n isEntityValid: boolean = false;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: CreateEntityDialogData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityCreateDialogComponent<EntityType>>,\n private readonly injector: Injector,\n private readonly dialog: MatDialog\n ) {}\n\n ngOnInit(): void {\n this.data = new CreateEntityDialogDataBuilder(this.inputData).getResult();\n this.dialogRef.disableClose = true;\n this.entityTabs = EntityUtilities.getEntityTabs(this.data.entity, true);\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n }\n\n /**\n * Checks if the entity is valid.\n */\n checkIsEntityValid(): void {\n this.isEntityValid = EntityUtilities.isEntityValid(this.data.entity, 'create');\n }\n\n /**\n * Tries add the new entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n create(): void {\n if (!this.data.createDialogData.createRequiresConfirmDialog) {\n this.confirmCreate();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.createDialogData.confirmCreateDialogData)\n .withDefault('text', ['Do you really want to create this entity?'])\n .withDefault('confirmButtonLabel', 'Create')\n .withDefault('title', 'Create')\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\n this.confirmCreate();\n }\n });\n }\n private confirmCreate(): void {\n void this.entityService.create(this.data.entity).then(() => this.dialogRef.close());\n }\n\n /**\n * Closes the dialog.\n */\n cancel(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title>{{data.createDialogData.title}}</h2>\n\n<mat-dialog-content>\n <form #form=\"ngForm\">\n <mat-tab-group *ngIf=\"entityTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of entityTabs\" [label]=\"tab.tabName\">\n <div class=\"row\" *ngFor=\"let row of tab.rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsEntityValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"entityTabs.length <= 1\">\n <div class=\"row\" *ngFor=\"let row of entityTabs[0].rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsEntityValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!isEntityValid\">\n {{data.createDialogData.createButtonLabel}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.createDialogData.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>\n","import { BaseEntityType } from '../../../classes/entity.model';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditDialogData } from '../table-data';\n\n/**\n * The internal EditDialogData. Requires all default values the user can leave out.\n */\nexport class EditDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditDialogData<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\n constructor(\n title: (entity: EntityType) => string,\n confirmButtonLabel: string,\n deleteButtonLabel: string,\n cancelButtonLabel: string,\n deleteRequiresConfirmDialog: boolean,\n editRequiresConfirmDialog: boolean,\n confirmDeleteDialogData: ConfirmDialogData,\n confirmEditDialogData: ConfirmDialogData\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.confirmDeleteDialogData = confirmDeleteDialogData;\n this.confirmEditDialogData = confirmEditDialogData;\n }\n}\n\n/**\n * The Builder for the EditDialogData. Sets default values.\n */\nexport class EditDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditDialogDataInternal<EntityType>, EditDialogData<EntityType>> {\n\n constructor(data?: EditDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: EditDialogData<EntityType>): EditDialogDataInternal<EntityType> {\n const confirmEditDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmEditDialogData)\n .withDefault('confirmButtonLabel', 'Save')\n .withDefault('text', ['Do you really want to save all changes?'])\n .withDefault('title', 'Edit')\n .getResult();\n\n const confirmDeleteDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmDeleteDialogData)\n .withDefault('confirmButtonLabel', 'Delete')\n .withDefault('type', 'delete')\n .withDefault('text', ['Do you really want to delete this entity?'])\n .withDefault('title', 'Delete')\n .getResult();\n\n return new EditDialogDataInternal(\n data?.title ?? (() => 'Edit'),\n data?.confirmButtonLabel ?? 'Save',\n data?.deleteButtonLabel ?? 'Delete',\n data?.cancelButtonLabel ?? 'Cancel',\n data?.deleteRequiresConfirmDialog ?? true,\n data?.editRequiresConfirmDialog ?? false,\n confirmDeleteDialogData,\n confirmEditDialogData\n );\n }\n}","import { EntityService } from '../../../classes/entity.service';\nimport { HttpClient } from '@angular/common/http';\nimport { EditEntityDialogData } from './edit-entity-dialog-data';\nimport { EditDialogDataBuilder, EditDialogDataInternal } from './edit-dialog-data.builder';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The internal EditEntityDialogData. Requires all default values the user can leave out.\n */\nexport class EditEntityDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditEntityDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editDialogData: EditDialogDataInternal<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: new (httpClient: HttpClient) => EntityService<EntityType>,\n editDialogData: EditDialogDataInternal<EntityType>,\n allowUpdate: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.editDialogData = editDialogData;\n this.allowDelete = allowDelete;\n this.allowUpdate = allowUpdate;\n }\n}\n\n/**\n * The Builder for the EditEntityDialogData. Sets default values.\n */\nexport class EditEntityDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditEntityDialogDataInternal<EntityType>, EditEntityDialogData<EntityType>> {\n\n constructor(data: EditEntityDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: EditEntityDialogData<EntityType>): EditEntityDialogDataInternal<EntityType> {\n const editDialogData: EditDialogDataInternal<EntityType> = new EditDialogDataBuilder(data.editDialogData).getResult();\n return new EditEntityDialogDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n editDialogData,\n data.allowUpdate ?? (() => true),\n data.allowDelete ?? (() => true)\n );\n }\n}","import { Component, Inject, Injector, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { EntityService } from '../../../classes/entity.service';\nimport { EntityTab, EntityUtilities } from '../../../classes/entity.utilities';\nimport { EditEntityDialogData } from './edit-entity-dialog-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditEntityDialogDataBuilder, EditEntityDialogDataInternal } from './edit-entity-dialog.builder';\nimport { LodashUtilities } from '../../../capsulation/lodash.utilities';\nimport { BaseEntityType } from '../../../classes/entity.model';\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})\nexport class NgxMatEntityEditDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityTabs!: EntityTab<EntityType>[];\n\n entityService!: EntityService<EntityType>;\n\n entityPriorChanges!: EntityType;\n\n data!: EditEntityDialogDataInternal<EntityType>;\n\n isEntityValid: boolean = true;\n isEntityDirty: Promise<boolean> = (async () => false).call(this);\n\n isReadOnly!: boolean;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: EditEntityDialogData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityEditDialogComponent<EntityType>>,\n private readonly injector: Injector,\n private readonly dialog: MatDialog\n ) {}\n\n ngOnInit(): void {\n this.data = new EditEntityDialogDataBuilder(this.inputData).getResult();\n this.isReadOnly = !this.data.allowUpdate(this.entityPriorChanges);\n this.dialogRef.disableClose = true;\n this.entityTabs = EntityUtilities.getEntityTabs(this.data.entity, false, true);\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.data.entity);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n checkEntity(): void {\n this.isEntityValid = EntityUtilities.isEntityValid(this.data.entity, 'update');\n this.isEntityDirty = EntityUtilities.isDirty(this.data.entity, this.entityPriorChanges);\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.data.editDialogData.editRequiresConfirmDialog) {\n this.confirmEdit();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.editDialogData.confirmEditDialogData)\n .withDefault('text', ['Do you really want to save all changes?'])\n .withDefault('confirmButtonLabel', 'Save')\n .withDefault('title', 'Edit')\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\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.editDialogData.deleteRequiresConfirmDialog) {\n this.confirmDelete();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.editDialogData.confirmDeleteDialogData)\n .withDefault('text', ['Do you really want to delete this entity?'])\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', 'Delete')\n .withDefault('title', 'Delete')\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\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 * Reverts all changes made and closes the dialog.\n */\n cancel(): void {\n EntityUtilities.resetChangesOnEntity(this.data.entity, this.entityPriorChanges);\n this.dialogRef.close(0);\n }\n}","<h2 mat-dialog-title>\n {{data.editDialogData.title(data.entity)}}\n <button *ngIf=\"data.allowDelete(data.entity)\" mat-raised-button (click)=\"delete()\" color=\"warn\" class=\"delete-button\" tabindex=\"-1\">\n {{data.editDialogData.deleteButtonLabel}}\n </button>\n</h2>\n\n<mat-dialog-content>\n <form #form=\"ngForm\" class=\"row\">\n <mat-tab-group *ngIf=\"entityTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of entityTabs\" [label]=\"tab.tabName\">\n <div class=\"row\" *ngFor=\"let row of tab.rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkEntity()\"\n [isReadOnly]=\"isReadOnly\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"entityTabs.length <= 1\">\n <div class=\"row\" *ngFor=\"let row of entityTabs[0].rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkEntity()\"\n [isReadOnly]=\"isReadOnly\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"edit()\" [disabled]=\"isReadOnly || !isEntityValid || (isEntityDirty | async) === false\">\n {{data.editDialogData.confirmButtonLabel}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.editDialogData.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>\n","import { EntityService } from '../../classes/entity.service';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from './create-dialog/create-dialog-data.builder';\nimport { EditDialogDataBuilder, EditDialogDataInternal } from './edit-dialog/edit-dialog-data.builder';\nimport { BaseData, DisplayColumn, MultiSelectAction, TableData } from './table-data';\nimport { HttpClient } from '@angular/common/http';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\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 createDialogData: CreateDialogDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editDialogData: EditDialogDataInternal<EntityType>;\n\n constructor(\n baseData: BaseDataInternal<EntityType>,\n createDialogData: CreateDialogDataInternal,\n editDialogData: EditDialogDataInternal<EntityType>\n ) {\n this.baseData = baseData;\n this.createDialogData = createDialogData;\n this.editDialogData = editDialogData;\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>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: BaseData<EntityType>): BaseDataInternal<EntityType> {\n return new BaseDataInternal<EntityType>(\n data.title,\n data.displayColumns,\n data.EntityServiceClass,\n data.searchLabel ?? 'Search',\n data.createButtonLabel ?? 'Create',\n data.searchString ?? defaultSearchFunction,\n data.allowCreate ?? (() => true),\n data.allowRead ?? (() => true),\n data.allowUpdate ?? (() => true),\n data.allowDelete ?? (() => true),\n data.multiSelectActions ?? [],\n data.multiSelectLabel ?? 'Actions',\n data.EntityClass,\n data.edit,\n data.create\n );\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: new (httpClient: HttpClient) => EntityService<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 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 multiSelectActions: MultiSelectAction<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n multiSelectLabel: string;\n\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 title: string,\n displayColumns: DisplayColumn<EntityType>[],\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>,\n searchLabel: string,\n createButtonLabel: string,\n searchString: (entity: EntityType) => string,\n allowCreate: () => boolean,\n allowRead: (entity: EntityType) => boolean,\n allowUpdate: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean,\n multiSelectActions: MultiSelectAction<EntityType>[],\n multiSelectLabel: string,\n EntityClass?: EntityClassNewable<EntityType>,\n edit?: (entity: EntityType) => unknown,\n create?: (entity: EntityType) => unknown,\n ) {\n this.title = title;\n this.displayColumns = displayColumns;\n this.EntityServiceClass = EntityServiceClass;\n this.EntityClass = EntityClass;\n this.searchLabel = searchLabel;\n this.createButtonLabel = createButtonLabel;\n this.searchString = searchString;\n this.allowCreate = allowCreate;\n this.allowRead = allowRead;\n this.allowUpdate = allowUpdate;\n this.allowDelete = allowDelete;\n this.multiSelectActions = multiSelectActions;\n this.multiSelectLabel = multiSelectLabel;\n this.edit = edit;\n this.create = create;\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(data: TableData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: TableData<EntityType>): TableDataInternal<EntityType> {\n const createDialogData: CreateDialogDataInternal = new CreateDialogDataBuilder(data.createDialogData).getResult();\n const editDialogData: EditDialogDataInternal<EntityType> = new EditDialogDataBuilder(data.editDialogData).getResult();\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.baseData).getResult();\n return new TableDataInternal<EntityType>(\n baseData,\n createDialogData,\n editDialogData\n );\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected override validateInput(data: TableData<EntityType>): void {\n if (data.baseData.multiSelectActions?.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 (\n data.baseData.allowCreate !== (() => false)\n || data.baseData.allowRead !== (() => false)\n || data.baseData.allowUpdate !== (() => false)\n || data.baseData.allowDelete !== (() => false)\n )\n && !data.baseData.EntityClass\n ) {\n throw new Error(`\n Missing required Input data \"EntityClass\".\n You can only omit this value if you can neither create or update entities.`\n );\n }\n if (data.baseData.allowCreate !== (() => false) && !data.baseData.create && !data.createDialogData) {\n throw new Error(\n `Missing required Input data \"createDialogData\".\n You can only omit this value when creation is disallowed or done with a custom create method.`\n );\n }\n if (\n (\n data.baseData.allowRead !== (() => false)\n || data.baseData.allowUpdate !== (() => false)\n || data.baseData.allowDelete !== (() => false)\n )\n && !data.baseData.edit\n && !data.editDialogData\n ) {\n throw new Error(\n `Missing required Input data \"editDialogData\".\n You can only omit this value when viewing, editing and deleting is disallowed or done with a custom edit method.`\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 *\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 */\nfunction defaultSearchFunction<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): string {\n const searchString = 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 { Component, Injector, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { EntityService } from '../../classes/entity.service';\nimport { firstValueFrom, Subject, takeUntil } from 'rxjs';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';\nimport { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';\nimport { EditEntityDialogData } from './edit-dialog/edit-entity-dialog-data';\nimport { MultiSelectAction, TableData } from './table-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateEntityDialogDataBuilder, CreateEntityDialogDataInternal } from './create-dialog/create-entity-dialog-data.builder';\nimport { TableDataBuilder, TableDataInternal } from './table-data.builder';\nimport { EditEntityDialogDataBuilder, EditEntityDialogDataInternal } from '../table/edit-dialog/edit-entity-dialog.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\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})\nexport class NgxMatEntityTableComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit, OnDestroy {\n\n /**\n * The configuration for the component.\n */\n @Input()\n tableData!: TableData<EntityType>;\n\n data!: TableDataInternal<EntityType>;\n\n private entityService!: EntityService<EntityType>;\n private readonly onDestroy = new Subject<void>();\n @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator;\n @ViewChild(MatSort, { static: true }) sort!: MatSort;\n @ViewChild('filter', { static: true }) filter!: string;\n displayedColumns!: string[];\n dataSource: MatTableDataSource<EntityType> = new MatTableDataSource();\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n\n constructor(private readonly dialog: MatDialog, private readonly injector: Injector) {}\n\n /**\n * Sets up all the configuration for the table and the EntityService.\n */\n ngOnInit(): void {\n this.data = new TableDataBuilder(this.tableData).getResult();\n\n this.entityService = this.injector.get(this.data.baseData.EntityServiceClass) as EntityService<EntityType>;\n\n const givenDisplayColumns = this.data.baseData.displayColumns.map((v) => v.displayName);\n if (this.data.baseData.multiSelectActions.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 this.data.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity) as string;\n };\n this.dataSource.sort = this.sort;\n this.dataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr = this.data.baseData.searchString(entity) ;\n const formattedSearchString = searchStr.toLowerCase();\n const formattedFilterString = 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.pipe(takeUntil(this.onDestroy)).subscribe((entities) => {\n this.dataSource.data = entities;\n this.selection.clear();\n });\n void this.entityService.read();\n }\n\n /**\n * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.\n *\n * @param entity - The entity that should be updated.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n editEntity(entity: EntityType): void {\n if (!(this.data.baseData.allowUpdate(entity) || this.data.baseData.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 }\n else {\n void this.editDefault(new this.data.baseData.EntityClass(entity));\n }\n }\n\n private async editDefault(entity: EntityType): Promise<void> {\n const inputDialogData: EditEntityDialogData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n allowUpdate: this.data.baseData.allowUpdate,\n allowDelete: this.data.baseData.allowDelete,\n editDialogData: this.data.editDialogData\n };\n const dialogData: EditEntityDialogDataInternal<EntityType> = new EditEntityDialogDataBuilder(inputDialogData).getResult();\n const res: number = await firstValueFrom(\n this.dialog.open(NgxMatEntityEditDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }).afterClosed()\n ) as number;\n if (res === 0) {\n const data = 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 *\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n createEntity(): void {\n if (this.data.baseData.allowCreate()) {\n if (!this.data.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.data.baseData.create) {\n this.data.baseData.create(new this.data.baseData.EntityClass());\n }\n else {\n this.createDefault(new this.data.baseData.EntityClass());\n }\n }\n }\n\n private createDefault(entity: EntityType): void {\n const dialogData: CreateEntityDialogDataInternal<EntityType> = new CreateEntityDialogDataBuilder(\n {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n createDialogData: this.data.createDialogData\n }\n ).getResult();\n this.dialog.open(NgxMatEntityCreateDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n });\n }\n\n /**\n * Runs the MultiAction for all selected entries.\n * Also handles confirmation with an additional dialog if configured.\n *\n * @param action - The MultiAction to run.\n */\n runMultiAction(action: MultiSelectAction<EntityType>): void {\n if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {\n this.confirmRunMultiAction(action);\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(action.confirmDialogData)\n .withDefault('text', [`Do you really want to run this action on ${this.selection.selected.length} entries?`])\n .withDefault('title', action.displayName)\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\n this.confirmRunMultiAction(action);\n }\n });\n }\n\n private confirmRunMultiAction(action: MultiSelectAction<EntityType>): void {\n action.action(this.selection.selected);\n }\n\n /**\n * Checks if an MultiAction is disabled (e.g. Because no entries have been selected).\n *\n * @param action - The MultiAction to check.\n * @returns Whether or not the Action can be used.\n */\n multiActionDisabled(action: MultiSelectAction<EntityType>): boolean {\n if (!this.selection.selected.length) {\n return true;\n }\n if (action.enabled?.(this.selection.selected) === false) {\n return true;\n }\n return false;\n }\n\n /**\n * Toggles all entries in the table.\n */\n masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n }\n else {\n this.dataSource.data.forEach(row => this.selection.select(row));\n }\n }\n\n /**\n * Checks if all entries in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n *\n * @returns Whether or not all entries in the table have been selected.\n */\n isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next(undefined);\n this.onDestroy.complete();\n }\n\n /**\n * Applies the search input to filter the table entries.\n *\n * @param event - The keyup-event which contains the search-string of the user.\n */\n applyFilter(event: Event): void {\n const filterValue = (event.target as HTMLInputElement).value;\n this.dataSource.filter = filterValue.trim().toLowerCase();\n }\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.multiSelectActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate()\"\n [class.col-lg-4]=\"!data.baseData.allowCreate()\"\n [class.col-md-3]=\"data.baseData.allowCreate()\"\n [class.col-md-6]=\"!data.baseData.allowCreate()\"\n [class.col-sm-6]=\"data.baseData.allowCreate()\"\n [class.col-sm-12]=\"!data.baseData.allowCreate()\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.multiSelectLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of data.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate()\"\n [class.col-lg-2]=\"data.baseData.multiSelectActions.length\"\n [class.col-lg-4]=\"!data.baseData.multiSelectActions.length\"\n [class.col-md-3]=\"data.baseData.multiSelectActions.length\"\n [class.col-md-6]=\"!data.baseData.multiSelectActions.length\"\n [class.col-sm-6]=\"data.baseData.multiSelectActions.length\"\n [class.col-sm-12]=\"!data.baseData.multiSelectActions.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </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 class=\"entity\" [class.enabled]=\"data.baseData.allowUpdate(entity) || data.baseData.allowRead(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityCreateDialogComponent } from './create-entity-dialog.component';\nimport { NgxMatEntityInputModule } from '../../input/input.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@NgModule({\n declarations: [NgxMatEntityCreateDialogComponent],\n imports: [\n CommonModule,\n NgxMatEntityInputModule,\n MatDialogModule,\n FormsModule,\n MatButtonModule,\n MatTabsModule\n ],\n exports: [NgxMatEntityCreateDialogComponent]\n})\nexport class NgxMatEntityCreateDialogModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityEditDialogComponent } from './edit-entity-dialog.component';\nimport { NgxMatEntityInputModule } from '../../input/input.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgxMatEntityConfirmDialogModule } from '../../confirm-dialog/confirm-dialog.module';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@NgModule({\n declarations: [ NgxMatEntityEditDialogComponent],\n imports: [\n CommonModule,\n NgxMatEntityInputModule,\n MatDialogModule,\n FormsModule,\n MatButtonModule,\n MatTabsModule,\n NgxMatEntityConfirmDialogModule\n ],\n exports: [ NgxMatEntityEditDialogComponent]\n})\nexport class NgxMatEntityEditDialogModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityTableComponent } from './table.component';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { NgxMatEntityCreateDialogModule } from './create-dialog/create-entity-dialog.module';\nimport { NgxMatEntityEditDialogModule } from './edit-dialog/edit-entity-dialog.module';\n\n@NgModule({\n declarations: [NgxMatEntityTableComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatTableModule,\n MatPaginatorModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n NgxMatEntityCreateDialogModule,\n NgxMatEntityEditDialogModule,\n ],\n exports: [NgxMatEntityTableComponent]\n})\nexport class NgxMatEntityTableModule {}","import { CreateDialogData } from '../../components/table/table-data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { ArrayDecoratorConfig, ArrayTableDisplayColumn, AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { DateUtilities } from '../../classes/date.utilities';\nimport { DateRange } from '../date/date-decorator.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\n\n/**\n * The internal EntityArrayDecoratorConfig. Sets default values.\n */\nexport class EntityArrayDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal 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: ArrayTableDisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData?: CreateDialogData;\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>) {\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);\n this.EntityClass = data.EntityClass;\n this.displayColumns = data.displayColumns;\n this.createInline = data.createInline ?? true;\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n }\n}\n\n/**\n * The internal DateArrayDecoratorConfig. Sets default values.\n */\nexport class DateArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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: ArrayTableDisplayColumn<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) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\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 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: ArrayTableDisplayColumn<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) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = data.timeDisplayName ?? 'Time';\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 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: ArrayTableDisplayColumn<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) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\n this.placeholderStart = data.placeholderStart ?? 'Start';\n this.placeholderEnd = data.placeholderEnd ?? 'End';\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 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) {\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);\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 implements AutocompleteStringChipsArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n autocompleteValues: 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\n constructor(data: AutocompleteStringChipsArrayDecoratorConfig) {\n super(data);\n this.autocompleteValues = 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);\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 * Gets the default dialog data for the error dialog to display when the user tries to add a duplicate value.\n *\n * @param data - The Array Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultDuplicateErrorDialogData(data: ArrayDecoratorConfig): ConfirmDialogData {\n return {\n type: data.duplicatesErrorDialog?.type ?? 'info-only',\n // eslint-disable-next-line max-len\n text: data.duplicatesErrorDialog?.text ?? ['Adding duplicate entries to the array is not allowed.'],\n title: data.duplicatesErrorDialog?.title ?? 'Error adding duplicate item',\n confirmButtonLabel: data.duplicatesErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.duplicatesErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.duplicatesErrorDialog?.requireConfirmation,\n confirmationText: data.duplicatesErrorDialog?.confirmationText\n };\n}","import { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from './array-decorator-internal.data';\nimport { AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\n\n/**\n * Decorator for setting and getting array property metadata.\n *\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), DecoratorTypes.ARRAY);\n case DecoratorTypes.DATE:\n return baseProperty(new DateArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_DATE);\n case DecoratorTypes.DATE_TIME:\n return baseProperty(new DateTimeArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_DATE_TIME);\n case DecoratorTypes.DATE_RANGE:\n return baseProperty(new DateRangeArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_DATE_RANGE);\n case DecoratorTypes.STRING:\n return baseProperty(new StringChipsArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_STRING_CHIPS);\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n return baseProperty(\n new AutocompleteStringChipsArrayDecoratorConfigInternal(metadata),\n DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\n );\n default:\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n throw new Error(`Unknown itemType ${(metadata as any).itemType}`);\n }\n}","/**\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 {\n /**\n * Whether or not the Property is displayed at all.\n *\n * @default true\n */\n display?: 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 *\n * @default true\n */\n required?: boolean;\n /**\n * Whether or not the property gets omitted when creating new Entities.\n *\n * @default false\n */\n omitForCreate?: boolean;\n /**\n * Whether or not the property gets omitted when updating Entities.\n *\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 *\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 *\n * @default { row: -1, order: -1} (Adds the property at the end)\n */\n position?: Position;\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 *\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 *\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 *\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 *\n * @default -1 (sets this property at the end of the row)\n */\n order?: number\n}","import { CreateDialogData } from '../../components/table/table-data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { DateRange } from '../date/date-decorator.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\n\n/**\n * The configuration options for an array property displayed as a table.\n */\nexport interface ArrayTableDisplayColumn<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The name inside the header.\n */\n displayName: string,\n /**\n * A method to get the value inside an row.\n */\n value: (entity: EntityType) => string\n}\n\n/**\n * Interface definition for the @array metadata.\n */\nexport abstract class ArrayDecoratorConfig extends PropertyDecoratorConfig {\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 *\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 * Definition for an array of Entities.\n */\nexport interface EntityArrayDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ArrayDecoratorConfig {\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: ArrayTableDisplayColumn<EntityType>[],\n\n /**\n * The data for the add-item-dialog.\n * Can be omitted when adding items inline.\n */\n createDialogData?: CreateDialogData,\n\n /**\n * Whether or not the form for adding items to the array\n * should be displayed inline.\n *\n * @default true\n */\n createInline?: boolean,\n\n /**\n * The label for the add button when createInline is true.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button when createInline is true.\n *\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 {\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: ArrayTableDisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n *\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 {\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: ArrayTableDisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n *\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 *\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 {\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: ArrayTableDisplayColumn<DateRange>[],\n\n /**\n * The label for the add button.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n *\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 *\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n *\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 {\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 *\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 {\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 *\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string,\n /**\n * The autocomplete values.\n */\n autocompleteValues: 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}","import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\n\n/**\n * The internal DropdownBooleanDecoratorConfig. Sets default values.\n */\nexport class DropdownBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownTrue = data.dropdownTrue;\n this.dropdownFalse = data.dropdownFalse;\n }\n}\n\n/**\n * The internal CheckboxBooleanDecoratorConfig. Sets default values.\n */\nexport class CheckboxBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 = data.required ?? false;\n }\n}\n\n/**\n * The internal ToggleBooleanDecoratorConfig. Sets default values.\n */\nexport class ToggleBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 = data.required ?? false;\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from './boolean-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\n\n/**\n * Decorator for setting and getting boolean property metadata.\n *\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(new DropdownBooleanDecoratorConfigInternal(metadata), DecoratorTypes.BOOLEAN_DROPDOWN);\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 { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * The Definition for the @boolean metadata.\n */\nabstract class BooleanDecoratorConfig extends PropertyDecoratorConfig {\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 */\n dropdownTrue: string,\n /**\n * The name of the false value if displayStyle dropdown is used.\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 { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { DateUtilities } from '../../classes/date.utilities';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\n\n/**\n * The internal DefaultDateDecoratorConfig. Sets default values.\n */\nexport class DefaultDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 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) {\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 = data.placeholderStart ?? 'Start';\n this.placeholderEnd = data.placeholderEnd ?? 'End';\n }\n}\n\n/**\n * The internal DateTimeDateDecoratorConfig. Sets default values.\n */\nexport class DateTimeDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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>[];\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) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = data.timeDisplayName ?? 'Time';\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}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from './date-decorator-internal.data';\nimport { DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\n\n/**\n * Decorator for setting and getting date property metadata.\n *\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(new DateTimeDateDecoratorConfigInternal(metadata), DecoratorTypes.DATE_TIME);\n }\n else {\n return baseProperty(new DateRangeDateDecoratorConfigInternal(metadata), DecoratorTypes.DATE_RANGE);\n }\n}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\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 extends PropertyDecoratorConfig {\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 {\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 {\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 *\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n *\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 {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'datetime',\n /**\n * The selectable times.\n */\n times?: DropdownValue<Time>[],\n /**\n * The name to use as a label for the time form field.\n *\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 { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class DefaultNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 implements DropdownNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<number>[];\n\n constructor(data: DropdownNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = data.dropdownValues;\n }\n}\n\n/**\n * The internal SliderNumberDecoratorConfig. Sets default values.\n */\nexport class SliderNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 | number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tickInterval?: number | 'auto';\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.tickInterval = data.tickInterval;\n }\n}\n\n/**\n * The default function to format values for the number slider thumb label.\n *\n * @param value - The value of the slider.\n * @returns Just the value without any formatting done.\n */\nexport function defaultFormatThumbLabelValue(value: number): number {\n return value;\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from './number-decorator-internal.data';\n\n/**\n * Decorator for setting and getting number property metadata.\n *\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 { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @number metadata.\n */\nabstract class NumberDecoratorConfig extends PropertyDecoratorConfig {\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 // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<number>[]\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 | number,\n /**\n * How often ticks should be displayed.\n */\n tickInterval?: 'auto' | number\n}","import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultObjectDecoratorConfig } from './object-decorator.data';\n\n/**\n * The internal DefaultObjectDecoratorConfig. Sets default values.\n */\nexport class DefaultObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal implements DefaultObjectDecoratorConfig<EntityType> {\n\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\n constructor(data: DefaultObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.EntityClass = data.EntityClass;\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultObjectDecoratorConfig } from './object-decorator.data';\nimport { DefaultObjectDecoratorConfigInternal } from './object-decorator-internal.data';\nimport { BaseEntityType } from '../../classes/entity.model';\n\n/**\n * Decorator for setting and getting object property metadata.\n *\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>\n): (target: object, propertyKey: string) => void {\n return baseProperty(new DefaultObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT);\n}","import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @object metadata.\n */\nabstract class ObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends PropertyDecoratorConfig {\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!: 'inline';\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}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @string metadata.\n */\nabstract class StringDecoratorConfig extends PropertyDecoratorConfig {\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 // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<string>[]\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: 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 * 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 *\n * @default true\n */\n needsConfirmation?: boolean,\n /**\n * The display name of the confirmation password input.\n *\n * @default 'Confirm Password'\n */\n confirmationDisplayName?: string,\n /**\n * The error message to display when the password and the confirm password don't match.\n *\n * @default 'Passwords need to match!'\n */\n passwordsDontMatchErrorMessage?: string\n}","import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultFileDecoratorConfig, ImageFileDecoratorConfig } from './file-decorator.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 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 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 *\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 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 ? '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 *\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 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 ? '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 *\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 // eslint-disable-next-line max-len\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 { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from './file-decorator-internal.data';\nimport { DefaultFileDecoratorConfig, ImageFileDecoratorConfig } from './file-decorator.data';\n\n/**\n * Decorator for setting and getting file property metadata.\n *\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(new DefaultFileDecoratorConfigInternal(metadata), DecoratorTypes.FILE_DEFAULT);\n case 'image':\n return baseProperty(new ImageFileDecoratorConfigInternal(metadata), DecoratorTypes.FILE_IMAGE);\n default:\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n throw new Error(`Unknown metadata type ${(metadata as any).type}`);\n }\n}","import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\nimport { FileDataWithFile, FileDataWithUrl } from './file-decorator-internal.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 {\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 *\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 *\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 *\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 *\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 *\n * @default 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 *\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 { Type } from '@angular/core';\nimport { LodashUtilities } from '../../capsulation/lodash.utilities';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../components/input/base-input.component';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { CustomDecoratorConfig } from './custom-decorator.data';\n\n/**\n * The default function to use for checking if the value is dirty.\n *\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, MetadataType>\n> extends PropertyDecoratorConfigInternal 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, max-len\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 ?? (() => true);\n this.isEqual = data.isEqual ?? defaultIsEqual;\n this.customMetadata = data.customMetadata;\n }\n}","import { BaseEntityType } from '../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../components/input/base-input.component';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { CustomDecoratorConfigInternal } from './custom-decorator-internal.data';\nimport { CustomDecoratorConfig } from './custom-decorator.data';\n\n/**\n * Decorator for setting and getting custom property metadata.\n *\n * @param metadata - The metadata of the custom property.\n * @returns The method that defines the metadata.\n */\nexport function custom<\n ValueType,\n MetadataType extends BaseEntityType<MetadataType>,\n EntityType extends BaseEntityType<EntityType>\n>(\n metadata: CustomDecoratorConfig<\n EntityType,\n ValueType,\n MetadataType,\n NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, MetadataType>\n >\n): (target: object, propertyKey: string) => void {\n return baseProperty<DecoratorTypes.CUSTOM, MetadataType>(new CustomDecoratorConfigInternal(metadata), DecoratorTypes.CUSTOM);\n}","/**\n * Public API Surface of ngx-material-entity.\n */\nimport 'reflect-metadata';\n\n// classes\nexport * from './classes/entity.model';\nexport * from './classes/entity.service';\nexport * from './classes/entity.utilities';\nexport * from './classes/date.utilities';\nexport * from './classes/file.utilities';\n\n// components\nexport * from './components/confirm-dialog/confirm-dialog-data';\nexport * from './components/confirm-dialog/confirm-dialog.component';\nexport * from './components/confirm-dialog/confirm-dialog.module';\n\nexport * from './components/input/input.module';\nexport * from './components/input/input.component';\n\nexport * from './components/table/table-data';\nexport * from './components/table/table.component';\nexport * from './components/table/table.module';\n\nexport * from './components/table/create-dialog/create-entity-dialog-data';\nexport * from './components/table/create-dialog/create-entity-dialog.module';\nexport * from './components/table/create-dialog/create-entity-dialog.component';\n\nexport * from './components/table/edit-dialog/edit-entity-dialog-data';\nexport * from './components/table/edit-dialog/edit-entity-dialog.module';\nexport * from './components/table/edit-dialog/edit-entity-dialog.component';\n\nexport * from './components/get-validation-error-message.function';\n\nexport * from './components/input/base-input.component';\n\n// decorators\nexport * from './decorators/array/array.decorator';\nexport * from './decorators/array/array-decorator.data';\n\nexport * from './decorators/base/decorator-types.enum';\nexport * from './decorators/base/dropdown-value.interface';\nexport { Col, Position } from './decorators/base/property-decorator.data';\n\nexport * from './decorators/boolean/boolean.decorator';\nexport * from './decorators/boolean/boolean-decorator.data';\n\nexport * from './decorators/date/date.decorator';\nexport * from './decorators/date/date-decorator.data';\n\nexport * from './decorators/number/number.decorator';\nexport * from './decorators/number/number-decorator.data';\n\nexport * from './decorators/object/object.decorator';\nexport * from './decorators/object/object-decorator.data';\n\nexport * from './decorators/string/string.decorator';\nexport * from './decorators/string/string-decorator.data';\n\nexport * from './decorators/file/file.decorator';\nexport * from './decorators/file/file-decorator.data';\n\nexport * from './decorators/custom/custom.decorator';\nexport * from './decorators/custom/custom-decorator.data';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i5","defaultGetValidationErrorMessage","i1","i2","i3","i7","i8","i6","i9","i10","i7.DragDropDirective","i1.FileInputComponent","i2.StringInputComponent","i3.StringTextboxInputComponent","i4.StringAutocompleteInputComponent","i5.StringDropdownInputComponent","i6.StringPasswordInputComponent","i7.BooleanCheckboxInputComponent","i8.BooleanToggleInputComponent","i9.BooleanDropdownInputComponent","i10.NumberInputComponent","i11.NumberDropdownInputComponent","i12.NumberSliderInputComponent","i14","i15","i16","i17.ArrayDateInputComponent","i18.ArrayDateTimeInputComponent","i19.ArrayDateRangeInputComponent","i20.ArrayStringChipsInputComponent","i21.ArrayStringAutocompleteChipsComponent","i22.DateInputComponent","i23.DateRangeInputComponent","i24.DateTimeInputComponent","i25.FileDefaultInputComponent","i26.FileImageInputComponent","i27.CustomInputComponent","i28","i29","i3.NgxMatEntityInputComponent","i4.NgxMatEntityInputComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-material-entity.mjs","sources":["../../../projects/ngx-material-entity/src/capsulation/reflect.utilities.ts","../../../projects/ngx-material-entity/src/decorators/base/base-property.decorator.ts","../../../projects/ngx-material-entity/src/decorators/base/decorator-types.enum.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/decorators/string/string.decorator.ts","../../../projects/ngx-material-entity/src/capsulation/lodash.utilities.ts","../../../projects/ngx-material-entity/src/classes/date.utilities.ts","../../../projects/ngx-material-entity/src/capsulation/jszip.utilities.ts","../../../projects/ngx-material-entity/src/classes/file.utilities.ts","../../../projects/ngx-material-entity/src/classes/entity.utilities.ts","../../../projects/ngx-material-entity/src/classes/entity.model.ts","../../../projects/ngx-material-entity/src/classes/entity.service.ts","../../../projects/ngx-material-entity/src/classes/base.builder.ts","../../../projects/ngx-material-entity/src/components/confirm-dialog/confirm-dialog-data.builder.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/components/confirm-dialog/confirm-dialog.module.ts","../../../projects/ngx-material-entity/src/components/get-validation-error-message.function.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/input/add-array-item-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/input/base-input.component.ts","../../../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/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/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-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/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/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/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/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-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-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/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/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/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/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-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/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/mocks/placeholder-data.png.ts","../../../projects/ngx-material-entity/src/components/input/file/file-input/dragDrop.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-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/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/components/input/custom/custom.component.ts","../../../projects/ngx-material-entity/src/components/input/custom/custom.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/input/input.module.ts","../../../projects/ngx-material-entity/src/components/table/create-dialog/create-entity-dialog-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/components/table/edit-dialog/edit-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.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/components/table/table-data.builder.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/components/table/create-dialog/create-entity-dialog.module.ts","../../../projects/ngx-material-entity/src/components/table/edit-dialog/edit-entity-dialog.module.ts","../../../projects/ngx-material-entity/src/components/table/table.module.ts","../../../projects/ngx-material-entity/src/decorators/array/array-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/array/array.decorator.ts","../../../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/boolean/boolean-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean.decorator.ts","../../../projects/ngx-material-entity/src/decorators/boolean/boolean-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/date/date-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/decorators/date/date.decorator.ts","../../../projects/ngx-material-entity/src/decorators/date/date-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/number/number-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/object/object-decorator.data.ts","../../../projects/ngx-material-entity/src/decorators/string/string-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/file/file-decorator.data.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/public-api.ts","../../../projects/ngx-material-entity/src/ngx-material-entity.ts"],"sourcesContent":["\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 *\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 *\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 return Reflect.ownKeys(target) as (keyof T)[];\n }\n\n /**\n * Gets the property of target, equivalent to `target[propertyKey]`.\n *\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 *\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 *\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 * Define a unique metadata entry on the target.\n *\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 { ReflectUtilities } from '../../capsulation/reflect.utilities';\nimport { DecoratorType, DecoratorTypes } from './decorator-types.enum';\n\n/**\n * The base decorator for setting metadata on properties.\n *\n * @param metadata - The metadata to define.\n * @param type - The type of metadata.\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) {\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}","import { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal } 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 { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from '../number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../object/object-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 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 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-eslint/no-explicit-any\n : T extends DecoratorTypes.OBJECT ? DefaultObjectDecoratorConfigInternal<any>\n // eslint-disable-next-line @typescript-eslint/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-eslint/no-explicit-any\n : T extends DecoratorTypes.CUSTOM ? CustomDecoratorConfigInternal<any, any, CustomMetadataType, any>\n : never;","import { Col, Position, PropertyDecoratorConfig } from './property-decorator.data';\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) {\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 minimum value for a bootstrap column)');\n }\n }\n if (data?.row != null && data.row < 1) {\n throw new Error('row must be at least 1');\n }\n if (data?.tab != null && data.tab < 2) {\n throw new Error('tab must be at least 2');\n }\n }\n}\n\n/**\n * The internal PropertyDecoratorConfig. Sets default values.\n */\nexport abstract class PropertyDecoratorConfigInternal implements PropertyDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n display: boolean;\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayName: string;\n // eslint-disable-next-line jsdoc/require-jsdoc\n required: 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\n constructor(data: PropertyDecoratorConfig) {\n this.display = data.display ?? true;\n this.displayName = data.displayName;\n this.required = 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 }\n}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\n\n/**\n * The internal DropdownStringDecoratorConfig. Sets default values.\n */\nexport class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DropdownStringDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<string>[];\n\n constructor(data: DropdownStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = data.dropdownValues;\n }\n}\n\n/**\n * The internal DefaultStringDecoratorConfig. Sets default values.\n */\nexport class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 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 implements AutocompleteStringDecoratorConfig {\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'autocomplete';\n // eslint-disable-next-line jsdoc/require-jsdoc\n autocompleteValues: 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: AutocompleteStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.autocompleteValues = data.autocompleteValues;\n this.minLength = data.minLength;\n this.maxLength = data.maxLength;\n this.regex = data.regex;\n }\n}\n\n/**\n * The internal PasswordStringDecoratorConfig. Sets default values.\n */\nexport class PasswordStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal 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 passwordsDontMatchErrorMessage: string;\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.passwordsDontMatchErrorMessage = data.passwordsDontMatchErrorMessage ?? 'Passwords need to match!';\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from './string-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, PasswordStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\n\n/**\n * Decorator for setting and getting string Property metadata.\n *\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(new PasswordStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_PASSWORD);\n default:\n return baseProperty(new DefaultStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING);\n }\n}","import { cloneDeep, Dictionary, isArray, isEqual, isNil, Many, omit, omitBy, ValueKeyIteratee } 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 *\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 *\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 *\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 *\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 *\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>(object: Dictionary<T> | null | undefined, predicate?: ValueKeyIteratee<T>): Dictionary<T> {\n return omitBy(object, predicate);\n }\n\n /**\n * Checks if value is classified as an Array object.\n *\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}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { DropdownValue } from '../decorators/base/dropdown-value.interface';\n\nconst DAY_IN_MS = 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> = () => true;\n\n /**\n * Gets the given value as a date value.\n *\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 *\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 = 0; hour < 24; hour++) {\n for (let minute = 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 = `${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 *\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 *\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 *\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>[],\n date?: Date,\n min?: (date?: Date) => Time,\n max?: (date?: Date) => Time,\n filter?: ((time: Time) => boolean) | (() => boolean)\n ): DropdownValue<Time>[] {\n if (min) {\n const minTime: Time = min(date);\n times = times.filter(t =>\n !(t.value as Time | undefined)\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 as Time | undefined)\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 as Time | undefined) || 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 *\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\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// eslint-disable-next-line no-duplicate-imports\nimport * as JSZipType from 'jszip'; // <-- This is needed to provide type safety.\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 *\n * @returns A new JSZip object.\n */\n static new(): JSZipType {\n return new JSZip() as JSZipType;\n }\n}","import { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { FileDataWithFile } from '../decorators/file/file-decorator-internal.data';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { JSZipUtilities } from '../capsulation/jszip.utilities';\n\n/**\n * Provides functionality regarding files.\n */\nexport abstract class FileUtilities {\n /**\n * Gets the accept value for the html input.\n *\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 *\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 = 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 *\n * @param url - The url to get the file from.\n * @returns A promise of the File.\n */\n private static async getFileFromUrl(url: string): Promise<Blob> {\n const res = await fetch(url);\n if (!res.ok) {\n // TODO make error more robust\n throw new Error(`Error fetching the file from the url ${url}`);\n }\n return await res.blob();\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 *\n * @param data - The File Data to get the file data with blob from.\n * @returns FileDataWithFile.\n */\n static async getFileData(data: FileData): 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),\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 *\n * @param fileData - The file data. Needs to contain a blob.\n */\n static downloadSingleFile(fileData: FileDataWithFile): void {\n const a = document.createElement('a');\n const objectUrl = URL.createObjectURL(fileData.file);\n a.href = objectUrl;\n a.download = fileData.name;\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 *\n * @param name - The name of the zip file to generate.\n * @param multiFileData - The file data array to put in the zip.\n */\n static async downloadMultipleFiles(name: string, multiFileData: FileData[]): Promise<void> {\n const zip = JSZipUtilities.new();\n for (let i = 0; i < multiFileData.length; i++) {\n multiFileData[i] = await FileUtilities.getFileData(multiFileData[i]);\n zip.file(multiFileData[i].name, (multiFileData[i] as FileDataWithFile).file);\n }\n const zipBlob = 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 *\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 *\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 = 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 { DecoratorType, DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { DateRangeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { DefaultStringDecoratorConfigInternal, PasswordStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../decorators/string/string-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal } from '../decorators/number/number-decorator-internal.data';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from '../decorators/date/date-decorator-internal.data';\nimport { DateRange } from '../decorators/date/date-decorator.data';\nimport { Time } from '@angular/common';\nimport { DateUtilities } from './date.utilities';\nimport { ReflectUtilities } from '../capsulation/reflect.utilities';\nimport { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { ToggleBooleanDecoratorConfigInternal } from '../decorators/boolean/boolean-decorator-internal.data';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { DefaultFileDecoratorConfigInternal } from '../decorators/file/file-decorator-internal.data';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from './entity.model';\nimport { CustomDecoratorConfigInternal } from '../decorators/custom/custom-decorator-internal.data';\n\n/**\n * Shows information about differences between two entities.\n */\ninterface 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 * Gets the properties to omit when updating the entity.\n *\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 of EntityUtilities.keysOf(entity)) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n if (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 *\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 of EntityUtilities.keysOf(entity)) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n if (metadata.omitForCreate) {\n res.push(key);\n }\n }\n return res;\n }\n\n /**\n * Gets all properties on the given entity which are files.\n *\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 of EntityUtilities.keysOf(entity)) {\n const type = EntityUtilities.getPropertyType(entity, key);\n if (type === DecoratorTypes.FILE_DEFAULT || type === DecoratorTypes.FILE_IMAGE) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\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 *\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 @typescript-eslint/no-unused-vars\n type?: T\n ): DecoratorType<T, CustomMetadataType> {\n const metadata = ReflectUtilities.getMetadata('metadata', entity, propertyKey);\n if (metadata == null) {\n throw new Error(\n `Could not find metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n return metadata as DecoratorType<T, CustomMetadataType>;\n }\n\n /**\n * Gets the type of the property-metadata.\n *\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 {\n try {\n const propertyType = ReflectUtilities.getMetadata('type', entity, propertyKey);\n if (propertyType == null) {\n throw new Error(\n `Could not find type metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n return propertyType as DecoratorTypes;\n }\n catch (error) {\n throw new Error(\n `Could not find type metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n }\n\n /**\n * Sets all property values based on a given entity data-object.\n *\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 = EntityUtilities.getPropertyType(target, key);\n let value = entity ? ReflectUtilities.get(entity, key) : undefined;\n switch (type) {\n case DecoratorTypes.OBJECT:\n const objectMetadata = EntityUtilities.getPropertyMetadata(target, key, DecoratorTypes.OBJECT);\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 const arrayMetadata = EntityUtilities.getPropertyMetadata(target, key, DecoratorTypes.ARRAY);\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-eslint/member-ordering, jsdoc/require-jsdoc\n static construct = EntityUtilities.new;\n // eslint-disable-next-line @typescript-eslint/member-ordering, jsdoc/require-jsdoc\n static build = EntityUtilities.new;\n\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 *\n * @param entity - The entity to validate.\n * @param omit - Whether to check for creating or editing validity.\n * @returns Whether or not the entity is valid.\n */\n static isEntityValid<EntityType extends BaseEntityType<EntityType>>(entity: EntityType, omit: 'create' | 'update'): boolean {\n for (const key in entity) {\n if (!EntityUtilities.isPropertyValid(entity, key, omit)) {\n return false;\n }\n }\n return true;\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 private static isPropertyValid<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n key: keyof EntityType,\n omit: 'create' | 'update'\n ): boolean {\n const type = EntityUtilities.getPropertyType(entity, key);\n const metadata: PropertyDecoratorConfigInternal = EntityUtilities.getPropertyMetadata(entity, key, type);\n\n if (metadata.omitForCreate && omit === 'create') {\n return true;\n }\n if (metadata.omitForUpdate && omit === 'update') {\n return true;\n }\n if (metadata.required) {\n if (entity[key] == null || entity[key] === '') {\n return false;\n }\n }\n switch (type) {\n case DecoratorTypes.BOOLEAN_DROPDOWN:\n break;\n case DecoratorTypes.BOOLEAN_CHECKBOX:\n case DecoratorTypes.BOOLEAN_TOGGLE:\n const entityBoolean = entity[key] as boolean;\n const booleanMetadata = metadata as ToggleBooleanDecoratorConfigInternal;\n if (!EntityUtilities.isBooleanValid(entityBoolean, booleanMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_DROPDOWN:\n break;\n case DecoratorTypes.STRING:\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n const entityString = entity[key] as string;\n const stringMetadata = metadata as DefaultStringDecoratorConfigInternal;\n if (!EntityUtilities.isStringValid(entityString, stringMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_TEXTBOX:\n const entityTextbox = entity[key] as string;\n const textboxMetadata = metadata as TextboxStringDecoratorConfigInternal;\n if (!EntityUtilities.isTextboxValid(entityTextbox, textboxMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_PASSWORD:\n const entityPassword = entity[key] as string;\n const passwordMetadata = metadata as PasswordStringDecoratorConfigInternal;\n const confirmPassword = ReflectUtilities.getMetadata('confirmPassword', entity, key) as string;\n if (!EntityUtilities.isPasswordValid(entityPassword, passwordMetadata, confirmPassword)) {\n return false;\n }\n break;\n case DecoratorTypes.NUMBER_DROPDOWN:\n return true;\n case DecoratorTypes.NUMBER:\n case DecoratorTypes.NUMBER_SLIDER:\n const entityNumber = entity[key] as number;\n const numberMetadata = metadata as DefaultNumberDecoratorConfigInternal;\n if (!EntityUtilities.isNumberValid(entityNumber, numberMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.OBJECT:\n const entityObject = entity[key] as EntityType;\n for (const parameterKey in entityObject) {\n if (!EntityUtilities.isPropertyValid(entityObject, parameterKey, omit)) {\n return false;\n }\n }\n break;\n case DecoratorTypes.ARRAY_STRING_CHIPS:\n case DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_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 = entity[key] as unknown[];\n const arrayMetadata = metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (arrayMetadata.required && !entityArray.length) {\n return false;\n }\n break;\n case DecoratorTypes.DATE:\n const entityDate: Date = new Date(entity[key] as Date);\n const dateMetadata = metadata as DefaultDateDecoratorConfigInternal;\n if (!EntityUtilities.isDateValid(entityDate, dateMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.DATE_RANGE:\n const entityDateRange: DateRange = LodashUtilities.cloneDeep(entity[key] as DateRange);\n const dateRangeMetadata = metadata as DateRangeDateDecoratorConfigInternal;\n if (!EntityUtilities.isDateRangeValid(entityDateRange, dateRangeMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.DATE_TIME:\n const entityDateTime: Date = new Date(entity[key] as Date);\n const dateTimeMetadata = metadata as DateTimeDateDecoratorConfigInternal;\n if (!EntityUtilities.isDateTimeValid(entityDateTime, dateTimeMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.FILE_DEFAULT:\n case DecoratorTypes.FILE_IMAGE:\n const entityFile: FileData | FileData[] = entity[key] as FileData | FileData[];\n const entityFileMetadata = metadata as DefaultFileDecoratorConfigInternal;\n if (!EntityUtilities.isFileDataValid(entityFile, entityFileMetadata)) {\n return false;\n }\n break;\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const customMetadata = metadata as CustomDecoratorConfigInternal<EntityType, any, any, any>;\n if (!customMetadata.isValid(entity[key], omit)) {\n return false;\n }\n break;\n default:\n throw new Error(`Could not validate the input because the DecoratorType ${type} is not known`);\n }\n return true;\n }\n\n private static isBooleanValid(value: boolean, metadata: ToggleBooleanDecoratorConfigInternal): boolean {\n if (metadata.required && !value) {\n return false;\n }\n return true;\n }\n\n private static isStringValid(value: string, metadata: DefaultStringDecoratorConfigInternal): boolean {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return false;\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return false;\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return false;\n }\n return true;\n }\n\n private static isTextboxValid(value: string, metadata: TextboxStringDecoratorConfigInternal): boolean {\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return false;\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return false;\n }\n return true;\n }\n\n private static isPasswordValid(value: string, metadata: PasswordStringDecoratorConfigInternal, confirmPassword: string): boolean {\n if (value !== confirmPassword) {\n return false;\n }\n if (metadata.maxLength && value.length > metadata.maxLength) {\n return false;\n }\n if (metadata.minLength && value.length < metadata.minLength) {\n return false;\n }\n if (metadata.regex && !value.match(metadata.regex)) {\n return false;\n }\n return true;\n }\n\n private static isNumberValid(value: number, metadata: DefaultNumberDecoratorConfigInternal): boolean {\n if (metadata.max && value > metadata.max) {\n return false;\n }\n if (metadata.min && value < metadata.min) {\n return false;\n }\n return true;\n }\n\n private static isDateValid(value: Date, metadata: DefaultDateDecoratorConfigInternal): boolean {\n if (metadata.min && value.getTime() < metadata.min(value).getTime()) {\n return false;\n }\n if (metadata.max && value.getTime() > metadata.max(value).getTime()) {\n return false;\n }\n if (metadata.filter && !metadata.filter(value)) {\n return false;\n }\n return true;\n }\n\n private static isDateRangeValid(value: DateRange, metadata: DateRangeDateDecoratorConfigInternal): boolean {\n if (metadata.required) {\n if (!(value.start as Date | undefined)) {\n return false;\n }\n if (!(value.end as Date | undefined)) {\n return false;\n }\n }\n value.start = new Date(value.start);\n value.end = new Date(value.end);\n if (metadata.minStart && value.start.getTime() < metadata.minStart(value.start).getTime()) {\n return false;\n }\n if (metadata.maxStart && value.start.getTime() > metadata.maxStart(value.start).getTime()) {\n return false;\n }\n if (metadata.minEnd && value.end.getTime() < metadata.minEnd(value.end).getTime()) {\n return false;\n }\n if (metadata.maxEnd && value.end.getTime() > metadata.maxEnd(value.end).getTime()) {\n return false;\n }\n if (metadata.filter) {\n if (!metadata.filter(value.start)) {\n return false;\n }\n if (!metadata.filter(value.end)) {\n return false;\n }\n if (value.values) {\n for (const date of value.values) {\n if (!metadata.filter(date)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n private static isDateTimeValid(value: Date, metadata: DateTimeDateDecoratorConfigInternal): boolean {\n if (metadata.minDate && value.getTime() < metadata.minDate(value).getTime()) {\n return false;\n }\n if (metadata.maxDate && value.getTime() > metadata.maxDate(value).getTime()) {\n return false;\n }\n if (metadata.filterDate && !metadata.filterDate(value)) {\n return false;\n }\n const time: Time = {\n hours: value.getHours(),\n minutes: value.getMinutes()\n };\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 false;\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 false;\n }\n }\n if (metadata.filterTime) {\n if (!metadata.filterTime(time)) {\n return false;\n }\n }\n return true;\n }\n\n private static isFileDataValid(value: FileData | FileData[], metadata: DefaultFileDecoratorConfigInternal): boolean {\n const files = metadata.multiple ? value as FileData[] : [value as FileData];\n let fileSizeTotal: number = 0;\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < files.length; i++) {\n if (!files[i].name || !files[i].file && !files[i].url) {\n return false;\n }\n if (!FileUtilities.isMimeTypeValid(files[i].type, metadata.allowedMimeTypes)) {\n return false;\n }\n if (FileUtilities.transformToMegaBytes(files[i].size, 'B') > metadata.maxSize) {\n return false;\n }\n fileSizeTotal += files[i].size;\n if (FileUtilities.transformToMegaBytes(fileSizeTotal, 'B') > metadata.maxSizeTotal) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if an entity is \"dirty\" (if its values have changed).\n *\n * @param entity - The entity after all changes.\n * @param entityPriorChanges - The entity before the changes.\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 ): Promise<boolean> {\n if (!(entityPriorChanges as EntityType | undefined)) {\n return false;\n }\n else {\n const differences = await EntityUtilities.differencesForDirty(entity, entityPriorChanges);\n return differences.length ? true : false;\n }\n }\n\n private static async differencesForDirty<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType\n ): Promise<Difference<EntityType>[]> {\n const res: Difference<EntityType>[] = [];\n for (const key of ReflectUtilities.ownKeys(entity)) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n const type = EntityUtilities.getPropertyType(entity, key);\n if (!(await EntityUtilities.isEqual(entity[key], entityPriorChanges[key], metadata, type))) {\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 * Compares two Entities and returns their difference in an object.\n *\n * @param entity - The first entity to compare.\n * @param entityPriorChanges - The second entity to compare.\n * @returns The difference between the two Entities in form of a Partial.\n */\n static async difference<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n entityPriorChanges: EntityType\n ): Promise<Partial<EntityType>> {\n const res: Partial<EntityType> = {};\n for (const key in entity) {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n const type = EntityUtilities.getPropertyType(entity, key);\n if (!(await EntityUtilities.isEqual(entity[key], entityPriorChanges[key], metadata, type))) {\n res[key] = 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 *\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 * @returns Whether or not the given values are equal.\n */\n static async isEqual(\n value: unknown,\n valuePriorChanges: unknown,\n metadata: PropertyDecoratorConfigInternal,\n type: DecoratorTypes\n ): Promise<boolean> {\n switch (type) {\n case DecoratorTypes.DATE_RANGE:\n return EntityUtilities.isEqualDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeDateDecoratorConfigInternal).filter\n );\n case DecoratorTypes.DATE:\n return EntityUtilities.isEqualDate(value, valuePriorChanges);\n case DecoratorTypes.DATE_TIME:\n return EntityUtilities.isEqualDateTime(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE:\n case DecoratorTypes.ARRAY_DATE_TIME:\n return EntityUtilities.isEqualArrayDate(value, valuePriorChanges);\n case DecoratorTypes.ARRAY_DATE_RANGE:\n return EntityUtilities.isEqualArrayDateRange(\n value,\n valuePriorChanges,\n (metadata as DateRangeArrayDecoratorConfigInternal).filter\n );\n case DecoratorTypes.FILE_IMAGE:\n case DecoratorTypes.FILE_DEFAULT:\n return EntityUtilities.isEqualFile(value, valuePriorChanges, (metadata as DefaultFileDecoratorConfigInternal).multiple);\n case DecoratorTypes.CUSTOM:\n // eslint-disable-next-line max-len, @typescript-eslint/no-explicit-any\n return EntityUtilities.isEqualCustom(value, valuePriorChanges, metadata as CustomDecoratorConfigInternal<any, any, any, any>);\n default:\n return LodashUtilities.isEqual(value, valuePriorChanges);\n }\n }\n\n private static isEqualArrayDate(value: unknown, valuePriorChanges: unknown): boolean {\n const newValue = (value as Date[]).map(v => new Date(v)).sort();\n const newValuePriorChanges = (valuePriorChanges as Date[]).map(v => new Date(v)).sort();\n return LodashUtilities.isEqual(newValue, newValuePriorChanges);\n }\n\n private static isEqualArrayDateRange(value: unknown, valuePriorChanges: unknown, filter?: DateFilterFn<Date>): boolean {\n const dateRanges = (value as DateRange[]).sort();\n const dateRangesPriorChanges = (valuePriorChanges as DateRange[]).sort();\n if (dateRanges.length !== dateRangesPriorChanges.length) {\n return false;\n }\n for (let i = 0; i < dateRanges.length; i++) {\n if (!EntityUtilities.isEqualDateRange(dateRanges[i], dateRangesPriorChanges[i], filter)) {\n return false;\n }\n }\n return true;\n }\n\n private static isEqualDateTime(value: unknown, valuePriorChanges: unknown): boolean {\n const date = new Date(value as Date);\n const datePriorChanges = 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 = new Date(value as Date);\n const datePriorChanges = 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 = LodashUtilities.cloneDeep(value) as DateRange;\n dateRange.start = new Date((value as DateRange).start);\n dateRange.end = new Date((value as DateRange).end);\n dateRange.values = DateUtilities.getDatesBetween(\n dateRange.start,\n dateRange.end,\n filter\n );\n const dateRangePriorChanges = LodashUtilities.cloneDeep(valuePriorChanges) as DateRange;\n dateRangePriorChanges.start = new Date((valuePriorChanges as DateRange).start);\n dateRangePriorChanges.end = new Date((valuePriorChanges as DateRange).end);\n dateRangePriorChanges.values = DateUtilities.getDatesBetween(\n dateRangePriorChanges.start,\n dateRangePriorChanges.end,\n filter\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): Promise<boolean> {\n if (value == null) {\n if (valuePriorChanges == null) {\n return true;\n }\n else {\n return false;\n }\n }\n const files = multiple ? (value as FileData[]).sort() : [value as FileData].sort();\n const filesPriorChanges = multiple ? (valuePriorChanges as FileData[]).sort() : [valuePriorChanges as FileData].sort();\n if (files.length !== filesPriorChanges.length) {\n return false;\n }\n for (let i = 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]);\n value = files[i];\n }\n if (files[i].file && !filesPriorChanges[i].file) {\n filesPriorChanges[i] = await FileUtilities.getFileData(filesPriorChanges[i]);\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-eslint/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 *\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 = EntityUtilities.getPropertyMetadata(entity, a);\n const metadataB = EntityUtilities.getPropertyMetadata(entity, b);\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 values for \"lg\", \"md\", \"sm\".\n *\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 * @param type - Defines for which screen size the column values should be returned.\n * @returns Bootstrap column value.\n */\n static getWidth<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n key: keyof EntityType, type: 'lg' | 'md' | 'sm'\n ): number {\n const metadata = EntityUtilities.getPropertyMetadata(entity, key);\n switch (type) {\n case 'lg':\n return metadata.defaultWidths[0];\n case 'md':\n return metadata.defaultWidths[1];\n case 'sm':\n return metadata.defaultWidths[2];\n }\n }\n\n /**\n * Resets all changes on an entity.\n *\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 }\n }\n\n private static getEntityRows<EntityType extends BaseEntityType<EntityType>>(\n entity: EntityType,\n tab: number,\n hideOmitForCreate: boolean,\n hideOmitForEdit: boolean\n ): EntityRow<EntityType>[] {\n const res: EntityRow<EntityType>[] = [];\n\n const keys: (keyof EntityType)[] = EntityUtilities.keysOf(entity, hideOmitForCreate, hideOmitForEdit);\n const numberOfRows: number = EntityUtilities.getNumberOfRows<EntityType>(keys, entity, tab);\n for (let i = 1; i <= numberOfRows; i++) {\n const row: EntityRow<EntityType> = {\n row: i,\n keys: EntityUtilities.getKeysForRow<EntityType>(keys, entity, i, tab)\n };\n res.push(row);\n }\n\n if (EntityUtilities.getKeysForRow<EntityType>(keys, entity, -1, tab).length) {\n const lastRow: EntityRow<EntityType> = {\n row: numberOfRows + 1,\n keys: EntityUtilities.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 *\n * @param entity - The entity to get the rows from.\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 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 hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false\n ): EntityTab<EntityType>[] {\n const res: EntityTab<EntityType>[] = [];\n const keys: (keyof EntityType)[] = EntityUtilities.keysOf(entity, hideOmitForCreate, hideOmitForEdit);\n const numberOfTabs: number = EntityUtilities.getNumberOfTabs<EntityType>(keys, entity);\n\n if (EntityUtilities.getEntityRows<EntityType>(entity, -1, hideOmitForCreate, hideOmitForEdit).length) {\n const firstTab: EntityTab<EntityType> = {\n tabName: 'Tab 1',\n tab: -1,\n rows: EntityUtilities.getEntityRows<EntityType>(entity, -1, hideOmitForCreate, hideOmitForEdit)\n };\n res.push(firstTab);\n }\n\n for (let i = 2; i <= numberOfTabs; i++) {\n const tab: EntityTab<EntityType> = {\n tabName: EntityUtilities.getTabName(entity, i),\n tab: i,\n rows: EntityUtilities.getEntityRows<EntityType>(entity, i, hideOmitForCreate, hideOmitForEdit)\n };\n res.push(tab);\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 => EntityUtilities.getPropertyMetadata(entity, k).position.row === row)\n .filter(k => EntityUtilities.getPropertyMetadata(entity, k).position.tab === tab)\n .sort((a, b) => EntityUtilities.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 => EntityUtilities.getPropertyMetadata(entity, k).position.tab === tab)\n .map(k => EntityUtilities.getPropertyMetadata(entity, k).position.row)\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 .map(k => EntityUtilities.getPropertyMetadata(entity, k).position.tab)\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 = EntityUtilities.keysOf(entity)\n .map(k => EntityUtilities.getPropertyMetadata(entity, k))\n .find(m => m.position.tab === tab && m.position.tabName)?.position.tabName;\n return providedTabName ?? `Tab ${tab}`;\n }\n\n /**\n * Gets the keys of the provided entity correctly typed.\n *\n * @param entity - The entity to get the keys of.\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 hideOmitForCreate: boolean = false,\n hideOmitForEdit: boolean = false\n ): (keyof EntityType)[] {\n let keys: (keyof EntityType)[] = ReflectUtilities.ownKeys(entity);\n if (hideOmitForCreate) {\n const omitForCreateKeys: (keyof EntityType)[] = EntityUtilities.getOmitForCreate(entity);\n keys = keys.filter(k => !omitForCreateKeys.includes(k));\n }\n if (hideOmitForEdit) {\n const omitForUpdateKeys: (keyof EntityType)[] = EntityUtilities.getOmitForUpdate(entity);\n keys = keys.filter(k => !omitForUpdateKeys.includes(k));\n }\n return keys;\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 { string } from '../decorators/string/string.decorator';\nimport { EntityUtilities } from './entity.utilities';\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 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 EntityUtilities.new(this, entity);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { EntityUtilities } from './entity.utilities';\nimport { LodashUtilities } from '../capsulation/lodash.utilities';\nimport { DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { FileData } from '../decorators/file/file-decorator.data';\nimport { FileUtilities } from './file.utilities';\nimport { BaseEntityType } from './entity.model';\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 * The key which holds the id value.\n *\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 * Gets the entities in an array from the internal entitiesSubject.\n *\n * @returns The current entities in form of an array.\n */\n get entities(): EntityType[] {\n return this.entitiesSubject.value;\n }\n\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Creates a new Entity and pushes it to the entities array.\n *\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 * @returns A Promise of the created entity.\n */\n async create(entity: EntityType): Promise<EntityType> {\n const body: Partial<EntityType> = LodashUtilities.omit(entity, EntityUtilities.getOmitForCreate(entity)) as Partial<EntityType>;\n const filePropertyKeys: (keyof EntityType)[] = EntityUtilities.getFileProperties(entity);\n if (!filePropertyKeys.length) {\n return await this.createWithJson(body);\n }\n else {\n return await this.createWithFormData(body, filePropertyKeys, entity);\n }\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 *\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 * @returns The created entity from the server.\n */\n protected async createWithFormData(\n body: Partial<EntityType>,\n filePropertyKeys: (keyof EntityType)[],\n entity: EntityType\n ): Promise<EntityType> {\n const 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).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)).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)).file, fileData.name);\n }\n }\n const e = await firstValueFrom(this.http.post<EntityType>(this.baseUrl, formData));\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 *\n * @param body - The body Of the request.\n * @returns The created entity from the server.\n */\n protected async createWithJson(body: Partial<EntityType>): Promise<EntityType> {\n const e = await firstValueFrom(this.http.post<EntityType>(this.baseUrl, body));\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 *\n * @returns A Promise of all received Entities.\n */\n async read(): Promise<EntityType[]> {\n const e = await firstValueFrom(this.http.get<EntityType[]>(this.baseUrl));\n this.entitiesSubject.next(e);\n return e;\n }\n\n /**\n * Updates a specific Entity.\n *\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 body: Partial<EntityType> = LodashUtilities.omit(\n await EntityUtilities.difference(entity, entityPriorChanges),\n EntityUtilities.getOmitForUpdate(entity)\n ) as unknown as Partial<EntityType>;\n const filePropertyKeys = EntityUtilities.getFileProperties(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 // 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 *\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 = new FormData();\n formData.append('body', JSON.stringify(LodashUtilities.omitBy(body, LodashUtilities.isNil)));\n for (const key of filePropertyKeys) {\n if (EntityUtilities.getPropertyMetadata(entity, key, DecoratorTypes.FILE_DEFAULT).multiple) {\n // eslint-disable-next-line max-len\n const fileDataValues = body[key] as FileData[];\n for (const value of fileDataValues) {\n formData.append(key as string, (await FileUtilities.getFileData(value)).file, value.name);\n }\n }\n else {\n // eslint-disable-next-line max-len\n const fileData = body[key] as FileData;\n formData.append(key as string, (await FileUtilities.getFileData(fileData)).file, fileData.name);\n }\n }\n const updatedEntity = await firstValueFrom(\n this.http.patch<EntityType>(`${this.baseUrl}/${id}`, formData)\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 *\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 = await firstValueFrom(\n this.http.patch<EntityType>(\n `${this.baseUrl}/${id}`,\n LodashUtilities.omitBy(body, LodashUtilities.isNil)\n )\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 *\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 { BaseEntityType } from './entity.model';\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 protected constructor(data?: InputType) {\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 *\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 *\n * @param data - The user input.\n */\n // eslint-disable-next-line @typescript-eslint/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 *\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 == null || this.inputData[key] == null) {\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 *\n * @returns The build value.\n */\n getResult(): InternalType {\n return this.data;\n }\n}","import { BaseBuilder } from '../../classes/base.builder';\nimport { ConfirmDialogData, ConfirmDialogTypes } from './confirm-dialog-data';\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(data?: ConfirmDialogData) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected override generateBaseData(data?: ConfirmDialogData): ConfirmDialogDataInternal {\n return new ConfirmDialogDataInternal(\n data?.text ?? ['Do you really want to do this?'],\n data?.type ?? 'default',\n data?.confirmButtonLabel ?? 'Confirm',\n data?.cancelButtonLabel ?? 'Cancel',\n data?.title ?? 'Confirmation',\n data?.requireConfirmation ?? false,\n data?.confirmationText\n );\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected override validateInput(data?: ConfirmDialogData): void {\n if (!data) {\n return;\n }\n if (data.requireConfirmation === true && !data.confirmationText) {\n throw new Error(`Missing required Input data \"confirmationText\".\n 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) {\n throw new Error('The \"cancelButtonLabel\" will never be shown because \"type\" is set to \"info-only\"');\n }\n }\n}","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ConfirmDialogData } from './confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from './confirm-dialog-data.builder';\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})\nexport class NgxMatEntityConfirmDialogComponent implements OnInit {\n\n confirm = false;\n\n data!: ConfirmDialogDataInternal;\n\n constructor(\n private readonly dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: ConfirmDialogData\n ) {}\n\n ngOnInit(): void {\n this.data = new ConfirmDialogDataBuilder(this.inputData).getResult();\n this.dialogRef.disableClose = true;\n }\n\n /**\n * Closes the dialog with value 1 to signal that the action should be run.\n */\n confirmAction(): void {\n this.dialogRef.close(1);\n }\n\n /**\n * Closes the dialog.\n */\n cancel(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title *ngIf=\"data.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 [(ngModel)]=\"confirm\" name=\"confirm\">\n {{data.confirmationText}}\n </mat-checkbox>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button type=\"button\" *ngIf=\"data.type === 'delete'\" mat-raised-button color=\"warn\" (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'delete'\" mat-raised-button (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel}}\n </button>\n <button type=\"button\" *ngIf=\"data.type !== 'info-only'\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.cancelButtonLabel}}\n </button>\n</mat-dialog-actions>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgxMatEntityConfirmDialogComponent } from './confirm-dialog.component';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n@NgModule({\n declarations: [NgxMatEntityConfirmDialogComponent],\n imports: [CommonModule, MatDialogModule, FormsModule, MatCheckboxModule, MatButtonModule],\n exports: [NgxMatEntityConfirmDialogComponent]\n})\nexport class NgxMatEntityConfirmDialogModule {}","import { NgModel } from '@angular/forms';\n\n/**\n * Generates a default error message for most validation errors.\n *\n * @param model - The ngModel to get the error from.\n * @returns The Validation Error Message to display.\n */\nexport function 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-eslint/no-unsafe-member-access\n return `needs to be at least ${model.getError('minlength').requiredLength} characters long`;\n }\n else if (model.hasError('min')) {\n // eslint-disable-next-line @typescript-eslint/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-eslint/no-unsafe-member-access\n return `needs to be equal or smaller than ${model.getError('max').max}`;\n }\n else if (model.hasError('required')) {\n return 'required';\n }\n // eslint-disable-next-line @typescript-eslint/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 { BaseBuilder } from '../../../classes/base.builder';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateDialogData } from '../table-data';\n\n/**\n * The internal CreateDialogData. Requires all default values the user can leave out.\n */\nexport class CreateDialogDataInternal implements CreateDialogData {\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\n constructor(\n title: string,\n createButtonLabel: string,\n cancelButtonLabel: string,\n createRequiresConfirmDialog: boolean,\n confirmCreateDialogData: ConfirmDialogDataInternal\n ) {\n this.title = title;\n this.createButtonLabel = createButtonLabel;\n this.cancelButtonLabel = cancelButtonLabel;\n this.createRequiresConfirmDialog = createRequiresConfirmDialog;\n this.confirmCreateDialogData = confirmCreateDialogData;\n }\n}\n\n/**\n * The Builder for the CreateDialogData. Sets default values.\n */\nexport class CreateDialogDataBuilder extends BaseBuilder<CreateDialogDataInternal, CreateDialogData> {\n\n constructor(data?: CreateDialogData) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: CreateDialogData): CreateDialogDataInternal {\n const confirmCreateDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmCreateDialogData)\n .withDefault('confirmButtonLabel', 'create')\n .withDefault('text', ['Do you really want to create this entity?'])\n .withDefault('title', 'Create')\n .getResult();\n return new CreateDialogDataInternal(\n data?.title ?? 'Create',\n data?.createButtonLabel ?? 'Create',\n data?.cancelButtonLabel ?? 'Cancel',\n data?.createRequiresConfirmDialog ?? false,\n confirmCreateDialogData\n );\n }\n}","import { NgModel } from '@angular/forms';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { getValidationErrorMessage as defaultGetValidationErrorMessage } from '../get-validation-error-message.function';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from '../table/create-dialog/create-dialog-data.builder';\nimport { AddArrayItemDialogData } from './add-array-item-dialog-data';\n\n/**\n * The internal AddArrayItemDialogData. Requires all default values the user can leave out.\n */\nexport class AddArrayItemDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements AddArrayItemDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData: CreateDialogDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n getValidationErrorMessage: (model: NgModel) => string;\n\n constructor(\n entity: EntityType,\n createDialogData: CreateDialogDataInternal,\n getValidationErrorMessage: (model: NgModel) => string\n ) {\n this.entity = entity;\n this.createDialogData = createDialogData;\n this.getValidationErrorMessage = getValidationErrorMessage;\n }\n}\n\n/**\n * The Builder for the AddArrayItemDialogData. Sets default values.\n */\nexport class AddArrayItemDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<AddArrayItemDialogDataInternal<EntityType>, AddArrayItemDialogData<EntityType>> {\n\n constructor(data: AddArrayItemDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: AddArrayItemDialogData<EntityType>): AddArrayItemDialogDataInternal<EntityType> {\n const createDialogData = new CreateDialogDataBuilder(data.createDialogData)\n .withDefault('createButtonLabel', 'Add')\n .withDefault('title', 'Add to array')\n .getResult();\n return new AddArrayItemDialogDataInternal(\n data.entity,\n createDialogData,\n data.getValidationErrorMessage ?? defaultGetValidationErrorMessage,\n );\n }\n}","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { DecoratorType, DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { EntityUtilities } from '../../classes/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@Component({\n selector: 'ngx-mat-entity-base-input',\n template: ''\n})\n// eslint-disable-next-line max-len\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 @Output()\n inputChangeEvent = 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 // eslint-disable-next-line jsdoc/require-jsdoc\n set propertyValue(value: ValueType | undefined) {\n (this.entity[this.key] as ValueType | undefined) = value;\n }\n\n /**\n * The metadata of the property.\n */\n metadata!: DecoratorType<Type, CustomMetadataType>;\n\n ngOnInit(): void {\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.key);\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 { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-input',\n templateUrl: './string-input.component.html',\n styleUrls: ['./string-input.component.scss']\n})\nexport class StringInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING, string> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-textbox-input',\n templateUrl: './string-textbox-input.component.html',\n styleUrls: ['./string-textbox-input.component.scss']\n})\nexport class StringTextboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_TEXTBOX, string> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [required]=\"metadata.required\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-autocomplete-input',\n templateUrl: './string-autocomplete-input.component.html',\n styleUrls: ['./string-autocomplete-input.component.scss']\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 override ngOnInit(): void {\n super.ngOnInit();\n this.autocompleteStrings = this.metadata.autocompleteValues;\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.autocompleteStrings);\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n *\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input?: string): void {\n if (input) {\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(input.toLowerCase()));\n }\n }\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matAutocomplete]=\"auto\"\n (keyup)=\"filterAutocompleteStrings(propertyValue)\"\n [required]=\"metadata.required\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\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 { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-dropdown-input',\n templateUrl: './string-dropdown-input.component.html',\n styleUrls: ['./string-dropdown-input.component.scss']\n})\nexport class StringDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_DROPDOWN, string> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select (ngModelChange)=\"emitChange()\" [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\" [required]=\"metadata.required\" [disabled]=\"isReadOnly\">\n <mat-option *ngFor=\"let value of metadata.dropdownValues\" [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 { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\nimport { ReflectUtilities } from '../../../../capsulation/reflect.utilities';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'string-password-input',\n templateUrl: './string-password-input.component.html',\n styleUrls: ['./string-password-input.component.scss']\n})\nexport class StringPasswordInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.STRING_PASSWORD, string> implements OnInit {\n\n hide = true;\n hideConfirm = true;\n\n confirmRequired!: boolean;\n confirmPassword?: string;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.confirmRequired = this.metadata.required;\n this.confirmPassword = LodashUtilities.cloneDeep(this.propertyValue);\n ReflectUtilities.defineMetadata('confirmPassword', this.confirmPassword, this.entity, this.key);\n }\n\n passwordInput(): void {\n this.confirmRequired = Boolean(this.propertyValue);\n ReflectUtilities.defineMetadata('confirmPassword', this.confirmPassword, this.entity, this.key);\n this.emitChange();\n }\n}","<div class=\"password-row\">\n <mat-form-field [class.w-50]=\"metadata.needsConfirmation\" [class.w-100]=\"!metadata.needsConfirmation\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n [type]=\"hide ? 'password' : 'text'\"\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n [minlength]=\"metadata.minLength ?? null\"\n [maxlength]=\"metadata.maxLength ?? null\"\n (ngModelChange)=\"passwordInput()\"\n [disabled]=\"isReadOnly\"\n >\n <button type=\"button\" (click)=\"hide = !hide\" [disabled]=\"isReadOnly\" mat-icon-button matSuffix>\n <i *ngIf=\"hide\" class=\"fas fa-eye-slash\"></i>\n <i *ngIf=\"!hide\" class=\"fas fa-eye\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n <div *ngIf=\"metadata.needsConfirmation\" class=\"password-spacer\"></div>\n <mat-form-field class=\"w-50\" *ngIf=\"metadata.needsConfirmation\">\n <mat-label>{{metadata.confirmationDisplayName}}</mat-label>\n <input\n [type]=\"hideConfirm ? 'password' : 'text'\"\n matInput\n [(ngModel)]=\"confirmPassword\"\n [name]=\"key.toString() + 'confirmPassword'\"\n #confirmModel=\"ngModel\"\n [required]=\"metadata.required || confirmRequired\"\n (ngModelChange)=\"passwordInput()\"\n [disabled]=\"isReadOnly\"\n >\n <button type=\"button\" (click)=\"hideConfirm = !hideConfirm\" [disabled]=\"isReadOnly\" mat-icon-button matSuffix>\n <i *ngIf=\"hideConfirm\" class=\"fas fa-eye-slash\"></i>\n <i *ngIf=\"!hideConfirm\" class=\"fas fa-eye\"></i>\n </button>\n <mat-error>{{getValidationErrorMessage(confirmModel)}}</mat-error>\n </mat-form-field>\n</div>\n\n<mat-error *ngIf=\"metadata.needsConfirmation && propertyValue && confirmPassword && (confirmPassword !== propertyValue)\">\n {{metadata.passwordsDontMatchErrorMessage}}\n</mat-error>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'boolean-checkbox-input',\n templateUrl: './boolean-checkbox-input.component.html',\n styleUrls: ['./boolean-checkbox-input.component.scss']\n})\nexport class BooleanCheckboxInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_CHECKBOX, boolean> implements OnInit {\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.propertyValue = this.propertyValue ?? false;\n }\n}","<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-checkbox\n color=\"primary\"\n (ngModelChange)=\"emitChange()\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n [class.disabled]=\"isReadOnly\"\n [class.mat-checkbox-disabled]=\"false\"\n >\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'boolean-toggle-input',\n templateUrl: './boolean-toggle-input.component.html',\n styleUrls: ['./boolean-toggle-input.component.scss']\n})\nexport class BooleanToggleInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_TOGGLE, boolean> implements OnInit {\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.propertyValue = this.propertyValue ?? false;\n }\n}","<mat-form-field class=\"hideUnderline\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-slide-toggle\n color=\"primary\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [disabled]=\"isReadOnly\"\n >\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <input matInput hidden\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [pattern]=\"metadata.required ? 'true' : '[\\\\s\\\\S]*'\"\n [required]=\"metadata.required\"\n (ngModelChange)=\"emitChange()\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'boolean-dropdown-input',\n templateUrl: './boolean-dropdown-input.component.html',\n styleUrls: ['./boolean-dropdown-input.component.scss']\n})\nexport class BooleanDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.BOOLEAN_DROPDOWN, boolean> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\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 { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss']\n})\nexport class NumberInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER, number> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n type=\"number\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'number-dropdown-input',\n templateUrl: './number-dropdown-input.component.html',\n styleUrls: ['./number-dropdown-input.component.scss']\n})\nexport class NumberDropdownInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_DROPDOWN, number> implements OnInit {\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select (ngModelChange)=\"emitChange()\" [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\" [required]=\"metadata.required\" [disabled]=\"isReadOnly\">\n <mat-option *ngFor=\"let value of metadata.dropdownValues\" [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 { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'number-slider-input',\n templateUrl: './number-slider-input.component.html',\n styleUrls: ['./number-slider-input.component.scss']\n})\nexport class NumberSliderInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.NUMBER_SLIDER, number> implements OnInit {\n}","<mat-form-field floatLabel=\"always\" class=\"hideUnderline\">\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 matInput\n #hiddenInput\n type=\"number\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString() + 'Helper'\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n (ngModelChange)=\"emitChange()\"\n [disabled]=\"isReadOnly\"\n >\n <mat-slider\n id=\"slider\"\n color=\"primary\"\n (click)=\"model.control.markAsTouched()\"\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n [min]=\"metadata.min ?? null\"\n [max]=\"metadata.max ?? null\"\n [step]=\"metadata.step\"\n [thumbLabel]=\"true\"\n [displayWith]=\"metadata.formatThumbLabelValue\"\n [tickInterval]=\"metadata.tickInterval\"\n [disabled]=\"isReadOnly\"\n >\n </mat-slider>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayStringChipsInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.ARRAY_STRING_CHIPS, string[]> implements OnInit {\n\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 *\n * @param event - The event that fires when a new chip is completed.\n */\n addStringChipArrayValue(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n }\n event.chipInput?.clear();\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 *\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\n /**\n * Handles adding a string to the array when an autocomplete value has been selected.\n *\n * @param event - The autocomplete selected event.\n * @param chipsInput - The element where the user typed the value.\n */\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement): void {\n const value = (event.option.viewValue || '').trim();\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n chipsInput.value = '';\n }\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *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>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayStringAutocompleteChipsComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS, string[]> implements OnInit {\n\n filteredAutocompleteStrings!: string[];\n\n chipsInput: string = '';\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.filteredAutocompleteStrings = LodashUtilities.cloneDeep(this.metadata.autocompleteValues);\n }\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 *\n * @param event - The event that fires when a new chip is completed.\n */\n addStringChipArrayValue(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n }\n event.chipInput?.clear();\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 *\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\n /**\n * Handles adding a string to the array when an autocomplete value has been selected.\n *\n * @param event - The autocomplete selected event.\n * @param chipsInput - The element where the user typed the value.\n */\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement): void {\n const value = (event.option.viewValue || '').trim();\n if (this.metadata.minLength && value.length < this.metadata.minLength) {\n return;\n }\n if (this.metadata.maxLength && value.length > this.metadata.maxLength) {\n return;\n }\n if (this.metadata.regex && !value.match(this.metadata.regex)) {\n return;\n }\n this.propertyValue = this.propertyValue ?? [];\n this.propertyValue.push(value);\n chipsInput.value = '';\n }\n\n /**\n * Dynamically filters the Autocomplete options when the user inputs something.\n *\n * @param input - The input of the user.\n */\n filterAutocompleteStrings(input: unknown): void {\n if (input != null) {\n const filterValue = (input as string).toLowerCase();\n this.filteredAutocompleteStrings = this.metadata.autocompleteValues.filter(s => s.toLowerCase().includes(filterValue));\n }\n }\n}","<mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n (ngModelChange)=\"emitChange()\"\n [(ngModel)]=\"propertyValue\" [name]=\"key.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *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>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n (keyup)=\"filterAutocompleteStrings(chipsInput)\"\n [(ngModel)]=\"chipsInput\" [name]=\"key.toString()\" #chipsModel=\"ngModel\"\n #chipsElement\n [minlength]='metadata.minLength ?? null'\n [maxlength]='metadata.maxLength ?? null'\n [pattern]=\"metadata.regex ?? '[\\\\s\\\\S]*'\"\n >\n <mat-error *ngIf=\"chipsModel.errors\">{{getValidationErrorMessage(chipsModel)}}</mat-error>\n </mat-chip-list>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event, chipsElement)\">\n <mat-option *ngFor=\"let value of metadata.autocompleteValues\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n</mat-form-field>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'date-input',\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss']\n})\nexport class DateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE, Date> implements OnInit {\n\n DateUtilities = DateUtilities;\n}","<mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n (ngModelChange)=\"emitChange()\"\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\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 >\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>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\nconst EMPTY_DATERANGE: DateRange = {\n start: undefined as unknown as Date,\n end: undefined as unknown as Date,\n values: undefined\n};\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'date-range-input',\n templateUrl: './date-range-input.component.html',\n styleUrls: ['./date-range-input.component.scss']\n})\nexport class DateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_RANGE, DateRange> implements OnInit {\n\n dateRange!: DateRange;\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n defaultDateFilter = DateUtilities.defaultDateFilter;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.dateRange = LodashUtilities.cloneDeep(this.propertyValue) ?? EMPTY_DATERANGE;\n this.dateRangeStart = new Date(this.dateRange.start);\n this.dateRangeEnd = new Date(this.dateRange.end);\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 this.dateRange.start = new Date(this.dateRangeStart);\n this.dateRange.end = new Date(this.dateRangeEnd);\n const values: Date[] = DateUtilities.getDatesBetween(\n new Date(this.dateRange.start),\n new Date(this.dateRange.end),\n this.metadata.filter\n );\n this.dateRange.values = values.length ? values : undefined;\n }\n else {\n this.dateRange.values = undefined;\n }\n this.propertyValue = this.dateRange;\n this.emitChange();\n }\n}","<mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required\" [dateFilter]=\"metadata.filter ?? defaultDateFilter\" [disabled]=\"isReadOnly\">\n <input matStartDate\n [(ngModel)]=\"dateRangeStart\"\n [name]=\"key.toString() + 'start'\"\n #startModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minStart ? metadata.minStart(dateRange.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(dateRange.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n (ngModelChange)=\"setDateRangeValues()\"\n >\n <input matEndDate\n [(ngModel)]=\"dateRangeEnd\"\n [name]=\"key.toString() + 'end'\"\n #endModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minEnd ? metadata.minEnd(dateRange.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(dateRange.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\n (ngModelChange)=\"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 { Component, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'date-time-input',\n templateUrl: './date-time-input.component.html',\n styleUrls: ['./date-time-input.component.scss']\n})\nexport class DateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.DATE_TIME, Date> implements OnInit {\n\n DateUtilities = DateUtilities;\n\n time?: Time;\n timeDropdownValues!: DropdownValue<Time>[];\n\n defaultDateFilter: DateFilterFn<Date | null | undefined> = (): boolean => true;\n\n override ngOnInit(): void {\n super.ngOnInit();\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 *\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 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}","<div class=\"date-time\">\n <mat-form-field appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"propertyValue\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minDate ? metadata.minDate(propertyValue) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(propertyValue) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? defaultDateFilter\"\n (dateInput)=\"setTime()\"\n [disabled]=\"isReadOnly\"\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 [(ngModel)]=\"time\"\n [name]=\"key.toString() + 'time'\"\n #timeModel=\"ngModel\"\n [required]=\"metadata.required\"\n [compareWith]=\"compareTimes\"\n (ngModelChange)=\"setTime()\"\n [disabled]=\"isReadOnly\"\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>","/* eslint-disable jsdoc/require-jsdoc */\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { LodashUtilities } from '../../../capsulation/lodash.utilities';\nimport { EntityUtilities } from '../../../classes/entity.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { BaseEntityType } from '../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../base-input.component';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { Component, OnInit } from '@angular/core';\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@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 constructor(private readonly matDialog: MatDialog) {\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 * Toggles all array-items in the table.\n *\n */\n masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n }\n else {\n this.dataSource.data.forEach(row => this.selection.select(row));\n }\n }\n\n /**\n * Checks if all array-items in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n *\n * @returns Whether or not all array-items in the table have been selected.\n */\n isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\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)\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 this.selection.selected.forEach(s => {\n this.propertyValue?.splice(this.propertyValue.indexOf(s), 1);\n });\n this.dataSource.data = this.propertyValue ?? [];\n this.selection.clear();\n this.emitChange();\n }\n}","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'array-date-input',\n templateUrl: './array-date-input.component.html',\n styleUrls: ['./array-date-input.component.scss']\n})\nexport class ArrayDateInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE> implements OnInit {\n\n DateUtilities = DateUtilities;\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=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"input\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\n [min]=\"metadata.min ? metadata.min(input) : undefined\"\n [max]=\"metadata.max ? metadata.max(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filter ?? DateUtilities.defaultDateFilter\"\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\" (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadata.required && !dataSource.data.length\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { ArrayTableComponent } from '../array-table.class';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../../../../decorators/base/dropdown-value.interface';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayDateTimeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<Date, EntityType, DecoratorTypes.ARRAY_DATE_TIME> implements OnInit {\n\n DateUtilities = DateUtilities;\n\n dateTime?: Date;\n time?: Time;\n timeDropdownValues!: DropdownValue<Time>[];\n\n override ngOnInit(): void {\n super.ngOnInit();\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}","<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 appearance=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"input\"\n [name]=\"key.toString()\"\n #model=\"ngModel\"\n [matDatepicker]=\"picker\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minDate ? metadata.minDate(input) : undefined\"\n [max]=\"metadata.maxDate ? metadata.maxDate(input) : undefined\"\n [matDatepickerFilter]=\"metadata.filterDate ?? DateUtilities.defaultDateFilter\"\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 [(ngModel)]=\"time\"\n [name]=\"key.toString() + 'time'\"\n #timeModel=\"ngModel\"\n [required]=\"metadata.required\"\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\" (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadata.required && !dataSource.data.length\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { DateUtilities } from '../../../../classes/date.utilities';\nimport { DateRange } from '../../../../decorators/date/date-decorator.data';\nimport { ArrayTableComponent } from '../array-table.class';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/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})\nexport class ArrayDateRangeInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends ArrayTableComponent<DateRange, EntityType, DecoratorTypes.ARRAY_DATE_RANGE> implements OnInit {\n\n DateUtilities = DateUtilities;\n\n dateRangeStart?: Date;\n dateRangeEnd?: Date;\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.input = {\n start: undefined as unknown as Date,\n end: undefined as unknown as Date,\n values: undefined\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;\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}","<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=\"standard\">\n <mat-label>{{metadata.displayName}}</mat-label>\n \n <mat-date-range-input [rangePicker]=\"picker\" [required]=\"metadata.required\" [dateFilter]=\"metadata.filter ? metadata.filter : DateUtilities.defaultDateFilter\">\n <input matStartDate\n [(ngModel)]=\"dateRangeStart\"\n [name]=\"key.toString() + 'start'\"\n #startModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minStart ? metadata.minStart(input?.start) : undefined\"\n [max]=\"metadata.maxStart ? metadata.maxStart(input?.start) : undefined\"\n [placeholder]=\"metadata.placeholderStart\"\n >\n <input matEndDate\n [(ngModel)]=\"dateRangeEnd\"\n [name]=\"key.toString() + 'end'\"\n #endModel=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadata.minEnd ? metadata.minEnd(input?.end) : undefined\"\n [max]=\"metadata.maxEnd ? metadata.maxEnd(input?.end) : undefined\"\n [placeholder]=\"metadata.placeholderEnd\"\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\" (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadata.required && !dataSource.data.length\">\n {{metadata.missingErrorMessage}}\n </div>\n</div>","// eslint-disable-next-line max-len\nexport const placeholder = '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=';","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n/**\n * Adds drag and drop functionality to an element.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[dragDrop]'\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 *\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 *\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 *\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 { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { DefaultFileDecoratorConfigInternal, FileDataWithFile, ImageFileDecoratorConfigInternal } from '../../../../decorators/file/file-decorator-internal.data';\nimport { FileUtilities } from '../../../../classes/file.utilities';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { LodashUtilities } from '../../../../capsulation/lodash.utilities';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NgxMatEntityConfirmDialogComponent } from '../../../confirm-dialog/confirm-dialog.component';\nimport { BaseEntityType } from '../../../../classes/entity.model';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrls: ['./file-input.component.scss']\n})\nexport class FileInputComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n\n filenames?: string[];\n\n FileUtilities = FileUtilities;\n\n @Input()\n propertyValue!: FileData | FileData[] | undefined;\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 = new EventEmitter<FileData | FileData[]>();\n\n constructor(private readonly dialog: MatDialog) { }\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 }\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 = (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 = 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 const data: FileData[] = [];\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 data.push(fileData);\n }\n this.propertyValue = LodashUtilities.cloneDeep(data);\n this.filenames = this.propertyValue.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.metadata.multiple) {\n this.filenames?.splice(this.filenames.indexOf(name), 1);\n if (!this.filenames?.length) {\n this.filenames = undefined;\n }\n const fileDataToRemove = (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 = (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 = (this.propertyValue as FileData[]).indexOf(foundFileData);\n (this.propertyValue as FileData[])[index] = await FileUtilities.getFileData(foundFileData);\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);\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 void FileUtilities.downloadMultipleFiles(this.metadata.displayName, (this.propertyValue as FileData[]));\n }\n }\n}","<input #fileInput\n type=\"file\" hidden\n [multiple]=\"metadata.multiple\"\n [accept]=\"FileUtilities.getAcceptString(metadata.allowedMimeTypes)\"\n (change)=\"setFileFromInput($event)\"\n>\n\n<mat-form-field floatLabel=\"always\">\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n [(ngModel)]=\"filenames\"\n name=\"file\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [disabled]=\"isReadOnly\"\n >\n <mat-chip *ngFor=\"let name of filenames\" (removed)=\"removeFile(name)\">\n {{name}}\n <button type=\"button\" class=\"mat-chip-remove mat-chip-trailing-icon ngx-mat-grey\" (click)=\"downloadFile(name)\">\n <i class=\"fas fa-download\"></i>\n </button>\n <button type=\"button\" matChipRemove (click)=\"chipList._markAsTouched()\">\n <i class=\"{{metadata.deleteIcon}}\"></i>\n </button>\n </mat-chip>\n <mat-chip class=\"download-all-button\" *ngIf=\"downloadAllEnabled()\" (click)=\"downloadAll()\">\n {{metadata.downloadAllButtonLabel}}\n <span class=\"mat-chip-remove mat-chip-trailing-icon ngx-mat-grey\">\n <i class=\"fas fa-file-zipper\"></i>\n </span>\n </mat-chip>\n <input [matChipInputFor]=\"chipList\" [readonly]=\"true\" hidden>\n </mat-chip-list>\n <button type=\"button\" class=\"ngx-mat-grey\" mat-icon-button matSuffix [disabled]=\"isReadOnly\" (click)=\"fileInput.click()\">\n <i class=\"fas fa-upload\"></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';\nimport { FileUtilities } from '../../../../classes/file.utilities';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { placeholder } from '../../../../mocks/placeholder-data.png';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'file-image-input',\n templateUrl: './file-image-input.component.html',\n styleUrls: ['./file-image-input.component.scss']\n})\nexport class FileImageInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_IMAGE, FileData | FileData[]> implements OnInit {\n\n FileUtilities = FileUtilities;\n\n singlePreviewImage?: string;\n multiPreviewImages?: string[];\n imageIndex: number = 0;\n placeHolder = placeholder;\n\n private async setSinglePreviewImage(): Promise<void> {\n if (this.propertyValue) {\n this.propertyValue = await FileUtilities.getFileData(this.propertyValue as FileData);\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 = this.propertyValue as FileData[] | undefined;\n const previewImages: string[] = [];\n if (multiFileData?.length) {\n for (let i = 0; i < multiFileData.length; i++) {\n if (i === index) {\n multiFileData[index] = await FileUtilities.getFileData(multiFileData[index]);\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}","<div *ngIf=\"!metadata.dragAndDrop && !metadata.preview\">\n <file-input\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n >\n </file-input>\n</div>\n\n<div *ngIf=\"metadata.dragAndDrop || metadata.preview\" class=\"file-input mat-elevation-z8\">\n <file-input\n (fileDataChangeEvent)=\"refreshFileData($event)\"\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n >\n </file-input>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && metadata.multiple\">\n <i (click)=\"prev()\" [class.disabled]=\"imageIndex === 0\" class=\"prev-button fa-solid fa-angle-left\"></i>\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 <i (click)=\"next()\"\n [class.disabled]=\"!multiPreviewImages || !multiPreviewImages.length || imageIndex === (multiPreviewImages.length - 1)\"\n class=\"next-button fa-solid fa-angle-right\"\n >\n </i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && metadata.multiple\">\n <button type=\"button\" (click)=\"setIndex(imageIndex-4)\" mat-icon-button *ngIf=\"\n this.multiPreviewImages\n && multiPreviewImages[imageIndex-4]\n && imageIndex === (this.multiPreviewImages.length - 1)\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 3}}</span>\n </button>\n <!-- eslint-disable-next-line @angular-eslint/template/conditional-complexity -->\n <button type=\"button\" (click)=\"setIndex(imageIndex-3)\" mat-icon-button *ngIf=\"this.multiPreviewImages\n && multiPreviewImages[imageIndex-3]\n && (\n imageIndex === (this.multiPreviewImages.length - 2)\n || imageIndex === (this.multiPreviewImages.length - 1)\n )\"\n >\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 2}}</span>\n </button>\n <button type=\"button\" (click)=\"setIndex(imageIndex-2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex - 1}}</span>\n </button>\n <button type=\"button\" (click)=\"setIndex(imageIndex-1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex-1]\">\n <i class=\"dot\"></i>\n <span class=\"image-index\">{{imageIndex}}</span>\n </button>\n <button type=\"button\" mat-icon-button disabled>\n <i class=\"dot selected\"></i>\n <span class=\"image-index\">{{imageIndex + 1}}</span>\n </button>\n <button type=\"button\" (click)=\"setIndex(imageIndex+1)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+1]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 2}}</span>\n </button>\n <button type=\"button\" (click)=\"setIndex(imageIndex+2)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+2]\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 3}}</span>\n </button>\n <button type=\"button\" (click)=\"setIndex(imageIndex+3)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+3] && imageIndex <= 1\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 4}}</span>\n </button>\n <button type=\"button\" (click)=\"setIndex(imageIndex+4)\" mat-icon-button *ngIf=\"multiPreviewImages?.[imageIndex+4] && imageIndex === 0\">\n <span class=\"dot\"></span>\n <span class=\"image-index\">{{imageIndex + 5}}</span>\n </button>\n </div>\n\n <div class=\"image-preview\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <i class=\"prev-button disabled fa-solid fa-angle-left\"></i>\n <img class=\"mat-elevation-z2\" [src]=\"singlePreviewImage ?? metadata.previewPlaceholderUrl ?? placeHolder\">\n <i class=\"next-button disabled fa-solid fa-angle-right\"></i>\n </div>\n <div class=\"preview-nav\" *ngIf=\"metadata.preview && !metadata.multiple\">\n <button type=\"button\" disabled mat-icon-button>\n <span class=\"dot selected\"></span>\n <span class=\"image-index\">1</span>\n </button>\n </div>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, OnInit } from '@angular/core';\nimport { FileUtilities } from '../../../../classes/file.utilities';\nimport { DecoratorTypes } from '../../../../decorators/base/decorator-types.enum';\nimport { FileData } from '../../../../decorators/file/file-decorator.data';\nimport { BaseEntityType } from '../../../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../base-input.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'file-default-input',\n templateUrl: './file-default-input.component.html',\n styleUrls: ['./file-default-input.component.scss']\n})\nexport class FileDefaultInputComponent<EntityType extends BaseEntityType<EntityType>>\n extends NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.FILE_DEFAULT, FileData | FileData[]> implements OnInit {\n\n FileUtilities = FileUtilities;\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 (fileDataChangeEvent)=\"refreshFileData($event)\"\n [propertyValue]=\"propertyValue\"\n [metadata]=\"metadata\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [isReadOnly]=\"isReadOnly\"\n >\n </file-input>\n</div>","/* eslint-disable jsdoc/require-jsdoc */\nimport { Component, ComponentRef, OnInit, Type, ViewContainerRef } from '@angular/core';\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-eslint/component-selector\n selector: 'custom-input',\n templateUrl: './custom.component.html',\n styleUrls: ['./custom.component.scss']\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> 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}","","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { EntityTab, EntityUtilities } from '../../classes/entity.utilities';\nimport { DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { getValidationErrorMessage } from '../get-validation-error-message.function';\nimport { EntityArrayDecoratorConfigInternal } from '../../decorators/array/array-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../../decorators/object/object-decorator-internal.data';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { AddArrayItemDialogDataBuilder, AddArrayItemDialogDataInternal } from './add-array-item-dialog-data.builder';\nimport { AddArrayItemDialogData } from './add-array-item-dialog-data';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { DateUtilities } from '../../classes/date.utilities';\nimport { LodashUtilities } from '../../capsulation/lodash.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { BaseEntityType } from '../../classes/entity.model';\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})\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()\n entity?: EntityType;\n internalEntity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjunction with the \"entity\".\n */\n @Input()\n propertyKey?: keyof EntityType;\n internalPropertyKey!: 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 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 *\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 *\n * @default false\n */\n @Input()\n hideOmitForEdit?: boolean;\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 *\n * @default false\n */\n @Input()\n isReadOnly?: boolean;\n internalIsReadOnly!: boolean;\n\n @Output()\n inputChangeEvent = new EventEmitter<void>();\n\n @ViewChild('addArrayItemDialog')\n addArrayItemDialog!: TemplateRef<unknown>;\n addArrayItemDialogRef!: MatDialogRef<unknown>;\n\n type!: DecoratorTypes;\n metadata!: PropertyDecoratorConfigInternal;\n\n metadataDefaultObject!: DefaultObjectDecoratorConfigInternal<EntityType>;\n objectProperty!: EntityType;\n objectPropertyTabs!: EntityTab<EntityType>[];\n\n metadataEntityArray!: EntityArrayDecoratorConfigInternal<EntityType>;\n entityArrayValues!: EntityType[];\n arrayItem!: EntityType;\n private arrayItemPriorChanges!: EntityType;\n arrayItemInlineTabs!: EntityTab<EntityType>[];\n dataSource!: MatTableDataSource<EntityType>;\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n displayedColumns!: string[];\n isArrayItemValid: boolean = false;\n\n dialogInputData!: AddArrayItemDialogData<EntityType>;\n dialogData!: AddArrayItemDialogDataInternal<EntityType>;\n arrayItemDialogTabs!: EntityTab<EntityType>[];\n isDialogArrayItemValid: boolean = false;\n\n readonly DecoratorTypes = DecoratorTypes;\n\n EntityUtilities = EntityUtilities;\n DateUtilities = DateUtilities;\n\n constructor(\n private readonly dialog: MatDialog\n ) {}\n\n /**\n * This is needed for the inputs to work inside an ngFor.\n *\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 ngOnInit(): void {\n if (!this.entity) {\n throw new Error('Missing required Input data \"entity\"');\n }\n this.internalEntity = this.entity;\n\n if (this.propertyKey == null) {\n throw new Error('Missing required Input data \"propertyKey\"');\n }\n this.internalPropertyKey = this.propertyKey;\n\n this.internalGetValidationErrorMessage = this.getValidationErrorMessage ?? getValidationErrorMessage;\n this.internalIsReadOnly = this.isReadOnly ?? false;\n\n this.type = EntityUtilities.getPropertyType(this.internalEntity, this.internalPropertyKey);\n this.metadata = EntityUtilities.getPropertyMetadata(this.internalEntity, this.internalPropertyKey, this.type);\n\n if (this.type === DecoratorTypes.OBJECT) {\n this.initObjectInput();\n }\n if (this.type === DecoratorTypes.ARRAY) {\n this.initEntityArray();\n }\n }\n\n private initEntityArray(): void {\n this.metadataEntityArray = this.metadata as EntityArrayDecoratorConfigInternal<EntityType>;\n if (this.internalEntity[this.internalPropertyKey] == null) {\n (this.internalEntity[this.internalPropertyKey] as EntityType[]) = [];\n }\n this.entityArrayValues = this.internalEntity[this.internalPropertyKey] 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.displayedColumns = this.internalIsReadOnly ? givenDisplayColumns : ['select'].concat(givenDisplayColumns);\n this.dataSource = new MatTableDataSource();\n this.dataSource.data = this.entityArrayValues;\n this.arrayItem = new this.metadataEntityArray.EntityClass();\n this.arrayItemInlineTabs = EntityUtilities.getEntityTabs(this.arrayItem, true);\n this.arrayItemPriorChanges = LodashUtilities.cloneDeep(this.arrayItem);\n\n this.dialogInputData = {\n entity: this.arrayItem,\n createDialogData: this.metadataEntityArray.createDialogData,\n getValidationErrorMessage: this.getValidationErrorMessage\n };\n this.dialogData = new AddArrayItemDialogDataBuilder(this.dialogInputData).getResult();\n this.arrayItemDialogTabs = EntityUtilities.getEntityTabs(this.dialogData.entity, true);\n }\n\n private initObjectInput(): void {\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfigInternal<EntityType>;\n this.objectProperty = this.internalEntity[this.internalPropertyKey] as EntityType;\n this.objectPropertyTabs = EntityUtilities.getEntityTabs(this.objectProperty, this.hideOmitForCreate, this.hideOmitForEdit);\n }\n\n /**\n * Checks if the arrayItem is valid.\n */\n checkIsArrayItemValid(): void {\n this.isArrayItemValid = EntityUtilities.isEntityValid(this.arrayItem, 'create');\n }\n\n /**\n * Checks if the arrayItem inside the dialog is valid.\n */\n checkIsDialogArrayItemValid(): void {\n this.isDialogArrayItemValid = EntityUtilities.isEntityValid(this.dialogData.entity, 'create');\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 if (this.metadataEntityArray.createInline) {\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))) {\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.dataSource.data = this.entityArrayValues;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n this.checkIsArrayItemValid();\n this.emitChange();\n }\n else {\n this.addArrayItemDialogRef = this.dialog.open(\n this.addArrayItemDialog,\n {\n data: this.dialogData,\n autoFocus: false,\n restoreFocus: false\n }\n );\n }\n }\n\n /**\n * Adds the array item defined in the dialog.\n */\n addArrayItem(): void {\n if (!this.isDialogArrayItemValid) {\n return;\n }\n this.addArrayItemDialogRef.close();\n this.entityArrayValues.push(LodashUtilities.cloneDeep(this.arrayItem));\n this.dataSource.data = this.entityArrayValues;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n this.checkIsArrayItemValid();\n this.emitChange();\n }\n\n /**\n * Cancels adding the array item defined in the dialog.\n */\n cancelAddArrayItem(): void {\n this.addArrayItemDialogRef.close();\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n this.emitChange();\n }\n\n /**\n * Removes all selected entries from the entity array.\n *\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-eslint/no-explicit-any\n 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 this.emitChange();\n }\n\n /**\n * Toggles all array-items in the table.\n *\n * @param selection - The selection to toggle.\n * @param dataSource - The dataSource of the selection.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n masterToggle(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): void {\n if (this.isAllSelected(selection, dataSource)) {\n selection.clear();\n }\n else {\n dataSource.data.forEach(row => selection.select(row));\n }\n }\n\n /**\n * Checks if all array-items in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n *\n * @param selection - The selection to check.\n * @param dataSource - The dataSource of the selection.\n * @returns Whether or not all array-items in the table have been selected.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isAllSelected(selection: SelectionModel<any>, dataSource: MatTableDataSource<any>): boolean {\n const numSelected = selection.selected.length;\n const numRows = dataSource.data.length;\n return numSelected === numRows;\n }\n}","<div [ngSwitch]=\"type\" *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <string-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <string-textbox-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-textbox-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <string-autocomplete-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-autocomplete-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <string-dropdown-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-dropdown-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.STRING_PASSWORD\">\n <string-password-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </string-password-input>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <boolean-checkbox-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </boolean-checkbox-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <boolean-toggle-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </boolean-toggle-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <boolean-dropdown-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </boolean-dropdown-input>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <number-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </number-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <number-dropdown-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </number-dropdown-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_SLIDER\">\n <number-slider-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </number-slider-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 class=\"row\" *ngFor=\"let row of tab.rows;\">\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 [isReadOnly]=\"internalIsReadOnly\"\n class=\"col-lg-{{EntityUtilities.getWidth(objectProperty, key, 'lg')}} col-md-{{EntityUtilities.getWidth(objectProperty, key, 'md')}} col-sm-{{EntityUtilities.getWidth(objectProperty, key, 'sm')}}\"\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 class=\"row\" *ngFor=\"let row of objectPropertyTabs[0].rows\">\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 [isReadOnly]=\"internalIsReadOnly\"\n class=\"col-lg-{{EntityUtilities.getWidth(objectProperty, key, 'lg')}} col-md-{{EntityUtilities.getWidth(objectProperty, key, 'md')}} col-sm-{{EntityUtilities.getWidth(objectProperty, key, 'sm')}}\"\n (inputChangeEvent)=\"emitChange()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n <div class=\"entityArray\" *ngSwitchCase=\"DecoratorTypes.ARRAY\">\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 class=\"row\" *ngFor=\"let row of tab.rows\">\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=\"col-lg-{{EntityUtilities.getWidth(arrayItem, key, 'lg')}} col-md-{{EntityUtilities.getWidth(arrayItem, key, 'md')}} col-sm-{{EntityUtilities.getWidth(arrayItem, key, 'sm')}}\"\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 class=\"row\" *ngFor=\"let row of arrayItemInlineTabs[0].rows\">\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=\"col-lg-{{EntityUtilities.getWidth(arrayItem, key, 'lg')}} col-md-{{EntityUtilities.getWidth(arrayItem, key, 'md')}} col-sm-{{EntityUtilities.getWidth(arrayItem, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\" *ngIf=\"!internalIsReadOnly\">\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]=\"!selection.selected.length\"\n (click)=\"remove(selection, entityArrayValues, dataSource)\">\n {{metadataEntityArray.removeButtonLabel}}\n </button>\n </div>\n \n <mat-table [dataSource]=\"dataSource\">\n <!-- select Column -->\n <ng-container matColumnDef=\"select\" *ngIf=\"!internalIsReadOnly\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [disabled]=\"!dataSource.data.length\" (change)=\"$event ? masterToggle(selection, dataSource) : null\"\n [checked]=\"selection.hasValue() && isAllSelected(selection, dataSource)\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected(selection, dataSource)\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"></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 class=\"entity\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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 class=\"array-error\" *ngIf=\"metadataEntityArray.required && !dataSource.data.length\">\n {{metadataEntityArray.missingErrorMessage}}\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE\">\n <array-date-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-date-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE_TIME\">\n <array-date-time-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-date-time-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_DATE_RANGE\">\n <array-date-range-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-date-range-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_CHIPS\">\n <array-string-chips-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-string-chips-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\">\n <array-string-autocomplete-chips\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </array-string-autocomplete-chips>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Dates-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.DATE\">\n <date-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </date-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.DATE_RANGE\">\n <date-range-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </date-range-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.DATE_TIME\">\n <date-time-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </date-time-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Files-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.FILE_DEFAULT\">\n <file-default-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </file-default-input>\n </div>\n <div *ngSwitchCase=\"DecoratorTypes.FILE_IMAGE\">\n <file-image-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </file-image-input>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Custom------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.CUSTOM\">\n <custom-input\n (inputChangeEvent)=\"emitChange()\"\n [entity]=\"internalEntity\"\n [key]=\"internalPropertyKey\"\n [getValidationErrorMessage]=\"internalGetValidationErrorMessage\"\n [isReadOnly]=\"internalIsReadOnly\"\n >\n </custom-input>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}} is not known.</div>\n</div>\n\n<!--------------------------------------------------------->\n<!--------------------Add Array Item Dialog---------------->\n<!--------------------------------------------------------->\n<ng-template #addArrayItemDialog>\n <h2 mat-dialog-title>{{dialogData.createDialogData.title}}</h2>\n\n <form class=\"row\">\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 class=\"row\" *ngFor=\"let row of tab.rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"dialogData.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"dialogData.getValidationErrorMessage\"\n class=\"col-lg-{{EntityUtilities.getWidth(dialogData.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(dialogData.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(dialogData.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsDialogArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"arrayItemDialogTabs.length <= 1\">\n <div class=\"row\" *ngFor=\"let row of arrayItemDialogTabs[0].rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"dialogData.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"dialogData.getValidationErrorMessage\"\n class=\"col-lg-{{EntityUtilities.getWidth(dialogData.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(dialogData.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(dialogData.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsDialogArrayItemValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <button type=\"submit\" mat-raised-button (click)=\"addArrayItem()\" [class.mat-button-disabled]=\"!isDialogArrayItemValid\">\n {{dialogData.createDialogData.createButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button (click)=\"cancelAddArrayItem()\" class=\"cancel-button\">\n {{dialogData.createDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n </form>\n\n</ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityInputComponent } from './input.component';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { StringInputComponent } from './string/string-input/string-input.component';\nimport { StringTextboxInputComponent } from './string/string-textbox-input/string-textbox-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 { BooleanCheckboxInputComponent } from './boolean/boolean-checkbox-input/boolean-checkbox-input.component';\nimport { BooleanToggleInputComponent } from './boolean/boolean-toggle-input/boolean-toggle-input.component';\nimport { BooleanDropdownInputComponent } from './boolean/boolean-dropdown-input/boolean-dropdown-input.component';\nimport { NumberInputComponent } from './number/number-input/number-input.component';\nimport { NumberDropdownInputComponent } from './number/number-dropdown-input/number-dropdown-input.component';\nimport { ArrayStringChipsInputComponent } from './array/array-string-chips-input/array-string-chips-input.component';\nimport { ArrayStringAutocompleteChipsComponent } from './array/array-string-autocomplete-chips/array-string-autocomplete-chips.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 { ArrayDateInputComponent } from './array/array-date-input/array-date-input.component';\nimport { ArrayDateTimeInputComponent } from './array/array-date-time-input/array-date-time-input.component';\nimport { ArrayDateRangeInputComponent } from './array/array-date-range-input/array-date-range-input.component';\nimport { FileInputComponent } from './file/file-input/file-input.component';\nimport { FileImageInputComponent } from './file/file-image-input/file-image-input.component';\nimport { FileDefaultInputComponent } from './file/file-default-input/file-default-input.component';\nimport { DragDropDirective } from './file/file-input/dragDrop.directive';\nimport { CustomInputComponent } from './custom/custom.component';\nimport { StringPasswordInputComponent } from './string/string-password-input/string-password-input.component';\nimport { NumberSliderInputComponent } from './number/number-slider-input/number-slider-input.component';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@NgModule({\n declarations: [\n StringInputComponent,\n StringTextboxInputComponent,\n StringAutocompleteInputComponent,\n StringDropdownInputComponent,\n StringPasswordInputComponent,\n BooleanCheckboxInputComponent,\n BooleanToggleInputComponent,\n BooleanDropdownInputComponent,\n NumberInputComponent,\n NumberDropdownInputComponent,\n NumberSliderInputComponent,\n ArrayStringChipsInputComponent,\n ArrayStringAutocompleteChipsComponent,\n DateInputComponent,\n DateRangeInputComponent,\n DateTimeInputComponent,\n ArrayDateInputComponent,\n ArrayDateTimeInputComponent,\n ArrayDateRangeInputComponent,\n FileInputComponent,\n FileImageInputComponent,\n FileDefaultInputComponent,\n DragDropDirective,\n CustomInputComponent,\n NgxMatEntityInputComponent\n ],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatIconModule,\n MatTableModule,\n MatDialogModule,\n MatButtonModule,\n MatDatepickerModule,\n MatSliderModule,\n MatTabsModule\n ],\n exports: [NgxMatEntityInputComponent]\n})\nexport class NgxMatEntityInputModule {}","import { EntityService } from '../../../classes/entity.service';\nimport { CreateEntityDialogData } from './create-entity-dialog-data';\nimport { HttpClient } from '@angular/common/http';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from './create-dialog-data.builder';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The internal CreateEntityDialogData. Requires all default values the user can leave out.\n */\nexport class CreateEntityDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements CreateEntityDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData: CreateDialogDataInternal;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>,\n createDialogData: CreateDialogDataInternal\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.createDialogData = createDialogData;\n }\n}\n\n/**\n * The Builder for the CreateEntityDialogData. Sets default values.\n */\nexport class CreateEntityDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<CreateEntityDialogDataInternal<EntityType>, CreateEntityDialogData<EntityType>> {\n\n constructor(data: CreateEntityDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: CreateEntityDialogData<EntityType>): CreateEntityDialogDataInternal<EntityType> {\n const createDialogData: CreateDialogDataInternal = new CreateDialogDataBuilder(data.createDialogData).getResult();\n return new CreateEntityDialogDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n createDialogData\n );\n }\n}","import { Component, Inject, Injector, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { EntityService } from '../../../classes/entity.service';\nimport { EntityTab, EntityUtilities } from '../../../classes/entity.utilities';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateEntityDialogDataBuilder, CreateEntityDialogDataInternal } from './create-entity-dialog-data.builder';\nimport { CreateEntityDialogData } from './create-entity-dialog-data';\nimport { BaseEntityType } from '../../../classes/entity.model';\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})\nexport class NgxMatEntityCreateDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityTabs!: EntityTab<EntityType>[];\n\n entityService!: EntityService<EntityType>;\n\n data!: CreateEntityDialogDataInternal<EntityType>;\n\n isEntityValid: boolean = false;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: CreateEntityDialogData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityCreateDialogComponent<EntityType>>,\n private readonly injector: Injector,\n private readonly dialog: MatDialog\n ) {}\n\n ngOnInit(): void {\n this.data = new CreateEntityDialogDataBuilder(this.inputData).getResult();\n this.dialogRef.disableClose = true;\n this.entityTabs = EntityUtilities.getEntityTabs(this.data.entity, true);\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n }\n\n /**\n * Checks if the entity is valid.\n */\n checkIsEntityValid(): void {\n this.isEntityValid = EntityUtilities.isEntityValid(this.data.entity, 'create');\n }\n\n /**\n * Tries add the new entity and close the dialog afterwards.\n * Also handles the confirmation if required.\n */\n create(): void {\n if (!this.isEntityValid) {\n return;\n }\n if (!this.data.createDialogData.createRequiresConfirmDialog) {\n this.confirmCreate();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.createDialogData.confirmCreateDialogData)\n .withDefault('text', ['Do you really want to create this entity?'])\n .withDefault('confirmButtonLabel', 'Create')\n .withDefault('title', 'Create')\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\n this.confirmCreate();\n }\n });\n }\n private confirmCreate(): void {\n void this.entityService.create(this.data.entity).then(() => this.dialogRef.close());\n }\n\n /**\n * Closes the dialog.\n */\n cancel(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title>{{data.createDialogData.title}}</h2>\n\n<form>\n <mat-dialog-content>\n <mat-tab-group *ngIf=\"entityTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of entityTabs\" [label]=\"tab.tabName\">\n <div class=\"row\" *ngFor=\"let row of tab.rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsEntityValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"entityTabs.length <= 1\">\n <div class=\"row\" *ngFor=\"let row of entityTabs[0].rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkIsEntityValid()\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <button type=\"submit\" (click)=\"create()\" mat-raised-button [class.mat-button-disabled]=\"!isEntityValid\">\n {{data.createDialogData.createButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.createDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n</form>\n","import { BaseEntityType } from '../../../classes/entity.model';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditDialogData } from '../table-data';\n\n/**\n * The internal EditDialogData. Requires all default values the user can leave out.\n */\nexport class EditDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditDialogData<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\n constructor(\n title: (entity: EntityType) => string,\n confirmButtonLabel: string,\n deleteButtonLabel: string,\n cancelButtonLabel: string,\n deleteRequiresConfirmDialog: boolean,\n editRequiresConfirmDialog: boolean,\n confirmDeleteDialogData: ConfirmDialogData,\n confirmEditDialogData: ConfirmDialogData\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.confirmDeleteDialogData = confirmDeleteDialogData;\n this.confirmEditDialogData = confirmEditDialogData;\n }\n}\n\n/**\n * The Builder for the EditDialogData. Sets default values.\n */\nexport class EditDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditDialogDataInternal<EntityType>, EditDialogData<EntityType>> {\n\n constructor(data?: EditDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data?: EditDialogData<EntityType>): EditDialogDataInternal<EntityType> {\n const confirmEditDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmEditDialogData)\n .withDefault('confirmButtonLabel', 'Save')\n .withDefault('text', ['Do you really want to save all changes?'])\n .withDefault('title', 'Edit')\n .getResult();\n\n const confirmDeleteDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmDeleteDialogData)\n .withDefault('confirmButtonLabel', 'Delete')\n .withDefault('type', 'delete')\n .withDefault('text', ['Do you really want to delete this entity?'])\n .withDefault('title', 'Delete')\n .getResult();\n\n return new EditDialogDataInternal(\n data?.title ?? (() => 'Edit'),\n data?.confirmButtonLabel ?? 'Save',\n data?.deleteButtonLabel ?? 'Delete',\n data?.cancelButtonLabel ?? 'Cancel',\n data?.deleteRequiresConfirmDialog ?? true,\n data?.editRequiresConfirmDialog ?? false,\n confirmDeleteDialogData,\n confirmEditDialogData\n );\n }\n}","import { EntityService } from '../../../classes/entity.service';\nimport { HttpClient } from '@angular/common/http';\nimport { EditEntityDialogData } from './edit-entity-dialog-data';\nimport { EditDialogDataBuilder, EditDialogDataInternal } from './edit-dialog-data.builder';\nimport { BaseBuilder } from '../../../classes/base.builder';\nimport { BaseEntityType } from '../../../classes/entity.model';\n\n/**\n * The internal EditEntityDialogData. Requires all default values the user can leave out.\n */\nexport class EditEntityDialogDataInternal<EntityType extends BaseEntityType<EntityType>> implements EditEntityDialogData<EntityType> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n entity: EntityType;\n // eslint-disable-next-line jsdoc/require-jsdoc\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editDialogData: EditDialogDataInternal<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: new (httpClient: HttpClient) => EntityService<EntityType>,\n editDialogData: EditDialogDataInternal<EntityType>,\n allowUpdate: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.editDialogData = editDialogData;\n this.allowDelete = allowDelete;\n this.allowUpdate = allowUpdate;\n }\n}\n\n/**\n * The Builder for the EditEntityDialogData. Sets default values.\n */\nexport class EditEntityDialogDataBuilder<EntityType extends BaseEntityType<EntityType>>\n extends BaseBuilder<EditEntityDialogDataInternal<EntityType>, EditEntityDialogData<EntityType>> {\n\n constructor(data: EditEntityDialogData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: EditEntityDialogData<EntityType>): EditEntityDialogDataInternal<EntityType> {\n const editDialogData: EditDialogDataInternal<EntityType> = new EditDialogDataBuilder(data.editDialogData).getResult();\n return new EditEntityDialogDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n editDialogData,\n data.allowUpdate ?? (() => true),\n data.allowDelete ?? (() => true)\n );\n }\n}","import { Component, Inject, Injector, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { EntityService } from '../../../classes/entity.service';\nimport { EntityTab, EntityUtilities } from '../../../classes/entity.utilities';\nimport { EditEntityDialogData } from './edit-entity-dialog-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditEntityDialogDataBuilder, EditEntityDialogDataInternal } from './edit-entity-dialog.builder';\nimport { LodashUtilities } from '../../../capsulation/lodash.utilities';\nimport { BaseEntityType } from '../../../classes/entity.model';\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})\nexport class NgxMatEntityEditDialogComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityTabs!: EntityTab<EntityType>[];\n\n entityService!: EntityService<EntityType>;\n\n entityPriorChanges!: EntityType;\n\n data!: EditEntityDialogDataInternal<EntityType>;\n\n isEntityValid: boolean = true;\n isEntityDirty: boolean = false;\n\n isReadOnly!: boolean;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: EditEntityDialogData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityEditDialogComponent<EntityType>>,\n private readonly injector: Injector,\n private readonly dialog: MatDialog\n ) {}\n\n ngOnInit(): void {\n this.data = new EditEntityDialogDataBuilder(this.inputData).getResult();\n this.entityPriorChanges = LodashUtilities.cloneDeep(this.data.entity);\n this.isReadOnly = !this.data.allowUpdate(this.entityPriorChanges);\n this.dialogRef.disableClose = true;\n this.entityTabs = EntityUtilities.getEntityTabs(this.data.entity, false, true);\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n }\n\n /**\n * Checks if the entity has become invalid or dirty.\n */\n async checkEntity(): Promise<void> {\n this.isEntityValid = EntityUtilities.isEntityValid(this.data.entity, 'update');\n this.isEntityDirty = await EntityUtilities.isDirty(this.data.entity, this.entityPriorChanges);\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.isReadOnly || !this.isEntityValid || !this.isEntityDirty) {\n return;\n }\n if (!this.data.editDialogData.editRequiresConfirmDialog) {\n this.confirmEdit();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.editDialogData.confirmEditDialogData)\n .withDefault('text', ['Do you really want to save all changes?'])\n .withDefault('confirmButtonLabel', 'Save')\n .withDefault('title', 'Edit')\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\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.editDialogData.deleteRequiresConfirmDialog) {\n this.confirmDelete();\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.editDialogData.confirmDeleteDialogData)\n .withDefault('text', ['Do you really want to delete this entity?'])\n .withDefault('type', 'delete')\n .withDefault('confirmButtonLabel', 'Delete')\n .withDefault('title', 'Delete')\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\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 * Reverts all changes made and closes the dialog.\n */\n cancel(): void {\n EntityUtilities.resetChangesOnEntity(this.data.entity, this.entityPriorChanges);\n this.dialogRef.close(0);\n }\n}","<h2 mat-dialog-title>\n {{data.editDialogData.title(data.entity)}}\n <button type=\"button\" *ngIf=\"data.allowDelete(data.entity)\" mat-raised-button (click)=\"delete()\" color=\"warn\" class=\"delete-button\" tabindex=\"-1\">\n {{data.editDialogData.deleteButtonLabel}}\n </button>\n</h2>\n\n<form>\n <mat-dialog-content>\n <mat-tab-group *ngIf=\"entityTabs.length > 1\" preserveContent>\n <mat-tab *ngFor=\"let tab of entityTabs\" [label]=\"tab.tabName\">\n <div class=\"row\" *ngFor=\"let row of tab.rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkEntity()\"\n [isReadOnly]=\"isReadOnly\"\n >\n </ngx-mat-entity-input>\n </div>\n </mat-tab>\n </mat-tab-group>\n \n <div *ngIf=\"entityTabs.length <= 1\">\n <div class=\"row\" *ngFor=\"let row of entityTabs[0].rows\">\n <ngx-mat-entity-input\n *ngFor=\"let key of row.keys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n class=\"col-lg-{{EntityUtilities.getWidth(data.entity, key, 'lg')}} col-md-{{EntityUtilities.getWidth(data.entity, key, 'md')}} col-sm-{{EntityUtilities.getWidth(data.entity, key, 'sm')}}\"\n (inputChangeEvent)=\"checkEntity()\"\n [isReadOnly]=\"isReadOnly\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n </mat-dialog-content>\n \n <mat-dialog-actions>\n <button type=\"submit\" (click)=\"edit()\" mat-raised-button [class.mat-button-disabled]=\"isReadOnly || !isEntityValid || !isEntityDirty\">\n {{data.editDialogData.confirmButtonLabel}}\n </button>\n <button type=\"button\" mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.editDialogData.cancelButtonLabel}}\n </button>\n </mat-dialog-actions>\n</form>\n","import { EntityService } from '../../classes/entity.service';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from './create-dialog/create-dialog-data.builder';\nimport { EditDialogDataBuilder, EditDialogDataInternal } from './edit-dialog/edit-dialog-data.builder';\nimport { BaseData, DisplayColumn, MultiSelectAction, TableData } from './table-data';\nimport { HttpClient } from '@angular/common/http';\nimport { BaseBuilder } from '../../classes/base.builder';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\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 createDialogData: CreateDialogDataInternal;\n // eslint-disable-next-line jsdoc/require-jsdoc\n editDialogData: EditDialogDataInternal<EntityType>;\n\n constructor(\n baseData: BaseDataInternal<EntityType>,\n createDialogData: CreateDialogDataInternal,\n editDialogData: EditDialogDataInternal<EntityType>\n ) {\n this.baseData = baseData;\n this.createDialogData = createDialogData;\n this.editDialogData = editDialogData;\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>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: BaseData<EntityType>): BaseDataInternal<EntityType> {\n return new BaseDataInternal<EntityType>(\n data.title,\n data.displayColumns,\n data.EntityServiceClass,\n data.searchLabel ?? 'Search',\n data.createButtonLabel ?? 'Create',\n data.searchString ?? defaultSearchFunction,\n data.allowCreate ?? (() => true),\n data.allowRead ?? (() => true),\n data.allowUpdate ?? (() => true),\n data.allowDelete ?? (() => true),\n data.multiSelectActions ?? [],\n data.multiSelectLabel ?? 'Actions',\n data.EntityClass,\n data.edit,\n data.create\n );\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: new (httpClient: HttpClient) => EntityService<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 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 multiSelectActions: MultiSelectAction<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n multiSelectLabel: string;\n\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 title: string,\n displayColumns: DisplayColumn<EntityType>[],\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>,\n searchLabel: string,\n createButtonLabel: string,\n searchString: (entity: EntityType) => string,\n allowCreate: () => boolean,\n allowRead: (entity: EntityType) => boolean,\n allowUpdate: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean,\n multiSelectActions: MultiSelectAction<EntityType>[],\n multiSelectLabel: string,\n EntityClass?: EntityClassNewable<EntityType>,\n edit?: (entity: EntityType) => unknown,\n create?: (entity: EntityType) => unknown,\n ) {\n this.title = title;\n this.displayColumns = displayColumns;\n this.EntityServiceClass = EntityServiceClass;\n this.EntityClass = EntityClass;\n this.searchLabel = searchLabel;\n this.createButtonLabel = createButtonLabel;\n this.searchString = searchString;\n this.allowCreate = allowCreate;\n this.allowRead = allowRead;\n this.allowUpdate = allowUpdate;\n this.allowDelete = allowDelete;\n this.multiSelectActions = multiSelectActions;\n this.multiSelectLabel = multiSelectLabel;\n this.edit = edit;\n this.create = create;\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(data: TableData<EntityType>) {\n super(data);\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected generateBaseData(data: TableData<EntityType>): TableDataInternal<EntityType> {\n const createDialogData: CreateDialogDataInternal = new CreateDialogDataBuilder(data.createDialogData).getResult();\n const editDialogData: EditDialogDataInternal<EntityType> = new EditDialogDataBuilder(data.editDialogData).getResult();\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.baseData).getResult();\n return new TableDataInternal<EntityType>(\n baseData,\n createDialogData,\n editDialogData\n );\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n protected override validateInput(data: TableData<EntityType>): void {\n if (data.baseData.multiSelectActions?.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 (\n data.baseData.allowCreate !== (() => false)\n || data.baseData.allowRead !== (() => false)\n || data.baseData.allowUpdate !== (() => false)\n || data.baseData.allowDelete !== (() => false)\n )\n && !data.baseData.EntityClass\n ) {\n throw new Error(`\n Missing required Input data \"EntityClass\".\n You can only omit this value if you can neither create or update entities.`\n );\n }\n if (data.baseData.allowCreate !== (() => false) && !data.baseData.create && !data.createDialogData) {\n throw new Error(\n `Missing required Input data \"createDialogData\".\n You can only omit this value when creation is disallowed or done with a custom create method.`\n );\n }\n if (\n (\n data.baseData.allowRead !== (() => false)\n || data.baseData.allowUpdate !== (() => false)\n || data.baseData.allowDelete !== (() => false)\n )\n && !data.baseData.edit\n && !data.editDialogData\n ) {\n throw new Error(\n `Missing required Input data \"editDialogData\".\n You can only omit this value when viewing, editing and deleting is disallowed or done with a custom edit method.`\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 *\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 */\nfunction defaultSearchFunction<EntityType extends BaseEntityType<EntityType>>(entity: EntityType): string {\n const searchString = 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 { Component, Injector, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { EntityService } from '../../classes/entity.service';\nimport { firstValueFrom, Subject, takeUntil } from 'rxjs';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';\nimport { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';\nimport { EditEntityDialogData } from './edit-dialog/edit-entity-dialog-data';\nimport { MultiSelectAction, TableData } from './table-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateEntityDialogDataBuilder, CreateEntityDialogDataInternal } from './create-dialog/create-entity-dialog-data.builder';\nimport { TableDataBuilder, TableDataInternal } from './table-data.builder';\nimport { EditEntityDialogDataBuilder, EditEntityDialogDataInternal } from '../table/edit-dialog/edit-entity-dialog.builder';\nimport { BaseEntityType } from '../../classes/entity.model';\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})\nexport class NgxMatEntityTableComponent<EntityType extends BaseEntityType<EntityType>> implements OnInit, OnDestroy {\n\n /**\n * The configuration for the component.\n */\n @Input()\n tableData!: TableData<EntityType>;\n\n data!: TableDataInternal<EntityType>;\n\n private entityService!: EntityService<EntityType>;\n private readonly onDestroy = new Subject<void>();\n @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator;\n @ViewChild(MatSort, { static: true }) sort!: MatSort;\n @ViewChild('filter', { static: true }) filter!: string;\n displayedColumns!: string[];\n dataSource: MatTableDataSource<EntityType> = new MatTableDataSource();\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n\n constructor(private readonly dialog: MatDialog, private readonly injector: Injector) {}\n\n /**\n * Sets up all the configuration for the table and the EntityService.\n */\n ngOnInit(): void {\n this.data = new TableDataBuilder(this.tableData).getResult();\n\n this.entityService = this.injector.get(this.data.baseData.EntityServiceClass) as EntityService<EntityType>;\n\n const givenDisplayColumns = this.data.baseData.displayColumns.map((v) => v.displayName);\n if (this.data.baseData.multiSelectActions.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 this.data.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity) as string;\n };\n this.dataSource.sort = this.sort;\n this.dataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr = this.data.baseData.searchString(entity) ;\n const formattedSearchString = searchStr.toLowerCase();\n const formattedFilterString = 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.pipe(takeUntil(this.onDestroy)).subscribe((entities) => {\n this.dataSource.data = entities;\n this.selection.clear();\n });\n void this.entityService.read();\n }\n\n /**\n * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.\n *\n * @param entity - The entity that should be updated.\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n editEntity(entity: EntityType): void {\n if (!(this.data.baseData.allowUpdate(entity) || this.data.baseData.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 }\n else {\n void this.editDefault(new this.data.baseData.EntityClass(entity));\n }\n }\n\n private async editDefault(entity: EntityType): Promise<void> {\n const inputDialogData: EditEntityDialogData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n allowUpdate: this.data.baseData.allowUpdate,\n allowDelete: this.data.baseData.allowDelete,\n editDialogData: this.data.editDialogData\n };\n const dialogData: EditEntityDialogDataInternal<EntityType> = new EditEntityDialogDataBuilder(inputDialogData).getResult();\n const res: number = await firstValueFrom(\n this.dialog.open(NgxMatEntityEditDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }).afterClosed()\n ) as number;\n if (res === 0) {\n const data = 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 *\n * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.\n */\n createEntity(): void {\n if (this.data.baseData.allowCreate()) {\n if (!this.data.baseData.EntityClass) {\n throw new Error('No \"EntityClass\" specified for this table');\n }\n if (this.data.baseData.create) {\n this.data.baseData.create(new this.data.baseData.EntityClass());\n }\n else {\n this.createDefault(new this.data.baseData.EntityClass());\n }\n }\n }\n\n private createDefault(entity: EntityType): void {\n const dialogData: CreateEntityDialogDataInternal<EntityType> = new CreateEntityDialogDataBuilder(\n {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n createDialogData: this.data.createDialogData\n }\n ).getResult();\n this.dialog.open(NgxMatEntityCreateDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n });\n }\n\n /**\n * Runs the MultiAction for all selected entries.\n * Also handles confirmation with an additional dialog if configured.\n *\n * @param action - The MultiAction to run.\n */\n runMultiAction(action: MultiSelectAction<EntityType>): void {\n if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {\n this.confirmRunMultiAction(action);\n return;\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(action.confirmDialogData)\n .withDefault('text', [`Do you really want to run this action on ${this.selection.selected.length} entries?`])\n .withDefault('title', action.displayName)\n .getResult();\n const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n });\n dialogRef.afterClosed().subscribe((res: number) => {\n if (res === 1) {\n this.confirmRunMultiAction(action);\n }\n });\n }\n\n private confirmRunMultiAction(action: MultiSelectAction<EntityType>): void {\n action.action(this.selection.selected);\n }\n\n /**\n * Checks if an MultiAction is disabled (e.g. Because no entries have been selected).\n *\n * @param action - The MultiAction to check.\n * @returns Whether or not the Action can be used.\n */\n multiActionDisabled(action: MultiSelectAction<EntityType>): boolean {\n if (!this.selection.selected.length) {\n return true;\n }\n if (action.enabled?.(this.selection.selected) === false) {\n return true;\n }\n return false;\n }\n\n /**\n * Toggles all entries in the table.\n */\n masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n }\n else {\n this.dataSource.data.forEach(row => this.selection.select(row));\n }\n }\n\n /**\n * Checks if all entries in the table have been selected.\n * This is needed to display the \"masterToggle\"-checkbox correctly.\n *\n * @returns Whether or not all entries in the table have been selected.\n */\n isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next(undefined);\n this.onDestroy.complete();\n }\n\n /**\n * Applies the search input to filter the table entries.\n *\n * @param event - The keyup-event which contains the search-string of the user.\n */\n applyFilter(event: Event): void {\n const filterValue = (event.target as HTMLInputElement).value;\n this.dataSource.filter = filterValue.trim().toLowerCase();\n }\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.multiSelectActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate()\"\n [class.col-lg-4]=\"!data.baseData.allowCreate()\"\n [class.col-md-3]=\"data.baseData.allowCreate()\"\n [class.col-md-6]=\"!data.baseData.allowCreate()\"\n [class.col-sm-6]=\"data.baseData.allowCreate()\"\n [class.col-sm-12]=\"!data.baseData.allowCreate()\"\n >\n <button type=\"button\" class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.multiSelectLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button type=\"button\" *ngFor=\"let action of data.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate()\"\n [class.col-lg-2]=\"data.baseData.multiSelectActions.length\"\n [class.col-lg-4]=\"!data.baseData.multiSelectActions.length\"\n [class.col-md-3]=\"data.baseData.multiSelectActions.length\"\n [class.col-md-6]=\"!data.baseData.multiSelectActions.length\"\n [class.col-sm-6]=\"data.baseData.multiSelectActions.length\"\n [class.col-sm-12]=\"!data.baseData.multiSelectActions.length\"\n >\n <button type=\"button\" class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </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 class=\"entity\" [class.enabled]=\"data.baseData.allowUpdate(entity) || data.baseData.allowRead(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\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-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityCreateDialogComponent } from './create-entity-dialog.component';\nimport { NgxMatEntityInputModule } from '../../input/input.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@NgModule({\n declarations: [NgxMatEntityCreateDialogComponent],\n imports: [\n CommonModule,\n NgxMatEntityInputModule,\n MatDialogModule,\n FormsModule,\n MatButtonModule,\n MatTabsModule\n ],\n exports: [NgxMatEntityCreateDialogComponent]\n})\nexport class NgxMatEntityCreateDialogModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityEditDialogComponent } from './edit-entity-dialog.component';\nimport { NgxMatEntityInputModule } from '../../input/input.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgxMatEntityConfirmDialogModule } from '../../confirm-dialog/confirm-dialog.module';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n@NgModule({\n declarations: [ NgxMatEntityEditDialogComponent],\n imports: [\n CommonModule,\n NgxMatEntityInputModule,\n MatDialogModule,\n FormsModule,\n MatButtonModule,\n MatTabsModule,\n NgxMatEntityConfirmDialogModule\n ],\n exports: [ NgxMatEntityEditDialogComponent]\n})\nexport class NgxMatEntityEditDialogModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityTableComponent } from './table.component';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { NgxMatEntityCreateDialogModule } from './create-dialog/create-entity-dialog.module';\nimport { NgxMatEntityEditDialogModule } from './edit-dialog/edit-entity-dialog.module';\n\n@NgModule({\n declarations: [NgxMatEntityTableComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatTableModule,\n MatPaginatorModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n NgxMatEntityCreateDialogModule,\n NgxMatEntityEditDialogModule,\n ],\n exports: [NgxMatEntityTableComponent]\n})\nexport class NgxMatEntityTableModule {}","import { CreateDialogData } from '../../components/table/table-data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { ArrayDecoratorConfig, ArrayTableDisplayColumn, AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { DateUtilities } from '../../classes/date.utilities';\nimport { DateRange } from '../date/date-decorator.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\n\n/**\n * The internal EntityArrayDecoratorConfig. Sets default values.\n */\nexport class EntityArrayDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal 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: ArrayTableDisplayColumn<EntityType>[];\n // eslint-disable-next-line jsdoc/require-jsdoc\n createDialogData?: CreateDialogData;\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>) {\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);\n this.EntityClass = data.EntityClass;\n this.displayColumns = data.displayColumns;\n this.createInline = data.createInline ?? true;\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n }\n}\n\n/**\n * The internal DateArrayDecoratorConfig. Sets default values.\n */\nexport class DateArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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: ArrayTableDisplayColumn<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) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\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 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: ArrayTableDisplayColumn<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) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = data.timeDisplayName ?? 'Time';\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 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: ArrayTableDisplayColumn<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) {\n super(data);\n this.itemType = data.itemType;\n this.allowDuplicates = data.allowDuplicates ?? false;\n this.duplicatesErrorDialog = getDefaultDuplicateErrorDialogData(data);\n this.displayColumns = data.displayColumns;\n this.defaultWidths = data.defaultWidths ?? [12, 12, 12];\n this.addButtonLabel = data.addButtonLabel ?? 'Add';\n this.removeButtonLabel = data.removeButtonLabel ?? 'Remove';\n this.missingErrorMessage = data.missingErrorMessage ?? 'Needs to contain at least one value';\n this.placeholderStart = data.placeholderStart ?? 'Start';\n this.placeholderEnd = data.placeholderEnd ?? 'End';\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 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) {\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);\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 implements AutocompleteStringChipsArrayDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n autocompleteValues: 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\n constructor(data: AutocompleteStringChipsArrayDecoratorConfig) {\n super(data);\n this.autocompleteValues = 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);\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 * Gets the default dialog data for the error dialog to display when the user tries to add a duplicate value.\n *\n * @param data - The Array Decorator data.\n * @returns The dialog data with set default values.\n */\nfunction getDefaultDuplicateErrorDialogData(data: ArrayDecoratorConfig): ConfirmDialogData {\n return {\n type: data.duplicatesErrorDialog?.type ?? 'info-only',\n // eslint-disable-next-line max-len\n text: data.duplicatesErrorDialog?.text ?? ['Adding duplicate entries to the array is not allowed.'],\n title: data.duplicatesErrorDialog?.title ?? 'Error adding duplicate item',\n confirmButtonLabel: data.duplicatesErrorDialog?.confirmButtonLabel,\n cancelButtonLabel: data.duplicatesErrorDialog?.cancelButtonLabel,\n requireConfirmation: data.duplicatesErrorDialog?.requireConfirmation,\n confirmationText: data.duplicatesErrorDialog?.confirmationText\n };\n}","import { BaseEntityType } from '../../classes/entity.model';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, DateArrayDecoratorConfigInternal, DateRangeArrayDecoratorConfigInternal, DateTimeArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from './array-decorator-internal.data';\nimport { AutocompleteStringChipsArrayDecoratorConfig, DateArrayDecoratorConfig, DateRangeArrayDecoratorConfig, DateTimeArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\n\n/**\n * Decorator for setting and getting array property metadata.\n *\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), DecoratorTypes.ARRAY);\n case DecoratorTypes.DATE:\n return baseProperty(new DateArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_DATE);\n case DecoratorTypes.DATE_TIME:\n return baseProperty(new DateTimeArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_DATE_TIME);\n case DecoratorTypes.DATE_RANGE:\n return baseProperty(new DateRangeArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_DATE_RANGE);\n case DecoratorTypes.STRING:\n return baseProperty(new StringChipsArrayDecoratorConfigInternal(metadata), DecoratorTypes.ARRAY_STRING_CHIPS);\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n return baseProperty(\n new AutocompleteStringChipsArrayDecoratorConfigInternal(metadata),\n DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\n );\n default:\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n throw new Error(`Unknown itemType ${(metadata as any).itemType}`);\n }\n}","/**\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 {\n /**\n * Whether or not the Property is displayed at all.\n *\n * @default true\n */\n display?: 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 *\n * @default true\n */\n required?: boolean;\n /**\n * Whether or not the property gets omitted when creating new Entities.\n *\n * @default false\n */\n omitForCreate?: boolean;\n /**\n * Whether or not the property gets omitted when updating Entities.\n *\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 *\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 *\n * @default { row: -1, order: -1} (Adds the property at the end)\n */\n position?: Position;\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 *\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 *\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 *\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 *\n * @default -1 (sets this property at the end of the row)\n */\n order?: number\n}","import { CreateDialogData } from '../../components/table/table-data';\nimport { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { Time } from '@angular/common';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { DateRange } from '../date/date-decorator.data';\nimport { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\n\n/**\n * The configuration options for an array property displayed as a table.\n */\nexport interface ArrayTableDisplayColumn<EntityType extends BaseEntityType<EntityType>> {\n /**\n * The name inside the header.\n */\n displayName: string,\n /**\n * A method to get the value inside an row.\n */\n value: (entity: EntityType) => string\n}\n\n/**\n * Interface definition for the @array metadata.\n */\nexport abstract class ArrayDecoratorConfig extends PropertyDecoratorConfig {\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 *\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 * Definition for an array of Entities.\n */\nexport interface EntityArrayDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends ArrayDecoratorConfig {\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: ArrayTableDisplayColumn<EntityType>[],\n\n /**\n * The data for the add-item-dialog.\n * Can be omitted when adding items inline.\n */\n createDialogData?: CreateDialogData,\n\n /**\n * Whether or not the form for adding items to the array\n * should be displayed inline.\n *\n * @default true\n */\n createInline?: boolean,\n\n /**\n * The label for the add button when createInline is true.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button when createInline is true.\n *\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 {\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: ArrayTableDisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n *\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 {\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: ArrayTableDisplayColumn<Date>[],\n\n /**\n * The label for the add button.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n *\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 *\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 {\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: ArrayTableDisplayColumn<DateRange>[],\n\n /**\n * The label for the add button.\n *\n * @default 'Add'\n */\n addButtonLabel?: string,\n\n /**\n * The label for the remove button.\n *\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 *\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n *\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 {\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 *\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 {\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 *\n * @default 'fas fa-circle-minus'\n */\n deleteIcon?: string,\n /**\n * The autocomplete values.\n */\n autocompleteValues: 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}","import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\n\n/**\n * The internal DropdownBooleanDecoratorConfig. Sets default values.\n */\nexport class DropdownBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownTrue = data.dropdownTrue;\n this.dropdownFalse = data.dropdownFalse;\n }\n}\n\n/**\n * The internal CheckboxBooleanDecoratorConfig. Sets default values.\n */\nexport class CheckboxBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 = data.required ?? false;\n }\n}\n\n/**\n * The internal ToggleBooleanDecoratorConfig. Sets default values.\n */\nexport class ToggleBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 = data.required ?? false;\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from './boolean-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig, ToggleBooleanDecoratorConfig } from './boolean-decorator.data';\n\n/**\n * Decorator for setting and getting boolean property metadata.\n *\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(new DropdownBooleanDecoratorConfigInternal(metadata), DecoratorTypes.BOOLEAN_DROPDOWN);\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 { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * The Definition for the @boolean metadata.\n */\nabstract class BooleanDecoratorConfig extends PropertyDecoratorConfig {\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 */\n dropdownTrue: string,\n /**\n * The name of the false value if displayStyle dropdown is used.\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 { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\nimport { DateUtilities } from '../../classes/date.utilities';\nimport { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\n\n/**\n * The internal DefaultDateDecoratorConfig. Sets default values.\n */\nexport class DefaultDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 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) {\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 = data.placeholderStart ?? 'Start';\n this.placeholderEnd = data.placeholderEnd ?? 'End';\n }\n}\n\n/**\n * The internal DateTimeDateDecoratorConfig. Sets default values.\n */\nexport class DateTimeDateDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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>[];\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) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.times = data.times ?? DateUtilities.getDefaultTimes();\n this.timeDisplayName = data.timeDisplayName ?? 'Time';\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}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DateRangeDateDecoratorConfigInternal, DateTimeDateDecoratorConfigInternal, DefaultDateDecoratorConfigInternal } from './date-decorator-internal.data';\nimport { DateRangeDateDecoratorConfig, DateTimeDateDecoratorConfig, DefaultDateDecoratorConfig } from './date-decorator.data';\n\n/**\n * Decorator for setting and getting date property metadata.\n *\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(new DateTimeDateDecoratorConfigInternal(metadata), DecoratorTypes.DATE_TIME);\n }\n else {\n return baseProperty(new DateRangeDateDecoratorConfigInternal(metadata), DecoratorTypes.DATE_RANGE);\n }\n}","import { Time } from '@angular/common';\nimport { DateFilterFn } from '@angular/material/datepicker';\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 extends PropertyDecoratorConfig {\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 {\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 {\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 *\n * @default \"Start\"\n */\n placeholderStart?: string,\n /**\n * The placeholder for the end date of the date range picker.\n *\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 {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'datetime',\n /**\n * The selectable times.\n */\n times?: DropdownValue<Time>[],\n /**\n * The name to use as a label for the time form field.\n *\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 { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\n\n/**\n * The internal DefaultNumberDecoratorConfig. Sets default values.\n */\nexport class DefaultNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 implements DropdownNumberDecoratorConfig {\n // eslint-disable-next-line jsdoc/require-jsdoc\n displayStyle: 'dropdown';\n // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<number>[];\n\n constructor(data: DropdownNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = data.dropdownValues;\n }\n}\n\n/**\n * The internal SliderNumberDecoratorConfig. Sets default values.\n */\nexport class SliderNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 | number;\n // eslint-disable-next-line jsdoc/require-jsdoc\n tickInterval?: number | 'auto';\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.tickInterval = data.tickInterval;\n }\n}\n\n/**\n * The default function to format values for the number slider thumb label.\n *\n * @param value - The value of the slider.\n * @returns Just the value without any formatting done.\n */\nexport function defaultFormatThumbLabelValue(value: number): number {\n return value;\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig, SliderNumberDecoratorConfig } from './number-decorator.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal, SliderNumberDecoratorConfigInternal } from './number-decorator-internal.data';\n\n/**\n * Decorator for setting and getting number property metadata.\n *\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 { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @number metadata.\n */\nabstract class NumberDecoratorConfig extends PropertyDecoratorConfig {\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 // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<number>[]\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 | number,\n /**\n * How often ticks should be displayed.\n */\n tickInterval?: 'auto' | number\n}","import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultObjectDecoratorConfig } from './object-decorator.data';\n\n/**\n * The internal DefaultObjectDecoratorConfig. Sets default values.\n */\nexport class DefaultObjectDecoratorConfigInternal<EntityType extends BaseEntityType<EntityType>>\n extends PropertyDecoratorConfigInternal implements DefaultObjectDecoratorConfig<EntityType> {\n\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\n constructor(data: DefaultObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.EntityClass = data.EntityClass;\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultObjectDecoratorConfig } from './object-decorator.data';\nimport { DefaultObjectDecoratorConfigInternal } from './object-decorator-internal.data';\nimport { BaseEntityType } from '../../classes/entity.model';\n\n/**\n * Decorator for setting and getting object property metadata.\n *\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>\n): (target: object, propertyKey: string) => void {\n return baseProperty(new DefaultObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT);\n}","import { BaseEntityType, EntityClassNewable } from '../../classes/entity.model';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @object metadata.\n */\nabstract class ObjectDecoratorConfig<EntityType extends BaseEntityType<EntityType>> extends PropertyDecoratorConfig {\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!: 'inline';\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}","import { DropdownValue } from '../base/dropdown-value.interface';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @string metadata.\n */\nabstract class StringDecoratorConfig extends PropertyDecoratorConfig {\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 // eslint-disable-next-line jsdoc/require-jsdoc\n dropdownValues: DropdownValue<string>[]\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: 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 * 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 *\n * @default true\n */\n needsConfirmation?: boolean,\n /**\n * The display name of the confirmation password input.\n *\n * @default 'Confirm Password'\n */\n confirmationDisplayName?: string,\n /**\n * The error message to display when the password and the confirm password don't match.\n *\n * @default 'Passwords need to match!'\n */\n passwordsDontMatchErrorMessage?: string\n}","import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultFileDecoratorConfig, ImageFileDecoratorConfig } from './file-decorator.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 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 // eslint-disable-next-line jsdoc/require-jsdoc\n downloadAllButtonLabel: string;\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 this.downloadAllButtonLabel = data.downloadAllButtonLabel ?? 'Download All';\n }\n}\n\n/**\n * The internal ImageFileDecoratorConfig. Sets default values.\n */\nexport class ImageFileDecoratorConfigInternal extends PropertyDecoratorConfigInternal 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 // eslint-disable-next-line jsdoc/require-jsdoc\n downloadAllButtonLabel: string;\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 this.downloadAllButtonLabel = data.downloadAllButtonLabel ?? 'Download All';\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 *\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 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 ? '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 *\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 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 ? '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 *\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 // eslint-disable-next-line max-len\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 { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultFileDecoratorConfigInternal, ImageFileDecoratorConfigInternal } from './file-decorator-internal.data';\nimport { DefaultFileDecoratorConfig, ImageFileDecoratorConfig } from './file-decorator.data';\n\n/**\n * Decorator for setting and getting file property metadata.\n *\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(new DefaultFileDecoratorConfigInternal(metadata), DecoratorTypes.FILE_DEFAULT);\n case 'image':\n return baseProperty(new ImageFileDecoratorConfigInternal(metadata), DecoratorTypes.FILE_IMAGE);\n default:\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n throw new Error(`Unknown metadata type ${(metadata as any).type}`);\n }\n}","import { ConfirmDialogData } from '../../components/confirm-dialog/confirm-dialog-data';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\nimport { FileDataWithFile, FileDataWithUrl } from './file-decorator-internal.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 {\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 *\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 *\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 *\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 *\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 *\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 * The label of the button to download all files.\n * Is only shown when the property contains multiple files.\n *\n * @default 'Download All'\n */\n downloadAllButtonLabel?: string;\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 *\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 { Type } from '@angular/core';\nimport { LodashUtilities } from '../../capsulation/lodash.utilities';\nimport { BaseEntityType } from '../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../components/input/base-input.component';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { CustomDecoratorConfig } from './custom-decorator.data';\n\n/**\n * The default function to use for checking if the value is dirty.\n *\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, MetadataType>\n> extends PropertyDecoratorConfigInternal 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, max-len\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 ?? (() => true);\n this.isEqual = data.isEqual ?? defaultIsEqual;\n this.customMetadata = data.customMetadata;\n }\n}","import { BaseEntityType } from '../../classes/entity.model';\nimport { NgxMatEntityBaseInputComponent } from '../../components/input/base-input.component';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { CustomDecoratorConfigInternal } from './custom-decorator-internal.data';\nimport { CustomDecoratorConfig } from './custom-decorator.data';\n\n/**\n * Decorator for setting and getting custom property metadata.\n *\n * @param metadata - The metadata of the custom property.\n * @returns The method that defines the metadata.\n */\nexport function custom<\n ValueType,\n MetadataType extends BaseEntityType<MetadataType>,\n EntityType extends BaseEntityType<EntityType>\n>(\n metadata: CustomDecoratorConfig<\n EntityType,\n ValueType,\n MetadataType,\n NgxMatEntityBaseInputComponent<EntityType, DecoratorTypes.CUSTOM, MetadataType>\n >\n): (target: object, propertyKey: string) => void {\n return baseProperty<DecoratorTypes.CUSTOM, MetadataType>(new CustomDecoratorConfigInternal(metadata), DecoratorTypes.CUSTOM);\n}","/**\n * Public API Surface of ngx-material-entity.\n */\nimport 'reflect-metadata';\n\n// classes\nexport * from './classes/entity.model';\nexport * from './classes/entity.service';\nexport * from './classes/entity.utilities';\nexport * from './classes/date.utilities';\nexport * from './classes/file.utilities';\n\n// components\nexport * from './components/confirm-dialog/confirm-dialog-data';\nexport * from './components/confirm-dialog/confirm-dialog.component';\nexport * from './components/confirm-dialog/confirm-dialog.module';\n\nexport * from './components/input/input.module';\nexport * from './components/input/input.component';\n\nexport * from './components/table/table-data';\nexport * from './components/table/table.component';\nexport * from './components/table/table.module';\n\nexport * from './components/table/create-dialog/create-entity-dialog-data';\nexport * from './components/table/create-dialog/create-entity-dialog.module';\nexport * from './components/table/create-dialog/create-entity-dialog.component';\n\nexport * from './components/table/edit-dialog/edit-entity-dialog-data';\nexport * from './components/table/edit-dialog/edit-entity-dialog.module';\nexport * from './components/table/edit-dialog/edit-entity-dialog.component';\n\nexport * from './components/get-validation-error-message.function';\n\nexport * from './components/input/base-input.component';\n\n// decorators\nexport * from './decorators/array/array.decorator';\nexport * from './decorators/array/array-decorator.data';\n\nexport * from './decorators/base/decorator-types.enum';\nexport * from './decorators/base/dropdown-value.interface';\nexport { Col, Position } from './decorators/base/property-decorator.data';\n\nexport * from './decorators/boolean/boolean.decorator';\nexport * from './decorators/boolean/boolean-decorator.data';\n\nexport * from './decorators/date/date.decorator';\nexport * from './decorators/date/date-decorator.data';\n\nexport * from './decorators/number/number.decorator';\nexport * from './decorators/number/number-decorator.data';\n\nexport * from './decorators/object/object.decorator';\nexport * from './decorators/object/object-decorator.data';\n\nexport * from './decorators/string/string.decorator';\nexport * from './decorators/string/string-decorator.data';\n\nexport * from './decorators/file/file.decorator';\nexport * from './decorators/file/file-decorator.data';\n\nexport * from './decorators/custom/custom.decorator';\nexport * from './decorators/custom/custom-decorator.data';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","defaultGetValidationErrorMessage","i1","i5","i7","i6","i8","i9","i10","i7.DragDropDirective","i3.FileInputComponent","i1.FileInputComponent","i8.StringInputComponent","i9.StringTextboxInputComponent","i10.StringAutocompleteInputComponent","i11.StringDropdownInputComponent","i12.StringPasswordInputComponent","i13.BooleanCheckboxInputComponent","i14.BooleanToggleInputComponent","i15.BooleanDropdownInputComponent","i16.NumberInputComponent","i17.NumberDropdownInputComponent","i18.NumberSliderInputComponent","i19.ArrayStringChipsInputComponent","i20.ArrayStringAutocompleteChipsComponent","i21.DateInputComponent","i22.DateRangeInputComponent","i23.DateTimeInputComponent","i24.ArrayDateInputComponent","i25.ArrayDateTimeInputComponent","i26.ArrayDateRangeInputComponent","i27.FileImageInputComponent","i28.FileDefaultInputComponent","i29.CustomInputComponent","i3.NgxMatEntityInputComponent"],"mappings":"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"}
|