ngx-material-entity 0.1.1 → 0.1.2

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.
Files changed (105) hide show
  1. package/CONTRIBUTING.md +7 -1
  2. package/README.md +3 -2
  3. package/classes/entity-model.class.d.ts +1 -1
  4. package/classes/entity-service.class.d.ts +27 -17
  5. package/classes/entity-utilities.class.d.ts +62 -45
  6. package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +24 -0
  7. package/components/confirm-dialog/confirm-dialog-data.d.ts +14 -8
  8. package/components/confirm-dialog/confirm-dialog.component.d.ts +4 -5
  9. package/components/get-validation-error-message.function.d.ts +3 -2
  10. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.builder.d.ts +17 -0
  11. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.d.ts +17 -0
  12. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.d.ts +5 -18
  13. package/components/input/array-table/array-table.component.d.ts +3 -3
  14. package/components/input/input.component.d.ts +18 -21
  15. package/components/input/internal-input/internal-input.component.d.ts +14 -17
  16. package/components/table/create-dialog/create-dialog-data.builder.d.ts +20 -0
  17. package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +16 -0
  18. package/components/table/create-dialog/create-entity-dialog-data.d.ts +2 -2
  19. package/components/table/create-dialog/create-entity-dialog.component.d.ts +4 -2
  20. package/components/table/edit-dialog/edit-dialog-data.builder.d.ts +27 -0
  21. package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +5 -5
  22. package/components/table/edit-dialog/edit-entity-dialog.builder.d.ts +17 -0
  23. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +4 -2
  24. package/components/table/table-data.builder.d.ts +40 -0
  25. package/components/table/table-data.d.ts +26 -22
  26. package/components/table/table.component.d.ts +6 -5
  27. package/decorators/array/array-decorator-internal.data.d.ts +34 -0
  28. package/decorators/{array.decorator.d.ts → array/array-decorator.data.d.ts} +32 -37
  29. package/decorators/array/array.decorator.d.ts +10 -0
  30. package/decorators/base/base-property.decorator.d.ts +7 -6
  31. package/decorators/base/decorator-types.enum.d.ts +7 -7
  32. package/decorators/base/property-decorator-internal.data.d.ts +11 -0
  33. package/decorators/base/{property-decorator-config.interface.d.ts → property-decorator.data.d.ts} +11 -12
  34. package/decorators/boolean/boolean-decorator-internal.data.d.ts +16 -0
  35. package/decorators/boolean/boolean-decorator.data.d.ts +28 -0
  36. package/decorators/boolean/boolean.decorator.d.ts +8 -0
  37. package/decorators/number/number-decorator-internal.data.d.ts +16 -0
  38. package/decorators/number/number-decorator.data.d.ts +32 -0
  39. package/decorators/number/number.decorator.d.ts +8 -0
  40. package/decorators/object/object-decorator-internal.data.d.ts +8 -0
  41. package/decorators/object/object-decorator.data.d.ts +22 -0
  42. package/decorators/object/object.decorator.d.ts +9 -0
  43. package/decorators/string/string-decorator-internal.data.d.ts +31 -0
  44. package/decorators/string/string-decorator.data.d.ts +67 -0
  45. package/decorators/string/string.decorator.d.ts +8 -0
  46. package/esm2020/classes/entity-model.class.mjs +2 -2
  47. package/esm2020/classes/entity-service.class.mjs +20 -14
  48. package/esm2020/classes/entity-utilities.class.mjs +108 -75
  49. package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +77 -0
  50. package/esm2020/components/confirm-dialog/confirm-dialog-data.mjs +1 -1
  51. package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +7 -22
  52. package/esm2020/components/get-validation-error-message.function.mjs +4 -3
  53. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.builder.mjs +33 -0
  54. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog-data.mjs +2 -0
  55. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.mjs +7 -5
  56. package/esm2020/components/input/array-table/array-table.component.mjs +14 -11
  57. package/esm2020/components/input/input.component.mjs +3 -6
  58. package/esm2020/components/input/internal-input/internal-input.component.mjs +1 -4
  59. package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +54 -0
  60. package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +18 -0
  61. package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
  62. package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +14 -21
  63. package/esm2020/components/table/edit-dialog/edit-dialog-data.builder.mjs +81 -0
  64. package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +1 -1
  65. package/esm2020/components/table/edit-dialog/edit-entity-dialog.builder.mjs +19 -0
  66. package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +21 -36
  67. package/esm2020/components/table/table-data.builder.mjs +89 -0
  68. package/esm2020/components/table/table-data.mjs +1 -1
  69. package/esm2020/components/table/table.component.mjs +41 -80
  70. package/esm2020/decorators/array/array-decorator-internal.data.mjs +40 -0
  71. package/esm2020/decorators/array/array-decorator.data.mjs +7 -0
  72. package/esm2020/decorators/array/array.decorator.mjs +24 -0
  73. package/esm2020/decorators/base/base-property.decorator.mjs +6 -5
  74. package/esm2020/decorators/base/decorator-types.enum.mjs +1 -1
  75. package/esm2020/decorators/base/property-decorator-internal.data.mjs +15 -0
  76. package/esm2020/decorators/base/property-decorator.data.mjs +6 -0
  77. package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +22 -0
  78. package/esm2020/decorators/boolean/boolean-decorator.data.mjs +7 -0
  79. package/esm2020/decorators/boolean/boolean.decorator.mjs +21 -0
  80. package/esm2020/decorators/number/number-decorator-internal.data.mjs +17 -0
  81. package/esm2020/decorators/number/number-decorator.data.mjs +7 -0
  82. package/esm2020/decorators/number/number.decorator.mjs +18 -0
  83. package/esm2020/decorators/object/object-decorator-internal.data.mjs +9 -0
  84. package/esm2020/decorators/object/object-decorator.data.mjs +7 -0
  85. package/esm2020/decorators/object/object.decorator.mjs +13 -0
  86. package/esm2020/decorators/string/string-decorator-internal.data.mjs +36 -0
  87. package/esm2020/decorators/string/string-decorator.data.mjs +7 -0
  88. package/esm2020/decorators/string/string.decorator.mjs +24 -0
  89. package/esm2020/public-api.mjs +15 -10
  90. package/fesm2015/ngx-material-entity.mjs +1019 -683
  91. package/fesm2015/ngx-material-entity.mjs.map +1 -1
  92. package/fesm2020/ngx-material-entity.mjs +1005 -684
  93. package/fesm2020/ngx-material-entity.mjs.map +1 -1
  94. package/package.json +1 -1
  95. package/public-api.d.ts +16 -7
  96. package/decorators/boolean.decorator.d.ts +0 -42
  97. package/decorators/number.decorator.d.ts +0 -40
  98. package/decorators/object.decorator.d.ts +0 -27
  99. package/decorators/string.decorator.d.ts +0 -76
  100. package/esm2020/decorators/array.decorator.mjs +0 -70
  101. package/esm2020/decorators/base/property-decorator-config.interface.mjs +0 -31
  102. package/esm2020/decorators/boolean.decorator.mjs +0 -44
  103. package/esm2020/decorators/number.decorator.mjs +0 -36
  104. package/esm2020/decorators/object.decorator.mjs +0 -23
  105. package/esm2020/decorators/string.decorator.mjs +0 -61
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-material-entity.mjs","sources":["../../../projects/ngx-material-entity/src/decorators/base/property-decorator-config.interface.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/string.decorator.ts","../../../projects/ngx-material-entity/src/classes/entity-model.class.ts","../../../projects/ngx-material-entity/src/classes/entity-utilities.class.ts","../../../projects/ngx-material-entity/src/classes/entity-service.class.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/decorators/array.decorator.ts","../../../projects/ngx-material-entity/src/components/input/internal-input/internal-input.component.ts","../../../projects/ngx-material-entity/src/components/input/internal-input/internal-input.component.html","../../../projects/ngx-material-entity/src/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.ts","../../../projects/ngx-material-entity/src/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.html","../../../projects/ngx-material-entity/src/components/input/array-table/array-table.component.ts","../../../projects/ngx-material-entity/src/components/input/array-table/array-table.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/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-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.component.ts","../../../projects/ngx-material-entity/src/components/table/table.component.html","../../../projects/ngx-material-entity/src/components/table/table.module.ts","../../../projects/ngx-material-entity/src/components/input/internal-input/internal-input.module.ts","../../../projects/ngx-material-entity/src/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.ts","../../../projects/ngx-material-entity/src/components/input/array-table/array-table.module.ts","../../../projects/ngx-material-entity/src/components/input/input.module.ts","../../../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/decorators/boolean.decorator.ts","../../../projects/ngx-material-entity/src/decorators/number.decorator.ts","../../../projects/ngx-material-entity/src/decorators/object.decorator.ts","../../../projects/ngx-material-entity/src/public-api.ts","../../../projects/ngx-material-entity/src/ngx-material-entity.ts"],"sourcesContent":["type cols = 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 * @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 * @default true\n */\n required?: boolean;\n /**\n * Whether or not the property gets omitted when creating new Entities.\n * @default false\n */\n omitForCreate?: boolean;\n /**\n * Whether or not the property gets omitted when updating Entities.\n * @default false\n */\n omitForUpdate?: boolean;\n /**\n * Defines the width of the input property when used inside the default create or edit dialog.\n * Has 3 bootstrap values for different breakpoints for simple responsive design.\n * @var firstValue: col-lg-{{firstValue}}\n * @var secondValue: col-md-{{secondValue}}\n * @var thirdValue: col-sm-{{thirdValue}}\n */\n defaultWidths?: [cols, cols, cols];\n /**\n * Specifies order of the input property when used inside the default create or edit dialog.\n * Ordering is ascending\n * @default -1 (sets this property at the end)\n */\n order?: number;\n\n /**\n * Defines, Whether or not there should be a line break after this input.\n * Is used inside the default create and edit dialogs.\n */\n // lineBreakAfter?: boolean;\n\n constructor(\n displayName: string,\n display: boolean = true,\n required: boolean = true,\n omitForCreate: boolean = false,\n omitForUpdate: boolean = false,\n defaultWidths: [cols, cols, cols] = [6, 6, 12],\n order?: number\n // lineBreakAfter: boolean = false\n ) {\n this.displayName = displayName;\n this.display = display;\n this.required = required;\n this.omitForCreate = omitForCreate;\n this.omitForUpdate = omitForUpdate;\n this.defaultWidths = defaultWidths;\n\n if (order) {\n if (order < 0) {\n throw new Error('order must be at least 0');\n }\n\n this.order = order;\n }\n else {\n this.order = -1;\n }\n // this.lineBreakAfter = lineBreakAfter;\n }\n}","import { DecoratorTypes } from './decorator-types.enum';\nimport { PropertyDecoratorConfig } from './property-decorator-config.interface';\n\n/**\n * The base decorator for setting metadata on properties\n * @param metadata The metadata to define\n * @param type The type of metadata\n * @returns The function that sets the metadata\n */\nexport function baseProperty(metadata: PropertyDecoratorConfig, type: DecoratorTypes) {\n return function (target: object, propertyKey: string) {\n Reflect.defineMetadata('metadata', metadata, target, propertyKey);\n Reflect.defineMetadata('type', type, target, propertyKey);\n };\n}","import { StringChipsArrayDecoratorConfig, EntityArrayDecoratorConfig, AutocompleteStringChipsArrayDecoratorConfig } from '../array.decorator';\nimport { Entity } from '../../classes/entity-model.class';\nimport { CheckboxBooleanDecoratorConfig, DropdownBooleanDecoratorConfig } from '../boolean.decorator';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig } from '../number.decorator';\nimport { DefaultObjectDecoratorConfig } from '../object.decorator';\nimport { DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, AutocompleteStringDecoratorConfig, TextboxStringDecoratorConfig } from '../string.decorator';\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 NUMBER = 'number',\n NUMBER_DROPDOWN = 'numberDropdown',\n BOOLEAN_CHECKBOX = 'boolean',\n BOOLEAN_TOGGLE = 'booleanToggle',\n BOOLEAN_DROPDOWN = 'booleanDropdown',\n OBJECT = 'object',\n ARRAY = 'array',\n ARRAY_STRING_CHIPS = 'arrayStringChips',\n ARRAY_STRING_AUTOCOMPLETE_CHIPS = 'arrayStringAutocompleteChips'\n}\n\n/**\n * Gives the metadata-config Type based ont the DecoratorTypes enum\n */\nexport type DecoratorType<T> =\n T extends DecoratorTypes.STRING ? DefaultStringDecoratorConfig\n : T extends DecoratorTypes.STRING_TEXTBOX ? TextboxStringDecoratorConfig\n : T extends DecoratorTypes.STRING_DROPDOWN ? DropdownStringDecoratorConfig\n : T extends DecoratorTypes.STRING_AUTOCOMPLETE ? AutocompleteStringDecoratorConfig\n : T extends DecoratorTypes.NUMBER ? DefaultNumberDecoratorConfig\n : T extends DecoratorTypes.NUMBER_DROPDOWN ? DropdownNumberDecoratorConfig\n : T extends DecoratorTypes.BOOLEAN_CHECKBOX ? CheckboxBooleanDecoratorConfig\n : T extends DecoratorTypes.BOOLEAN_TOGGLE ? CheckboxBooleanDecoratorConfig\n : T extends DecoratorTypes.BOOLEAN_DROPDOWN ? DropdownBooleanDecoratorConfig\n : T extends DecoratorTypes.OBJECT ? DefaultObjectDecoratorConfig\n : T extends DecoratorTypes.ARRAY ? EntityArrayDecoratorConfig<Entity>\n : T extends DecoratorTypes.ARRAY_STRING_CHIPS ? StringChipsArrayDecoratorConfig\n : T extends DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS ? AutocompleteStringChipsArrayDecoratorConfig\n : never;","import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';\nimport { baseProperty } from './base/base-property.decorator';\nimport { DecoratorTypes } from './base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting string propery metadata\n * @param metadata The metadata of the string property\n */\nexport function string(\n metadata: DropdownStringDecoratorConfig | AutocompleteStringDecoratorConfig\n | DefaultStringDecoratorConfig | TextboxStringDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(new DropdownStringDecoratorConfig(metadata), DecoratorTypes.STRING_DROPDOWN);\n }\n else if (metadata.displayStyle === 'autocomplete') {\n return baseProperty(new AutocompleteStringDecoratorConfig(metadata), DecoratorTypes.STRING_AUTOCOMPLETE);\n }\n else if (metadata.displayStyle === 'textbox') {\n return baseProperty(new TextboxStringDecoratorConfig(metadata), DecoratorTypes.STRING_TEXTBOX);\n }\n else {\n return baseProperty(new DefaultStringDecoratorConfig(metadata), DecoratorTypes.STRING);\n }\n}\n\n/**\n * Interface 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';\n}\n\nexport class DropdownStringDecoratorConfig extends StringDecoratorConfig {\n override displayStyle: 'dropdown';\n /**\n * The values of the dropdown, consisting of a name to display and the actual value\n * Can also receive a function to determine the values\n */\n dropdownValues: { displayName: string, value: string }[];\n\n constructor(metadata: DropdownStringDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.dropdownValues = metadata.dropdownValues;\n }\n}\n\nexport class DefaultStringDecoratorConfig extends StringDecoratorConfig {\n override displayStyle: 'line';\n /**\n * (optional) The minimum required length of the string\n */\n minLength?: number;\n /**\n * (optional) The maximum required length of the string\n */\n maxLength?: number;\n /**\n * (optional) A regex used for validation\n */\n regex?: RegExp;\n\n constructor(metadata: DefaultStringDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.minLength = metadata.minLength;\n this.maxLength = metadata.maxLength;\n this.regex = metadata.regex;\n }\n}\nexport class TextboxStringDecoratorConfig extends StringDecoratorConfig {\n override displayStyle: 'textbox';\n /**\n * (optional) The minimum required length of the string\n */\n minLength?: number;\n /**\n * (optional) The maximum required length of the string\n */\n maxLength?: number;\n\n constructor(metadata: TextboxStringDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.minLength = metadata.minLength;\n this.maxLength = metadata.maxLength;\n }\n}\n\nexport class AutocompleteStringDecoratorConfig extends StringDecoratorConfig {\n override displayStyle: 'autocomplete';\n /**\n * The autocomplete values\n */\n autocompleteValues: string[];\n /**\n * (optional) The minimum required length of the string\n */\n minLength?: number;\n /**\n * (optional) The maximum required length of the string\n */\n maxLength?: number;\n /**\n * (optional) A regex used for validation\n */\n regex?: RegExp;\n\n constructor(metadata: AutocompleteStringDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.autocompleteValues = metadata.autocompleteValues;\n this.minLength = metadata.minLength;\n this.maxLength = metadata.maxLength;\n this.regex = metadata.regex;\n }\n}","import { string } from '../decorators/string.decorator';\n\n/**\n * The base Entity class.\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 id!: string;\n}","import { isEqual } from 'lodash';\nimport { DecoratorType, DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from '../decorators/base/property-decorator-config.interface';\nimport { DefaultNumberDecoratorConfig } from '../decorators/number.decorator';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, TextboxStringDecoratorConfig } from '../decorators/string.decorator';\nimport { EntityArrayDecoratorConfig } from '../decorators/array.decorator';\nimport { Entity } from './entity-model.class';\n\n/**\n * Contains HelperMethods around handling Entities and their property-metadata\n */\nexport abstract class EntityUtilities {\n /**\n * Gets the properties to omit when updating the entity\n * @returns The properties which should be left out for updating a new Entity\n */\n static getOmitForUpdate<EntityType extends Entity>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key of Reflect.ownKeys(entity)) {\n const metadata = Reflect.getMetadata('metadata', entity, key) as PropertyDecoratorConfig;\n if (metadata.omitForUpdate) {\n res.push(key as keyof EntityType);\n }\n }\n return res;\n }\n\n /**\n * Gets the properties to omit when creating new entities\n * @returns The properties which should be left out for creating a new Entity\n */\n static getOmitForCreate<EntityType extends Entity>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key of Reflect.ownKeys(entity)) {\n const metadata = Reflect.getMetadata('metadata', entity, key) as PropertyDecoratorConfig;\n if (metadata.omitForCreate) {\n res.push(key as keyof EntityType);\n }\n }\n return res;\n }\n\n /**\n * Gets the metadata included in an property\n * @param entity The entity with the property to get the metadata from\n * @param propertyKey The property on the given Entity to get the metadata from\n * @param type For secure Typing, defines the returned PropertyConfig\n * @returns The metadata of the property\n */\n static getPropertyMetadata<EntityType extends Entity, T extends DecoratorTypes>(\n entity: EntityType,\n propertyKey: keyof EntityType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type: T\n ): DecoratorType<T> {\n try {\n const metadata = Reflect.getMetadata('metadata', entity, propertyKey as string) as DecoratorType<T>;\n if (!metadata) {\n throw new Error(\n `Could not find metadata for property ${String(propertyKey)}\n on the entity ${JSON.stringify(entity)}`\n );\n }\n return metadata ;\n }\n catch (error) {\n throw new Error(\n `Could not find metadata for property ${String(propertyKey)}\n on the entity ${JSON.stringify(entity)}`\n );\n }\n }\n\n /**\n * Gets the type of the property-metadata.\n * @param entity The entity with the property to get the type from\n * @param propertyKey The property on the given Entity to get the type from\n * @returns The type of the metadata\n */\n static getPropertyType<EntityType extends Entity>(\n entity: EntityType, propertyKey: keyof EntityType\n ): DecoratorTypes {\n try {\n const propertyType = Reflect.getMetadata('type', entity, propertyKey as string) as DecoratorTypes;\n if (!propertyType) {\n throw new Error(\n `Could not find type metadata for property ${String(propertyKey)}\n on the entity ${JSON.stringify(entity)}`\n );\n }\n return propertyType;\n }\n catch (error) {\n throw new Error(\n `Could not find type metadata for property ${String(propertyKey)}\n on the entity ${JSON.stringify(entity)}`\n );\n }\n }\n\n /**\n * Sets all property values based on a given entity data-object.\n * @param entity The data object to get the property values from.\n * @param target\n * the target object that needs to be constructed\n * (if called inside a Entity constructor its usually this)\n * @alias new\n * @alias build\n * @alias construct\n */\n static new<EntityType extends Entity>(target: EntityType, entity?: EntityType): void {\n if (entity) {\n for (const key in entity) {\n Reflect.set(target, key, Reflect.get(entity, key));\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static construct = this.new;\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static build = this.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 * @param entity The entity to validate.\n * @param omit Whether to check for creatiung or editing validity\n * @returns Whether or not the entity is valid.\n */\n static isEntityValid<EntityType extends Entity>(entity: EntityType, omit: 'create' | 'edit'): boolean {\n for (const key in entity) {\n if (!this.isPropertyValid(entity, key, omit)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Checks if a single property value is valid\n * @param entity The entity where the property is from\n * @param key The name of the property\n * @returns Whether or not the property value is valid\n */\n private static isPropertyValid<EntityType extends Entity>(entity: EntityType, key: keyof EntityType, omit: 'create' | 'edit'): boolean {\n const type = this.getPropertyType(entity, key);\n const metadata: PropertyDecoratorConfig = this.getPropertyMetadata(entity, key, type);\n const metadataDefaultString = metadata as DefaultStringDecoratorConfig;\n const metadataTextboxString = metadata as TextboxStringDecoratorConfig;\n const metadataAutocompleteString = metadata as AutocompleteStringDecoratorConfig;\n const metadataDefaultNumber = metadata as DefaultNumberDecoratorConfig;\n const objectProperty = entity[key] as unknown as EntityType;\n const metadataEntityArray = metadata as EntityArrayDecoratorConfig<Entity>;\n const arrayItems = entity[key] as unknown as [];\n\n if (metadata.omitForCreate && omit === 'create') {\n return true;\n }\n if (metadata.omitForUpdate && omit === 'edit') {\n return true;\n }\n if (metadata.required && !entity[key]) {\n return false;\n }\n switch (type) {\n case DecoratorTypes.STRING:\n if (\n metadataDefaultString.maxLength\n && (entity[key] as unknown as string).length > metadataDefaultString.maxLength\n ) {\n return false;\n }\n if (\n metadataDefaultString.minLength\n && (entity[key] as unknown as string).length < metadataDefaultString.minLength\n ) {\n return false;\n }\n if (\n metadataDefaultString.regex\n && !(entity[key] as unknown as string).match(metadataDefaultString.regex)\n ) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n if (\n metadataAutocompleteString.maxLength\n && (entity[key] as unknown as string).length > metadataAutocompleteString.maxLength\n ) {\n return false;\n }\n if (\n metadataAutocompleteString.minLength\n && (entity[key] as unknown as string).length < metadataAutocompleteString.minLength\n ) {\n return false;\n }\n if (\n metadataAutocompleteString.regex\n && (entity[key] as unknown as string).match(metadataAutocompleteString.regex)\n ) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_TEXTBOX:\n if (\n metadataTextboxString.maxLength\n && (entity[key] as unknown as string).length > metadataTextboxString.maxLength\n ) {\n return false;\n }\n if (\n metadataTextboxString.minLength\n && (entity[key] as unknown as string).length < metadataTextboxString.minLength\n ) {\n return false;\n }\n break;\n case DecoratorTypes.NUMBER:\n if (metadataDefaultNumber.max && (entity[key] as unknown as number) > metadataDefaultNumber.max) {\n return false;\n }\n if (metadataDefaultNumber.min && (entity[key] as unknown as number) > metadataDefaultNumber.min) {\n return false;\n }\n break;\n case DecoratorTypes.OBJECT:\n for (const parameterKey in objectProperty) {\n if (!this.isPropertyValid(objectProperty, 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:\n if (metadataEntityArray.required && !arrayItems.length) {\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 /**\n * Checks if an entity is \"dirty\" (if its values have changed)\n * @param entity The entity after all changes\n * @param entityPriorChanges The entity before the changes\n * @returns Whether or not the entity is dirty\n */\n static dirty(entity: Entity, entityPriorChanges: Entity): boolean {\n if (!entityPriorChanges) {\n return false;\n }\n else {\n const diff = this.difference(entity, entityPriorChanges);\n if (JSON.stringify(diff) === '{}') {\n return false;\n }\n else {\n return true;\n }\n }\n }\n\n /**\n * Compares two Entities and returns their difference in an object\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 difference<EntityType extends Entity>(\n entity: EntityType,\n entityPriorChanges: EntityType\n ): Partial<EntityType> {\n const res: Partial<EntityType> = {};\n for (const key in entity) {\n if (!isEqual(entity[key], entityPriorChanges[key])) {\n res[key] = entity[key];\n }\n }\n return res;\n }\n\n /**\n * compare function for sorting entity keys by their order value\n * @param a first key of entity\n * @param b second key of entity\n * @param entity current entity (used to get metadata of entity keys)\n */\n static compareOrder<EntityType extends Entity>(a: keyof EntityType, b: keyof EntityType, entity: EntityType): number {\n const metadataA = EntityUtilities.getPropertyMetadata(entity, a, EntityUtilities.getPropertyType(entity, a));\n const metadataB = EntityUtilities.getPropertyMetadata(entity, b, EntityUtilities.getPropertyType(entity, b));\n\n if (metadataA.order === -1) {\n return 1;\n }\n else if (metadataB.order === -1) {\n return 0;\n }\n\n return ((metadataA.order as number) - (metadataB.order as number));\n }\n\n /**\n * gets the bootstrap column values for \"lg\", \"md\", \"sm\"\n * @param entity entity to get the bootstrap column values of the key\n * @param key key of the property to get bootstrap column values from\n * @param type defines for which screensize the column values should be returned\n * @returns bootstrap column value\n */\n static getWidth<EntityType extends Entity>(entity: EntityType, key: keyof EntityType, type: 'lg' | 'md' | 'sm'): number {\n const propertyType = EntityUtilities.getPropertyType(entity, key);\n const metadata = EntityUtilities.getPropertyMetadata(entity, key, propertyType);\n if (metadata.defaultWidths) {\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 default:\n throw new Error('Something went wrong getting the width');\n }\n }\n else {\n throw new Error('Something went wrong getting the width');\n }\n }\n\n /**\n * Resets all changes on an entity\n * @param entity The entity to reset\n * @param entityPriorChanges The entity before any changes\n */\n static resetChangesOnEntity<EntityType extends Entity>(entity: EntityType, entityPriorChanges: EntityType): void {\n for (const key in entityPriorChanges) {\n Reflect.set(entity, key, Reflect.get(entityPriorChanges, key));\n }\n }\n}","import { Entity } from './entity-model.class';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { isNil, omit, omitBy } from 'lodash';\nimport { EntityUtilities } from './entity-utilities.class';\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 Entity> {\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 * @create Sends a POST-Request to baseUrl\n * @read Sends a GET-Request to baseUrl\n * @update Sends a PATCH-Request to baseUrl/{id}\n * @delete Sends a DEL-Request to baseUrl/{id}\n */\n abstract readonly baseUrl: string;\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 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 * @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 = omit(entity, EntityUtilities.getOmitForCreate(entity));\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 entites array\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 * @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 reqBody = omit(\n EntityUtilities.difference(entity, entityPriorChanges),\n EntityUtilities.getOmitForUpdate(entity)\n );\n const updatedEntity = await firstValueFrom(\n this.http.patch<EntityType>(\n `${this.baseUrl}/${entityPriorChanges.id}`,\n omitBy(reqBody, isNil)\n )\n );\n this.entities[this.entities.findIndex((e) => e.id === entityPriorChanges.id)] = updatedEntity;\n this.entitiesSubject.next(this.entities);\n }\n\n /**\n * Method to delete a specific Entity\n * @param id The id of the element to delete\n */\n async delete(id: string): Promise<void> {\n await firstValueFrom(this.http.delete<void>(`${this.baseUrl}/${id}`));\n this.entities.splice(\n this.entities.findIndex((e) => e.id === id), 1\n );\n this.entitiesSubject.next(this.entities);\n }\n}","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ConfirmDialogData } from './confirm-dialog-data';\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 * Used for the checkbox to confirm the action\n */\n confirm = false;\n\n constructor(\n private readonly dialogRef: MatDialogRef<NgxMatEntityConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA)\n readonly data: ConfirmDialogData\n ) {}\n\n ngOnInit(): void {\n if (this.data.requireConfirmation && !this.data.confirmationText) {\n throw new Error(`\n Missing required Input \"confirmationText\".\n You can only omit this if you dont have \"requireConfirmation\" set`\n );\n }\n if (!this.data.requireConfirmation && this.data.confirmationText) {\n throw new Error(\n 'The \"confirmationText\" will never be shown because \"requireConfirmation\" is not set to true'\n );\n }\n if (this.data.requireConfirmation !== true && this.data.requireConfirmation !== false) {\n this.data.requireConfirmation = false;\n }\n if (this.data.type === 'info-only' && this.data.cancelButtonLabel) {\n throw new Error('The \"cancelButtonLabel\" will never be shown because \"type\" is set to \"info-only\"');\n }\n this.dialogRef.disableClose = true;\n }\n\n confirmAction(): void {\n this.dialogRef.close(1);\n }\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 ? data.confirmButtonLabel : 'Delete'}}\n </button>\n <button *ngIf=\"data.type !== 'delete'\" mat-raised-button (click)=\"confirmAction()\" [disabled]=\"data.requireConfirmation && !confirm\" class=\"confirm-button\">\n {{data.confirmButtonLabel ? data.confirmButtonLabel : data.type === 'info-only' ? 'Ok' : 'Confirm'}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.cancelButtonLabel ? data.cancelButtonLabel : 'Cancel'}}\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 * @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 else {\n return 'invalid input';\n }\n}","import { Entity } from '../classes/entity-model.class';\nimport { CreateDialogData } from '../components/table/table-data';\nimport { baseProperty } from './base/base-property.decorator';\nimport { DecoratorTypes } from './base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from './base/property-decorator-config.interface';\n\n/**\n * Decorator for setting and getting array propery metadata\n * @param metadata The metadata of the array property\n */\nexport function array<EntityType extends Entity>(\n metadata: EntityArrayDecoratorConfig<EntityType> | StringChipsArrayDecoratorConfig | AutocompleteStringChipsArrayDecoratorConfig\n): (target: object, propertyKey: string) => void {\n switch (metadata.itemType) {\n case DecoratorTypes.OBJECT:\n return baseProperty(new EntityArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY);\n case DecoratorTypes.STRING:\n return baseProperty(new StringChipsArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY_STRING_CHIPS);\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n return baseProperty(new AutocompleteStringChipsArrayDecoratorConfig(metadata), DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS);\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\nexport interface ArrayTableDisplayColumn<EntityType extends Entity> {\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 */\nabstract class ArrayDecoratorConfig extends PropertyDecoratorConfig {\n /**\n * How to display the string\n */\n displayStyle!: 'table' | 'chips';\n\n /**\n * The type of the items inside the array\n */\n itemType!: DecoratorTypes;\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 Entities\n */\nexport class EntityArrayDecoratorConfig<EntityType extends Entity> extends ArrayDecoratorConfig {\n override itemType: DecoratorTypes.OBJECT;\n override displayStyle: 'table';\n\n /**\n * The EntityClass used for generating the create inputs\n */\n EntityClass!: new (entity?: EntityType) => 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 * @default true\n */\n createInline?: boolean\n\n constructor(metadata: EntityArrayDecoratorConfig<EntityType>) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.itemType = metadata.itemType;\n this.displayStyle = metadata.displayStyle;\n this.EntityClass = metadata.EntityClass;\n this.createDialogData = metadata.createDialogData;\n this.missingErrorMessage = metadata.missingErrorMessage;\n this.createInline = metadata.createInline;\n this.displayColumns = metadata.displayColumns\n }\n}\n\n/**\n * Definition for an array of strings displayed as a chips list\n */\nexport class StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {\n override itemType: DecoratorTypes.STRING;\n override displayStyle: 'chips';\n\n /**\n * The html inside the delete-button.\n * Please note that custom tags such as <mat-icon></mat-icon>\n * need to be defined as known elements, otherwise the sanitizer will remove them.\n * You can however work around this by using `<span class=\"material-icons\"></span>`\n * @default <mat-icon>cancel</mat-icon>\n */\n deleteHtml?: string\n /**\n * (optional) The minimum required length of the string\n */\n minLength?: number;\n /**\n * (optional) The maximum required length of the string\n */\n maxLength?: number;\n /**\n * (optional) A regex used for validation\n */\n regex?: RegExp;\n\n constructor(metadata: StringChipsArrayDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.itemType = metadata.itemType;\n this.displayStyle = metadata.displayStyle;\n this.deleteHtml = metadata.deleteHtml;\n this.minLength = metadata.minLength;\n this.maxLength = metadata.maxLength;\n this.regex = metadata.regex;\n }\n}\n\n/**\n * Definition for an array of autocomplete strings displayed as a chips list\n */\nexport class AutocompleteStringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {\n override itemType: DecoratorTypes.STRING_AUTOCOMPLETE;\n override displayStyle: 'chips';\n\n /**\n * The html inside the delete-button.\n * Please note that custom tags such as <mat-icon></mat-icon>\n * need to be defined as known elements, otherwise the sanitizer will remove them.\n * You can however work around this by using `<span class=\"material-icons\"></span>`\n * @default <mat-icon>cancel</mat-icon>\n */\n deleteHtml?: string;\n /**\n * The autocomplete values\n */\n autocompleteValues: string[];\n /**\n * (optional) The minimum required length of the string\n */\n minLength?: number;\n /**\n * (optional) The maximum required length of the string\n */\n maxLength?: number;\n /**\n * (optional) A regex used for validation\n */\n regex?: RegExp;\n\n constructor(metadata: AutocompleteStringChipsArrayDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.itemType = metadata.itemType;\n this.displayStyle = metadata.displayStyle;\n this.deleteHtml = metadata.deleteHtml;\n this.autocompleteValues = metadata.autocompleteValues;\n this.minLength = metadata.minLength;\n this.maxLength = metadata.maxLength;\n this.regex = metadata.regex;\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from '../../../decorators/base/property-decorator-config.interface';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig } from '../../../decorators/number.decorator';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, TextboxStringDecoratorConfig } from '../../../decorators/string.decorator';\nimport { DropdownBooleanDecoratorConfig } from '../../../decorators/boolean.decorator';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { DefaultObjectDecoratorConfig } from '../../../decorators/object.decorator';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { NgModel } from '@angular/forms';\n\n@Component({\n selector: 'ngx-mat-entity-internal-input',\n templateUrl: './internal-input.component.html',\n styleUrls: ['./internal-input.component.scss']\n})\nexport class NgxMatEntityInternalInputComponent<EntityType extends Entity> implements OnInit {\n /**\n * The entity on which the property exists. Used in conjuction with the \"propertyKey\"\n * to determine the property for which the input should be generated.\n */\n @Input()\n entity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjuction with the \"entity\".\n */\n @Input()\n propertyKey!: keyof EntityType;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\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 @Input()\n hideOmitForEdit?: boolean;\n\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n type!: DecoratorTypes;\n\n metadata!: PropertyDecoratorConfig;\n\n metadataDefaultString!: DefaultStringDecoratorConfig;\n metadataTextboxString!: TextboxStringDecoratorConfig;\n metadataAutocompleteString!: AutocompleteStringDecoratorConfig;\n metadataDropdownString!: DropdownStringDecoratorConfig;\n\n metadataDropdownBoolean!: DropdownBooleanDecoratorConfig;\n\n metadataDefaultNumber!: DefaultNumberDecoratorConfig;\n metadataDropdownNumber!: DropdownNumberDecoratorConfig;\n\n metadataDefaultObject!: DefaultObjectDecoratorConfig;\n objectProperty!: Entity;\n\n readonly DecoratorTypes = DecoratorTypes;\n\n getWidth = EntityUtilities.getWidth;\n\n /**\n * Helper method needed to recursively generate property input components (used eg. with the object)\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 if (!this.propertyKey) {\n throw new Error('Missing required Input data \"propertyKey\"');\n }\n this.type = EntityUtilities.getPropertyType(this.entity, this.propertyKey);\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.propertyKey, this.type);\n\n this.metadataDefaultString = this.metadata as DefaultStringDecoratorConfig;\n this.metadataTextboxString = this.metadata as TextboxStringDecoratorConfig;\n this.metadataAutocompleteString = this.metadata as AutocompleteStringDecoratorConfig;\n this.metadataDropdownString = this.metadata as DropdownStringDecoratorConfig;\n\n this.metadataDropdownBoolean = this.metadata as DropdownBooleanDecoratorConfig;\n\n this.metadataDefaultNumber = this.metadata as DefaultNumberDecoratorConfig;\n this.metadataDropdownNumber = this.metadata as DropdownNumberDecoratorConfig;\n\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfig;\n this.objectProperty = this.entity[this.propertyKey] as unknown as Entity;\n }\n\n getObjectProperties(): (keyof Entity)[] {\n const res: (keyof Entity)[] = [];\n for (const property in this.objectProperty) {\n const metadata = EntityUtilities.getPropertyMetadata(\n this.objectProperty,\n property as keyof Entity,\n EntityUtilities.getPropertyType(this.objectProperty, property as keyof Entity)\n );\n if (\n !(this.hideOmitForCreate && metadata.omitForCreate)\n && !(this.hideOmitForEdit && metadata.omitForUpdate)\n ) {\n res.push(property as keyof Entity);\n }\n }\n return res.sort((a, b) => EntityUtilities.compareOrder(a, b, this.objectProperty));\n }\n}","<div [ngSwitch]=\"type\" *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [pattern]=\"metadataDefaultString.regex ? metadataDefaultString.regex : '[\\\\s\\\\S]*'\"\n [minlength]=\"metadataDefaultString.minLength ? metadataDefaultString.minLength : null\"\n [maxlength]=\"metadataDefaultString.maxLength ? metadataDefaultString.maxLength : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [minlength]=\"metadataTextboxString.minLength ? metadataTextboxString.minLength : null\"\n [maxlength]=\"metadataTextboxString.maxLength ? metadataTextboxString.maxLength : null\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [matAutocomplete]=\"auto\"\n [minlength]=\"metadataAutocompleteString.minLength ? metadataAutocompleteString.minLength : null\"\n [maxlength]=\"metadataAutocompleteString.maxLength ? metadataAutocompleteString.maxLength : null\"\n [pattern]=\"metadataAutocompleteString.regex ? metadataAutocompleteString.regex : '[\\\\s\\\\S]*'\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let value of metadataAutocompleteString.autocompleteValues\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n <mat-option *ngFor=\"let value of metadataDropdownString.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <mat-form-field>\n <mat-checkbox [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n {{metadata.displayName}}\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n {{metadata.displayName}}\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadataDropdownBoolean.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadataDropdownBoolean.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n type=\"number\"\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [min]=\"metadataDefaultNumber.min ? metadataDefaultNumber.min : null\"\n [max]=\"metadataDefaultNumber.max ? metadataDefaultNumber.max : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n <mat-option *ngFor=\"let value of metadataDropdownNumber.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Object------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.OBJECT\">\n <b>{{metadataDefaultObject.displayName}}</b>\n <!-- iterates over the object properties -->\n <div class=\"row\">\n <!--\n displays another ngx-material-entity with the:\n object as the entity,\n the current key in the loop received by the keyvalue direction as the propertyKey\n and the getValidationErrorMessage of the current component\n -->\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of getObjectProperties(); let i = index; trackBy: trackByFn\"\n [entity]=\"objectProperty\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n class=\"col-lg-{{getWidth(objectProperty, key, 'lg')}} col-md-{{getWidth(objectProperty, key, 'md')}} col-sm-{{getWidth(objectProperty, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </div>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}}is not known.</div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Entity } from '../../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../../classes/entity-utilities.class';\nimport { CreateDialogData } from '../../../table/table-data';\n\nexport interface AddArrayItemDialogData<EntityType extends Entity> {\n /**\n * An empty entity that is used as the data model.\n */\n entity: EntityType,\n /**\n * The info of the generic create-dialog.\n */\n createDialogData: CreateDialogData,\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n getValidationErrorMessage: (model: NgModel) => string\n}\n\n@Component({\n selector: 'ngx-mat-entity-add-array-item-dialog',\n templateUrl: './add-array-item-dialog.component.html',\n styleUrls: ['./add-array-item-dialog.component.scss']\n})\nexport class NgxMatEntityAddArrayItemDialogComponent<EntityType extends Entity> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityKeys!: (keyof EntityType)[];\n\n getWidth = EntityUtilities.getWidth;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: AddArrayItemDialogData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityAddArrayItemDialogComponent<EntityType>>\n ) { }\n\n ngOnInit(): void {\n this.dialogRef.disableClose = true;\n this.setEntityKeys();\n }\n\n private setEntityKeys(): void {\n this.entityKeys = Reflect.ownKeys(this.data.entity) as (keyof EntityType)[];\n const omitCreateKeys = EntityUtilities.getOmitForCreate(this.data.entity);\n this.entityKeys = this.entityKeys.filter((k) => !omitCreateKeys.includes(k))\n .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));\n }\n\n create(): void {\n this.dialogRef.close(1);\n }\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\" class=\"row\">\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"data.getValidationErrorMessage\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'create')\">\n {{data.createDialogData.createButtonLabel ? data.createDialogData.createButtonLabel : 'Add'}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.createDialogData.cancelButtonLabel ? data.createDialogData.cancelButtonLabel : 'Cancel'}}\n </button>\n</mat-dialog-actions>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { EntityArrayDecoratorConfig } from '../../../decorators/array.decorator';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { NgModel } from '@angular/forms';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatDialog } from '@angular/material/dialog';\nimport { cloneDeep } from 'lodash';\nimport { firstValueFrom } from 'rxjs';\nimport { AddArrayItemDialogData, NgxMatEntityAddArrayItemDialogComponent } from './add-array-item-dialog/add-array-item-dialog.component';\nimport { CreateDialogData } from '../../table/table-data';\n\n@Component({\n selector: 'ngx-mat-entity-array-table',\n templateUrl: './array-table.component.html',\n styleUrls: ['./array-table.component.scss']\n})\nexport class NgxMatEntityArrayTableComponent<EntityType extends Entity> implements OnInit {\n @Input()\n arrayItems!: EntityType[];\n\n @Input()\n metadata!: EntityArrayDecoratorConfig<EntityType>;\n\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n @Input()\n omit!: 'create' | 'edit';\n\n dataSource!: MatTableDataSource<EntityType>;\n\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n\n displayedColumns!: string[];\n\n arrayItem!: EntityType;\n\n private arrayItemPriorChanges!: EntityType;\n\n getWidth = EntityUtilities.getWidth;\n\n EntityUtilities = EntityUtilities;\n\n constructor(private readonly dialog: MatDialog) {}\n\n trackByFn(index: unknown): unknown {\n return index;\n }\n\n ngOnInit(): void {\n this.validateInput();\n const givenDisplayColumns = 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 = ['select'].concat(givenDisplayColumns);\n this.dataSource = new MatTableDataSource();\n this.dataSource.data = this.arrayItems;\n this.arrayItem = new this.metadata.EntityClass();\n this.arrayItemPriorChanges = cloneDeep(this.arrayItem);\n }\n private validateInput(): void {\n if (!this.metadata.createInline && !this.metadata.createDialogData) {\n throw new Error(\n `Missing required Input data \"createDialogData\".\n You can only omit this value when the creation is inline.`\n );\n }\n }\n\n add(): void {\n if (this.metadata.createInline) {\n this.arrayItems.push(cloneDeep(this.arrayItem));\n this.dataSource.data = this.arrayItems;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n }\n else {\n const dialogData: AddArrayItemDialogData<EntityType> = {\n entity: this.arrayItem,\n createDialogData: this.metadata.createDialogData as CreateDialogData,\n getValidationErrorMessage: this.getValidationErrorMessage\n }\n firstValueFrom(\n this.dialog.open(\n NgxMatEntityAddArrayItemDialogComponent,\n {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n }\n ).afterClosed()\n ).then((res: number) => {\n if (res === 1) {\n this.arrayItems.push(cloneDeep(this.arrayItem));\n this.dataSource.data = this.arrayItems;\n }\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n });\n }\n }\n remove(): void {\n this.selection.selected.forEach(s => {\n this.arrayItems.splice(this.arrayItems.indexOf(s), 1);\n });\n this.dataSource.data = this.arrayItems;\n this.selection.clear();\n }\n\n getObjectProperties(): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const property in this.arrayItem) {\n const metadata = EntityUtilities.getPropertyMetadata(\n this.arrayItem,\n property as keyof Entity,\n EntityUtilities.getPropertyType(this.arrayItem, property as keyof Entity)\n );\n if (!(metadata.omitForCreate)) {\n res.push(property as keyof Entity);\n }\n }\n return res.sort((a, b) => EntityUtilities.compareOrder(a, b, this.arrayItem));\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 isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n}","<div class=\"mat-elevation-z8\" style=\"border-radius: 5px;padding: 15px;margin-bottom: 15px;margin-top: 15px;\">\n\n <div style=\"padding-bottom: 10px\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div class=\"row\" *ngIf=\"metadata.createInline\">\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of getObjectProperties(); let i = index; trackBy: trackByFn\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n class=\"col-lg-{{getWidth(arrayItem, key, 'lg')}} col-md-{{getWidth(arrayItem, key, 'md')}} col-sm-{{getWidth(arrayItem, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </div>\n <div class=\"buttons\">\n <button mat-raised-button\n [disabled]=\"metadata.createInline && !EntityUtilities.isEntityValid(arrayItem, 'create')\"\n (click)=\"add()\">\n Add\n </button>\n <button mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n Remove\n </button>\n </div>\n\n <mat-table [dataSource]=\"dataSource\">\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 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 ? metadata.missingErrorMessage : 'Needs to have at least one value'}}\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { EntityUtilities } from '../../classes/entity-utilities.class';\nimport { Entity } from '../../classes/entity-model.class';\nimport { DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from '../../decorators/base/property-decorator-config.interface';\nimport { getValidationErrorMessage } from '../get-validation-error-message.function';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, TextboxStringDecoratorConfig } from '../../decorators/string.decorator';\nimport { DropdownBooleanDecoratorConfig } from '../../decorators/boolean.decorator';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig } from '../../decorators/number.decorator';\nimport { DefaultObjectDecoratorConfig } from '../../decorators/object.decorator';\nimport { AutocompleteStringChipsArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from '../../decorators/array.decorator';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { cloneDeep } from 'lodash';\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 Entity> implements OnInit {\n /**\n * The entity on which the property exists. Used in conjuction with the \"propertyKey\"\n * to determine the property for which the input should be generated.\n */\n @Input()\n entity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjuction with the \"entity\".\n */\n @Input()\n propertyKey!: keyof EntityType;\n\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\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 @Input()\n hideOmitForEdit?: boolean;\n\n type!: DecoratorTypes;\n\n metadata!: PropertyDecoratorConfig;\n\n metadataDefaultString!: DefaultStringDecoratorConfig;\n metadataTextboxString!: TextboxStringDecoratorConfig;\n metadataAutocompleteString!: AutocompleteStringDecoratorConfig;\n autocompleteStrings!: string[];\n filteredAutocompleteStrings!: string[];\n metadataDropdownString!: DropdownStringDecoratorConfig;\n\n metadataDropdownBoolean!: DropdownBooleanDecoratorConfig;\n\n metadataDefaultNumber!: DefaultNumberDecoratorConfig;\n metadataDropdownNumber!: DropdownNumberDecoratorConfig;\n\n metadataDefaultObject!: DefaultObjectDecoratorConfig;\n objectProperty!: Entity;\n\n metadataEntityArray!: EntityArrayDecoratorConfig<Entity>;\n entityArrayValues!: Entity[];\n metadataStringChipsArray!: StringChipsArrayDecoratorConfig;\n stringChipsArrayValues!: string[];\n chipsInput: string = '';\n\n metadataAutocompleteStringChipsArray!: AutocompleteStringChipsArrayDecoratorConfig;\n\n readonly DecoratorTypes = DecoratorTypes;\n\n getWidth = EntityUtilities.getWidth;\n\n constructor() {}\n\n /**\n * Helper method needed to recursively generate property input components (used eg. with the object)\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 if (!this.propertyKey) {\n throw new Error('Missing required Input data \"propertyKey\"');\n }\n this.type = EntityUtilities.getPropertyType(this.entity, this.propertyKey);\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.propertyKey, this.type);\n\n this.metadataDefaultString = this.metadata as DefaultStringDecoratorConfig;\n this.metadataTextboxString = this.metadata as TextboxStringDecoratorConfig;\n\n this.metadataAutocompleteString = this.metadata as AutocompleteStringDecoratorConfig;\n this.autocompleteStrings = this.metadataAutocompleteString.autocompleteValues;\n this.filteredAutocompleteStrings = cloneDeep(this.autocompleteStrings);\n\n this.metadataDropdownString = this.metadata as DropdownStringDecoratorConfig;\n\n this.metadataDropdownBoolean = this.metadata as DropdownBooleanDecoratorConfig;\n\n this.metadataDefaultNumber = this.metadata as DefaultNumberDecoratorConfig;\n this.metadataDropdownNumber = this.metadata as DropdownNumberDecoratorConfig;\n\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfig;\n this.objectProperty = this.entity[this.propertyKey] as unknown as Entity;\n\n this.metadataEntityArray = this.metadata as EntityArrayDecoratorConfig<Entity>;\n if (this.metadataEntityArray.EntityClass) {\n if (!this.entity[this.propertyKey]) {\n (this.entity[this.propertyKey] as unknown as Entity[]) = [];\n }\n this.entityArrayValues = this.entity[this.propertyKey] as unknown as Entity[];\n if (this.metadataEntityArray.createInline === undefined) {\n this.metadataEntityArray.createInline = true;\n }\n if (!this.metadataEntityArray.createInline && !this.metadataEntityArray.createDialogData) {\n this.metadataEntityArray.createDialogData = {\n title: 'Add'\n }\n }\n }\n\n this.metadataStringChipsArray = this.metadata as StringChipsArrayDecoratorConfig;\n if (\n this.metadataStringChipsArray.itemType\n && (this.entity[this.propertyKey] as unknown as string[])?.length\n ) {\n this.stringChipsArrayValues = (this.entity[this.propertyKey] as unknown as string[]);\n }\n\n this.metadataAutocompleteStringChipsArray = this.metadata as AutocompleteStringChipsArrayDecoratorConfig;\n\n if (!this.getValidationErrorMessage) {\n this.getValidationErrorMessage = getValidationErrorMessage;\n }\n }\n\n getObjectProperties(): (keyof Entity)[] {\n const res: (keyof Entity)[] = [];\n for (const property in this.objectProperty) {\n const metadata = EntityUtilities.getPropertyMetadata(\n this.objectProperty,\n property as keyof Entity,\n EntityUtilities.getPropertyType(this.objectProperty, property as keyof Entity)\n );\n if (\n !(this.hideOmitForCreate && metadata.omitForCreate)\n && !(this.hideOmitForEdit && metadata.omitForUpdate)\n ) {\n res.push(property as keyof Entity);\n }\n }\n return res.sort((a, b) => EntityUtilities.compareOrder(a, b, this.objectProperty));\n }\n\n addStringChipArrayValue(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.metadataStringChipsArray.minLength && value.length < this.metadataStringChipsArray.minLength) {\n return;\n }\n if (this.metadataStringChipsArray.maxLength && value.length > this.metadataStringChipsArray.maxLength) {\n return;\n }\n if (this.metadataStringChipsArray.regex && !value.match(this.metadataStringChipsArray.regex)) {\n return;\n }\n if (!this.stringChipsArrayValues) {\n if (!this.entity[this.propertyKey] as unknown as string[]) {\n (this.entity[this.propertyKey] as unknown as string[]) = [];\n }\n this.stringChipsArrayValues = this.entity[this.propertyKey] as unknown as string[];\n }\n this.stringChipsArrayValues.push(value);\n }\n event.chipInput!.clear();\n }\n\n removeStringChipArrayValue(value: string): void {\n this.stringChipsArrayValues.splice(this.stringChipsArrayValues.indexOf(value), 1);\n if (!this.stringChipsArrayValues.length) {\n (this.entity[this.propertyKey] as unknown) = undefined;\n this.stringChipsArrayValues = this.entity[this.propertyKey] as unknown as string[];\n }\n }\n\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement): void {\n const value = (event.option.viewValue || '').trim();\n if (this.metadataStringChipsArray.minLength && value.length < this.metadataStringChipsArray.minLength) {\n return;\n }\n if (this.metadataStringChipsArray.maxLength && value.length > this.metadataStringChipsArray.maxLength) {\n return;\n }\n if (this.metadataStringChipsArray.regex && !value.match(this.metadataStringChipsArray.regex)) {\n return;\n }\n if (!this.stringChipsArrayValues) {\n if (!this.entity[this.propertyKey] as unknown as string[]) {\n (this.entity[this.propertyKey] as unknown as string[]) = [];\n }\n this.stringChipsArrayValues = this.entity[this.propertyKey] as unknown as string[];\n }\n this.stringChipsArrayValues.push(value);\n chipsInput.value = '';\n }\n\n filterAutocompleteStrings(input: unknown): void {\n const filterValue = (input as string).toLowerCase();\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(filterValue));\n }\n}","<div [ngSwitch]=\"type\" *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required ? metadata.required : false\"\n [pattern]=\"metadataDefaultString.regex ? metadataDefaultString.regex : '[\\\\s\\\\S]*'\"\n [minlength]=\"metadataDefaultString.minLength ? metadataDefaultString.minLength : null\"\n [maxlength]=\"metadataDefaultString.maxLength ? metadataDefaultString.maxLength : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [required]=\"metadata.required ? metadata.required : false\"\n [minlength]=\"metadataTextboxString.minLength ? metadataTextboxString.minLength : null\"\n [maxlength]=\"metadataTextboxString.maxLength ? metadataTextboxString.maxLength : null\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [matAutocomplete]=\"auto\"\n (keyup)=\"filterAutocompleteStrings(entity[propertyKey])\"\n [required]=\"metadata.required ? metadata.required : false\"\n [minlength]=\"metadataAutocompleteString.minLength ? metadataAutocompleteString.minLength : null\"\n [maxlength]=\"metadataAutocompleteString.maxLength ? metadataAutocompleteString.maxLength : null\"\n [pattern]=\"metadataAutocompleteString.regex ? metadataAutocompleteString.regex : '[\\\\s\\\\S]*'\"\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>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required ? metadata.required : false\">\n <mat-option *ngFor=\"let value of metadataDropdownString.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <mat-form-field>\n <mat-checkbox [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required ? metadata.required : false\">\n {{metadata.displayName}}\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required ? metadata.required : false\">\n {{metadata.displayName}}\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required ? metadata.required : false\">\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadataDropdownBoolean.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadataDropdownBoolean.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n type=\"number\"\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required ? metadata.required : false\"\n [min]=\"metadataDefaultNumber.min ? metadataDefaultNumber.min : null\"\n [max]=\"metadataDefaultNumber.max ? metadataDefaultNumber.max : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required ? metadata.required : false\">\n <mat-option *ngFor=\"let value of metadataDropdownNumber.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Object------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.OBJECT\">\n <b>{{metadataDefaultObject.displayName}}</b>\n <!-- iterates over the object properties -->\n <div class=\"row\">\n <!--\n displays another ngx-material-entity with the:\n object as the entity,\n the current key in the loop received by the keyvalue direction as the propertyKey\n and the getValidationErrorMessage of the current component\n -->\n <ngx-mat-entity-input\n *ngFor=\"let key of getObjectProperties(); let i = index; trackBy: trackByFn\"\n [entity]=\"objectProperty\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n class=\"col-lg-{{getWidth(objectProperty, key, 'lg')}} col-md-{{getWidth(objectProperty, key, 'md')}} col-sm-{{getWidth(objectProperty, key, 'sm')}}\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY\">\n <ngx-mat-entity-array-table\n [arrayItems]=\"entityArrayValues\"\n [metadata]=\"metadataEntityArray\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [omit]=\"hideOmitForCreate ? 'create' : 'edit'\"\n >\n </ngx-mat-entity-array-table>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_CHIPS\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required ? metadata.required : false\"\n >\n <mat-chip *ngFor=\"let value of stringChipsArrayValues\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove *ngIf=\"metadataStringChipsArray.deleteHtml\" [innerHtml]=\"metadataStringChipsArray.deleteHtml\">\n </button>\n <button matChipRemove *ngIf=\"!metadataStringChipsArray.deleteHtml\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"propertyKey.toString()\" #chipsModel=\"ngModel\"\n [minlength]='metadataStringChipsArray.minLength ? metadataStringChipsArray.minLength : null'\n [maxlength]='metadataStringChipsArray.maxLength ? metadataStringChipsArray.maxLength : null'\n [pattern]=\"metadataStringChipsArray.regex ? metadataStringChipsArray.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>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required ? metadata.required : false\"\n >\n <mat-chip *ngFor=\"let value of stringChipsArrayValues\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove *ngIf=\"metadataStringChipsArray.deleteHtml\" [innerHtml]=\"metadataStringChipsArray.deleteHtml\">\n </button>\n <button matChipRemove *ngIf=\"!metadataStringChipsArray.deleteHtml\">\n <mat-icon>cancel</mat-icon>\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]=\"propertyKey.toString()\" #chipsModel=\"ngModel\"\n #chipsElement\n [minlength]='metadataStringChipsArray.minLength ? metadataStringChipsArray.minLength : null'\n [maxlength]='metadataStringChipsArray.maxLength ? metadataStringChipsArray.maxLength : null'\n [pattern]=\"metadataStringChipsArray.regex ? metadataStringChipsArray.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 filteredAutocompleteStrings\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}}is not known.</div>\n</div>","import { Component, Inject, Injector, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { EntityService } from '../../../classes/entity-service.class';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { CreateEntityDialogData } from './create-entity-dialog-data';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\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 Entity> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityKeys!: (keyof EntityType)[];\n\n entityService!: EntityService<EntityType>;\n\n getWidth = EntityUtilities.getWidth;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: 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.dialogRef.disableClose = true;\n this.setEntityKeys();\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n }\n\n private setEntityKeys(): void {\n this.entityKeys = Reflect.ownKeys(this.data.entity) as (keyof EntityType)[];\n const omitCreateKeys = EntityUtilities.getOmitForCreate(this.data.entity);\n this.entityKeys = this.entityKeys.filter((k) => !omitCreateKeys.includes(k))\n .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));\n }\n\n create(): void {\n if (this.data.createDialogData.createRequiresConfirmDialog === false) {\n return this.confirmCreate();\n }\n const dialogData: ConfirmDialogData = {\n // eslint-disable-next-line max-len\n text: this.data.createDialogData.confirmCreateDialogData?.text ? this.data.createDialogData.confirmCreateDialogData?.text : ['Do you really want to create this entity?'],\n type: 'default',\n // eslint-disable-next-line max-len\n confirmButtonLabel: this.data.createDialogData.confirmCreateDialogData?.confirmButtonLabel ? this.data.createDialogData.confirmCreateDialogData?.confirmButtonLabel : 'Create',\n // eslint-disable-next-line max-len\n cancelButtonLabel: this.data.createDialogData.confirmCreateDialogData?.cancelButtonLabel ? this.data.createDialogData.confirmCreateDialogData?.cancelButtonLabel : 'Cancel',\n // eslint-disable-next-line max-len\n title: this.data.createDialogData.confirmCreateDialogData?.title ? this.data.createDialogData.confirmCreateDialogData?.title : 'Create',\n // eslint-disable-next-line max-len\n requireConfirmation: this.data.createDialogData.confirmCreateDialogData?.requireConfirmation ? this.data.createDialogData.confirmCreateDialogData?.requireConfirmation : false,\n // eslint-disable-next-line max-len\n confirmationText: this.data.createDialogData.confirmCreateDialogData?.confirmationText ? this.data.createDialogData.confirmCreateDialogData?.confirmationText : undefined,\n };\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 this.entityService.create(this.data.entity).then(() => this.dialogRef.close());\n }\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\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'create')\">\n {{data.createDialogData.createButtonLabel ? data.createDialogData.createButtonLabel : 'Create'}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.createDialogData.cancelButtonLabel ? data.createDialogData.cancelButtonLabel : 'Cancel'}}\n </button>\n</mat-dialog-actions>\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.class';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { cloneDeep } from 'lodash';\nimport { EditEntityDialogData } from './edit-entity-dialog-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\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 Entity> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityKeys!: (keyof EntityType)[];\n\n entityService!: EntityService<EntityType>;\n\n entityPriorChanges!: EntityType;\n\n getWidth = EntityUtilities.getWidth;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: 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.dialogRef.disableClose = true;\n this.setEntityKeys();\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n this.entityPriorChanges = cloneDeep(this.data.entity);\n }\n\n private setEntityKeys(): void {\n this.entityKeys = Reflect.ownKeys(this.data.entity) as (keyof EntityType)[];\n const omitUpdateKeys = EntityUtilities.getOmitForUpdate(this.data.entity);\n this.entityKeys = this.entityKeys.filter((k) => !omitUpdateKeys.includes(k))\n .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));\n }\n\n edit(): void {\n if (this.data.editDialogData.editRequiresConfirmDialog === false) {\n return this.confirmEdit();\n }\n const dialogData: ConfirmDialogData = {\n // eslint-disable-next-line max-len\n text: this.data.editDialogData.confirmEditDialogData?.text ? this.data.editDialogData.confirmEditDialogData?.text : ['Do you really want to save all changes?'],\n type: 'default',\n // eslint-disable-next-line max-len\n confirmButtonLabel: this.data.editDialogData.confirmEditDialogData?.confirmButtonLabel ? this.data.editDialogData.confirmEditDialogData?.confirmButtonLabel : 'Confirm',\n // eslint-disable-next-line max-len\n cancelButtonLabel: this.data.editDialogData.confirmEditDialogData?.cancelButtonLabel ? this.data.editDialogData.confirmEditDialogData?.cancelButtonLabel : 'Cancel',\n title: this.data.editDialogData.confirmEditDialogData?.title ? this.data.editDialogData.confirmEditDialogData?.title : 'Edit',\n // eslint-disable-next-line max-len\n requireConfirmation: this.data.editDialogData.confirmEditDialogData?.requireConfirmation ? this.data.editDialogData.confirmEditDialogData?.requireConfirmation : false,\n // eslint-disable-next-line max-len\n confirmationText: this.data.editDialogData.confirmEditDialogData?.confirmationText ? this.data.editDialogData.confirmEditDialogData?.confirmationText : undefined,\n };\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 private confirmEdit(): void {\n this.entityService.update(this.data.entity, this.entityPriorChanges).then(() => this.dialogRef.close(1));\n }\n\n delete(): void {\n if (this.data.editDialogData.deleteRequiresConfirmDialog === false) {\n return this.confirmDelete();\n }\n const dialogData: ConfirmDialogData = {\n // eslint-disable-next-line max-len\n text: this.data.editDialogData.confirmDeleteDialogData?.text ? this.data.editDialogData.confirmDeleteDialogData?.text : ['Do you really want to delete this entity?'],\n type: 'delete',\n // eslint-disable-next-line max-len\n confirmButtonLabel: this.data.editDialogData.confirmDeleteDialogData?.confirmButtonLabel ? this.data.editDialogData.confirmDeleteDialogData?.confirmButtonLabel : 'Delete',\n // eslint-disable-next-line max-len\n cancelButtonLabel: this.data.editDialogData.confirmDeleteDialogData?.cancelButtonLabel ? this.data.editDialogData.confirmDeleteDialogData?.cancelButtonLabel : 'Cancel',\n // eslint-disable-next-line max-len\n title: this.data.editDialogData.confirmDeleteDialogData?.title ? this.data.editDialogData.confirmDeleteDialogData?.title : 'Delete',\n // eslint-disable-next-line max-len\n requireConfirmation: this.data.editDialogData.confirmDeleteDialogData?.requireConfirmation ? this.data.editDialogData.confirmDeleteDialogData?.requireConfirmation : false,\n // eslint-disable-next-line max-len\n confirmationText: this.data.editDialogData.confirmDeleteDialogData?.confirmationText ? this.data.editDialogData.confirmDeleteDialogData?.confirmationText : undefined,\n };\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 private confirmDelete(): void {\n this.entityService.delete(this.entityPriorChanges.id).then(() => this.dialogRef.close(2));\n }\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 ? data.editDialogData.deleteButtonLabel : 'Delete'}}\n </button>\n</h2>\n\n<mat-dialog-content>\n <form #form=\"ngForm\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"edit()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'edit') || !EntityUtilities.dirty(data.entity, entityPriorChanges)\">\n {{data.editDialogData.confirmButtonLabel ? data.editDialogData.confirmButtonLabel : 'Save'}}\n </button>\n <button mat-raised-button (click)=\"cancel()\" class=\"cancel-button\">\n {{data.editDialogData.cancelButtonLabel ? data.editDialogData.cancelButtonLabel : 'Cancel'}}\n </button>\n</mat-dialog-actions>\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.class';\nimport { firstValueFrom, Subject, takeUntil } from 'rxjs';\nimport { Entity } from '../../classes/entity-model.class';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';\nimport { CreateEntityDialogData } from './create-dialog/create-entity-dialog-data';\nimport { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';\nimport { EditEntityDialogData } from './edit-dialog/edit-entity-dialog-data';\nimport { MultiSelectAction, EntitiesData, CreateDialogData, EditDialogData } from './table-data';\nimport { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { ConfirmDialogData } from '../confirm-dialog/confirm-dialog-data';\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 Entity> implements OnInit, OnDestroy {\n\n /**\n * The configuration for the entities-component\n */\n @Input()\n entitiesData!: EntitiesData<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 ngOnInit(): void {\n this.validateInput();\n\n this.entityService = this.injector.get(this.entitiesData.baseData.EntityServiceClass) as EntityService<EntityType>;\n\n const givenDisplayColumns = this.entitiesData.baseData.displayColumns.map((v) => v.displayName);\n if (this.entitiesData.baseData.multiSelectActions?.length) {\n if (givenDisplayColumns.find((s) => s === '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 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.entitiesData.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity) as string;\n };\n this.dataSource.sort = this.sort;\n if (this.entitiesData.baseData.searchString) {\n this.dataSource.filterPredicate = (entity: EntityType, filter: string) => {\n const searchStr = this.entitiesData.baseData.searchString?.(entity) as string;\n const formattedSearchString = searchStr.toLowerCase();\n const formattedFilterString = filter.toLowerCase();\n return formattedSearchString.includes(formattedFilterString);\n };\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 this.entityService.read();\n }\n\n private validateInput(): void {\n if (!this.entitiesData.baseData.displayColumns) {\n throw new Error('Missing required Input data \"displayColumns\"');\n }\n if (!this.entitiesData.baseData.title) {\n throw new Error('Missing required Input data \"title\"');\n }\n if (!this.entitiesData.baseData.EntityServiceClass) {\n throw new Error('Missing required Input data \"EntityServiceClass\"');\n }\n if (this.entitiesData.baseData.allowCreate === undefined) {\n this.entitiesData.baseData.allowCreate = true;\n }\n if (this.entitiesData.baseData.allowEdit === undefined) {\n this.entitiesData.baseData.allowEdit = () => true;\n }\n if (this.entitiesData.baseData.allowDelete === undefined) {\n this.entitiesData.baseData.allowDelete = () => true;\n }\n if (\n (\n this.entitiesData.baseData.allowEdit !== (() => false)\n || this.entitiesData.baseData.allowDelete !== (() => false)\n || this.entitiesData.baseData.allowCreate\n )\n && !this.entitiesData.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 (this.entitiesData.baseData.allowCreate && !this.entitiesData.baseData.create && !this.entitiesData.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 this.entitiesData.baseData.allowEdit !== (() => false)\n || this.entitiesData.baseData.allowDelete !== (() => false)\n )\n && !this.entitiesData.baseData.edit\n && !this.entitiesData.editDialogData\n ) {\n throw new Error(\n `Missing required Input data \"editDialogData\".\n You can only omit this value when editing and deleting is disallowed or done with a custom edit method.`\n );\n }\n }\n\n editEntity(entity: EntityType): void {\n if (this.entitiesData.baseData.allowEdit?.(entity)) {\n if (this.entitiesData.baseData.edit) {\n this.entitiesData.baseData.edit(new this.entitiesData.baseData.EntityClass(entity));\n }\n else {\n this.editDefault(new this.entitiesData.baseData.EntityClass(entity));\n }\n }\n }\n private editDefault(entity: EntityType): void {\n const dialogData: EditEntityDialogData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,\n allowDelete: this.entitiesData.baseData.allowDelete as (entity: EntityType) => boolean,\n editDialogData: this.entitiesData.editDialogData as EditDialogData<EntityType>\n };\n firstValueFrom(\n this.dialog.open( NgxMatEntityEditDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }).afterClosed()\n ).then((res: number) => {\n if (res === 0) {\n const data = this.dataSource.data;\n data[this.dataSource.data.findIndex((e) => e.id === entity.id)] = entity;\n this.dataSource.data = data;\n this.selection.clear();\n }\n });\n }\n\n createEntity(): void {\n if (this.entitiesData.baseData.allowCreate) {\n if (this.entitiesData.baseData.create) {\n this.entitiesData.baseData.create(new this.entitiesData.baseData.EntityClass());\n }\n else {\n this.createDefault(new this.entitiesData.baseData.EntityClass());\n }\n }\n }\n private createDefault(entity: EntityType): void {\n const dialogData: CreateEntityDialogData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,\n createDialogData: this.entitiesData.createDialogData as CreateDialogData\n };\n this.dialog.open(NgxMatEntityCreateDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n });\n }\n\n runMultiAction(action: MultiSelectAction<EntityType>): void {\n if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {\n return this.confirmRunMultiAction(action);\n }\n const dialogData: ConfirmDialogData = {\n // eslint-disable-next-line max-len\n text: action.confirmDialogData?.text ? action.confirmDialogData?.text : [`Do you really want to run this action on ${this.selection.selected.length} entries?`],\n type: 'default',\n confirmButtonLabel: action.confirmDialogData?.confirmButtonLabel ? action.confirmDialogData?.confirmButtonLabel : 'Confirm',\n cancelButtonLabel: action.confirmDialogData?.cancelButtonLabel ? action.confirmDialogData?.cancelButtonLabel : 'Cancel',\n title: action.confirmDialogData?.title ? action.confirmDialogData?.title : action.displayName,\n requireConfirmation: action.confirmDialogData?.requireConfirmation ? action.confirmDialogData?.requireConfirmation : false,\n confirmationText: action.confirmDialogData?.confirmationText ? action.confirmDialogData?.confirmationText : undefined\n };\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 private confirmRunMultiAction(action: MultiSelectAction<EntityType>): void {\n action.action(this.selection.selected);\n }\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 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 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 applyFilter(event: Event): void {\n const filterValue = (event.target as HTMLInputElement).value;\n this.dataSource.filter = filterValue.trim().toLowerCase();\n }\n}","<h1 class=\"title\">{{entitiesData.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>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\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 entitiesData.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]=\"entitiesData.baseData.allowEdit?.(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 { 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';\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 ],\n exports: [NgxMatEntityTableComponent]\n})\nexport class NgxMatEntityTableModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\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 { MatTableModule } from '@angular/material/table';\nimport { NgxMatEntityInternalInputComponent } from './internal-input.component';\n\n@NgModule({\n declarations: [NgxMatEntityInternalInputComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatTableModule\n ],\n exports: [NgxMatEntityInternalInputComponent]\n})\nexport class NgxMatEntityInternalInputModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityAddArrayItemDialogComponent } from './add-array-item-dialog.component';\nimport { NgxMatEntityInternalInputModule } from '../../internal-input/internal-input.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n declarations: [NgxMatEntityAddArrayItemDialogComponent],\n imports: [CommonModule, NgxMatEntityInternalInputModule, MatDialogModule, FormsModule, MatButtonModule],\n exports: [NgxMatEntityAddArrayItemDialogComponent]\n})\nexport class NgxMatEntityAddArrayItemDialogModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\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 { MatTableModule } from '@angular/material/table';\nimport { NgxMatEntityArrayTableComponent } from './array-table.component';\nimport { NgxMatEntityInternalInputModule } from '../internal-input/internal-input.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgxMatEntityAddArrayItemDialogModule } from './add-array-item-dialog/add-array-item-dialog.module';\n\n@NgModule({\n declarations: [NgxMatEntityArrayTableComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatTableModule,\n NgxMatEntityInternalInputModule,\n MatButtonModule,\n NgxMatEntityAddArrayItemDialogModule\n ],\n exports: [NgxMatEntityArrayTableComponent]\n})\nexport class NgxMatEntityArrayTableModule {}","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 { NgxMatEntityArrayTableModule } from './array-table/array-table.module';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [NgxMatEntityInputComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n NgxMatEntityArrayTableModule,\n MatChipsModule,\n MatIconModule\n ],\n exports: [NgxMatEntityInputComponent]\n})\nexport class NgxMatEntityInputModule {}","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';\n\n@NgModule({\n declarations: [NgxMatEntityCreateDialogComponent],\n imports: [CommonModule, NgxMatEntityInputModule, MatDialogModule, FormsModule, MatButtonModule],\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';\n\n@NgModule({\n declarations: [ NgxMatEntityEditDialogComponent],\n imports: [\n CommonModule,\n NgxMatEntityInputModule,\n MatDialogModule,\n FormsModule,\n MatButtonModule,\n NgxMatEntityConfirmDialogModule\n ],\n exports: [ NgxMatEntityEditDialogComponent]\n})\nexport class NgxMatEntityEditDialogModule {}","import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';\nimport { baseProperty } from './base/base-property.decorator';\nimport { DecoratorTypes } from './base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting string propery metadata\n * @param metadata The metadata of the string property\n */\nexport function boolean(\n metadata: CheckboxBooleanDecoratorConfig | ToggleBooleanDecoratorConfig | DropdownBooleanDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(new DropdownBooleanDecoratorConfig(metadata), DecoratorTypes.BOOLEAN_DROPDOWN);\n }\n else if (metadata.displayStyle === 'checkbox') {\n return baseProperty(new CheckboxBooleanDecoratorConfig(metadata), DecoratorTypes.BOOLEAN_CHECKBOX);\n }\n else {\n return baseProperty(new ToggleBooleanDecoratorConfig(metadata), DecoratorTypes.BOOLEAN_TOGGLE);\n }\n}\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\nexport class DropdownBooleanDecoratorConfig extends BooleanDecoratorConfig {\n override displayStyle: 'dropdown';\n /**\n * The name of the true value if displayStyle dropdown is used.\n * Can also receive a function to determine the name.\n */\n dropdownTrue: string | { (args: unknown): string };\n /**\n * The name of the false value if displayStyle dropdown is used.\n * Can also receive a function to determine the name,\n */\n dropdownFalse: string | { (args: unknown): string };\n\n constructor(metadata: DropdownBooleanDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.dropdownTrue = metadata.dropdownTrue;\n this.dropdownFalse = metadata.dropdownFalse;\n }\n}\n\nexport class CheckboxBooleanDecoratorConfig extends BooleanDecoratorConfig {\n override displayStyle: 'checkbox';\n\n constructor(metadata: CheckboxBooleanDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n }\n}\nexport class ToggleBooleanDecoratorConfig extends BooleanDecoratorConfig {\n override displayStyle: 'toggle';\n\n constructor(metadata: ToggleBooleanDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n }\n}","import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';\nimport { baseProperty } from './base/base-property.decorator';\nimport { DecoratorTypes } from './base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting string propery metadata\n * @param metadata The metadata of the string property\n */\nexport function number(\n metadata: DefaultNumberDecoratorConfig | DropdownNumberDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(new DropdownNumberDecoratorConfig(metadata), DecoratorTypes.NUMBER_DROPDOWN);\n }\n else {\n return baseProperty(new DefaultNumberDecoratorConfig(metadata), DecoratorTypes.NUMBER);\n }\n}\n\n/**\n * Interface 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';\n}\n\nexport class DefaultNumberDecoratorConfig extends NumberDecoratorConfig {\n override displayStyle: 'line';\n /**\n * (optional) The minimum value of the number\n */\n min?: number;\n /**\n * (optional) The maximum value of the number\n */\n max?: number;\n\n constructor(metadata: DefaultNumberDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.min = metadata.min;\n this.max = metadata.max;\n }\n}\nexport class DropdownNumberDecoratorConfig extends NumberDecoratorConfig {\n override displayStyle: 'dropdown';\n /**\n * The values of the dropdown, consisting of a name to display and the actual value\n * Can also receive a function to determine the values\n */\n dropdownValues?: { displayName: string, value: number }[];\n\n constructor(metadata: DropdownNumberDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.dropdownValues = metadata.dropdownValues;\n }\n}","import { PropertyDecoratorConfig } from './base/property-decorator-config.interface';\nimport { baseProperty } from './base/base-property.decorator';\nimport { Entity } from '../classes/entity-model.class';\nimport { DecoratorTypes } from './base/decorator-types.enum';\n\n/**\n * Decorator for setting and getting object propery metadata.\n * @param metadata The metadata of the object property\n */\nexport function object(metadata: DefaultObjectDecoratorConfig): (target: object, propertyKey: string) => void {\n return baseProperty(new DefaultObjectDecoratorConfig(metadata), DecoratorTypes.OBJECT);\n}\n\n/**\n * Interface definition for the @object metadata\n */\nabstract class ObjectDecoratorConfig extends PropertyDecoratorConfig {\n /**\n * The entity type of the object\n */\n type!: typeof Entity;\n\n /**\n * How to display the object.\n * @inline 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\nexport class DefaultObjectDecoratorConfig extends ObjectDecoratorConfig {\n override displayStyle: 'inline';\n\n constructor(metadata: DefaultObjectDecoratorConfig) {\n super(\n metadata.displayName,\n metadata.display,\n metadata.required,\n metadata.omitForCreate,\n metadata.omitForUpdate,\n metadata.defaultWidths,\n metadata.order\n );\n this.displayStyle = metadata.displayStyle;\n this.type = metadata.type;\n }\n}","/*\n * Public API Surface of ngx-material-entity\n */\n\nimport 'reflect-metadata';\n\n// classes\nexport * from './classes/entity-model.class';\nexport * from './classes/entity-service.class';\nexport * from './classes/entity-utilities.class';\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/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/input/input.module';\nexport * from './components/input/input.component';\n\nexport * from './components/get-validation-error-message.function';\n\n// decorators\nexport * from './decorators/base/decorator-types.enum';\nexport * from './decorators/array.decorator';\nexport * from './decorators/boolean.decorator';\nexport * from './decorators/number.decorator';\nexport * from './decorators/object.decorator';\nexport * from './decorators/string.decorator';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i5","i1","i3","i9","i2.NgxMatEntityInternalInputComponent","i6","i7.NgxMatEntityArrayTableComponent","i8","i10","i11","i13","i2.NgxMatEntityInputComponent","i3.NgxMatEntityInputComponent","i7"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-material-entity.mjs","sources":["../../../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/classes/entity-model.class.ts","../../../projects/ngx-material-entity/src/classes/entity-utilities.class.ts","../../../projects/ngx-material-entity/src/classes/entity-service.class.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/array-table/add-array-item-dialog/add-array-item-dialog-data.builder.ts","../../../projects/ngx-material-entity/src/components/input/internal-input/internal-input.component.ts","../../../projects/ngx-material-entity/src/components/input/internal-input/internal-input.component.html","../../../projects/ngx-material-entity/src/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.ts","../../../projects/ngx-material-entity/src/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.html","../../../projects/ngx-material-entity/src/decorators/array/array-decorator-internal.data.ts","../../../projects/ngx-material-entity/src/components/input/array-table/array-table.component.ts","../../../projects/ngx-material-entity/src/components/input/array-table/array-table.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/internal-input/internal-input.module.ts","../../../projects/ngx-material-entity/src/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.ts","../../../projects/ngx-material-entity/src/components/input/array-table/array-table.module.ts","../../../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/table.module.ts","../../../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/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/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/public-api.ts","../../../projects/ngx-material-entity/src/ngx-material-entity.ts"],"sourcesContent":["import { DecoratorTypes } from './decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from './property-decorator-internal.data';\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(metadata: PropertyDecoratorConfigInternal, type: DecoratorTypes) {\n return function (target: object, propertyKey: string) {\n Reflect.defineMetadata('metadata', metadata, target, propertyKey);\n Reflect.defineMetadata('type', type, target, propertyKey);\n };\n}","import { Entity } from '../../classes/entity-model.class';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from '../array/array-decorator-internal.data';\nimport { CheckboxBooleanDecoratorConfigInternal, DropdownBooleanDecoratorConfigInternal, ToggleBooleanDecoratorConfigInternal } from '../boolean/boolean-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal } from '../number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../object/object-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, 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 NUMBER = 'number',\n NUMBER_DROPDOWN = 'numberDropdown',\n BOOLEAN_CHECKBOX = 'boolean',\n BOOLEAN_TOGGLE = 'booleanToggle',\n BOOLEAN_DROPDOWN = 'booleanDropdown',\n OBJECT = 'object',\n ARRAY = 'array',\n ARRAY_STRING_CHIPS = 'arrayStringChips',\n ARRAY_STRING_AUTOCOMPLETE_CHIPS = 'arrayStringAutocompleteChips'\n}\n\n/**\n * Gives the metadata-config Type based on the DecoratorTypes enum.\n */\nexport type DecoratorType<T> =\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.NUMBER ? DefaultNumberDecoratorConfigInternal\n : T extends DecoratorTypes.NUMBER_DROPDOWN ? DropdownNumberDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_CHECKBOX ? CheckboxBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_TOGGLE ? ToggleBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.BOOLEAN_DROPDOWN ? DropdownBooleanDecoratorConfigInternal\n : T extends DecoratorTypes.OBJECT ? DefaultObjectDecoratorConfigInternal<Entity>\n : T extends DecoratorTypes.ARRAY ? EntityArrayDecoratorConfigInternal<Entity>\n : T extends DecoratorTypes.ARRAY_STRING_CHIPS ? StringChipsArrayDecoratorConfigInternal\n : T extends DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS ? AutocompleteStringChipsArrayDecoratorConfigInternal\n : never;","import { cols, PropertyDecoratorConfig } from './property-decorator.data';\n\nexport abstract class PropertyDecoratorConfigInternal implements PropertyDecoratorConfig {\n display: boolean;\n displayName: string;\n required: boolean;\n omitForCreate: boolean;\n omitForUpdate: boolean;\n defaultWidths: [cols, cols, cols];\n order: number;\n\n constructor(data: PropertyDecoratorConfig) {\n if (data.order && (data.order < 0)) {\n throw new Error('order must be at least 0');\n }\n this.display = data.display != undefined ? data.display : true;\n this.displayName = data.displayName;\n this.required = data.required != undefined ? data.required : true;\n this.omitForCreate = data.omitForCreate != undefined ? data.omitForCreate : false;\n this.omitForUpdate = data.omitForUpdate != undefined ? data.omitForUpdate : false;\n this.defaultWidths = data.defaultWidths ? data.defaultWidths : [6, 6, 12];\n this.order = data.order ? data.order : -1;\n }\n}","import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\n\nexport class DropdownStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DropdownStringDecoratorConfig {\n displayStyle: 'dropdown';\n dropdownValues: { displayName: string, value: string }[];\n\n constructor(data: DropdownStringDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = data.dropdownValues;\n }\n}\n\nexport class DefaultStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DefaultStringDecoratorConfig {\n displayStyle: 'line';\n minLength?: number;\n maxLength?: number;\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\nexport class TextboxStringDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements TextboxStringDecoratorConfig {\n displayStyle: 'textbox';\n minLength?: number;\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\nexport class AutocompleteStringDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal implements AutocompleteStringDecoratorConfig {\n\n displayStyle: 'autocomplete';\n autocompleteValues: string[];\n minLength?: number;\n maxLength?: number;\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}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from './string-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfig, DefaultStringDecoratorConfig, DropdownStringDecoratorConfig, TextboxStringDecoratorConfig } from './string-decorator.data';\n\n/**\n * Decorator for setting and getting string propery 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\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(new DropdownStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_DROPDOWN);\n }\n else if (metadata.displayStyle === 'autocomplete') {\n return baseProperty(new AutocompleteStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_AUTOCOMPLETE);\n }\n else if (metadata.displayStyle === 'textbox') {\n return baseProperty(new TextboxStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING_TEXTBOX);\n }\n else {\n return baseProperty(new DefaultStringDecoratorConfigInternal(metadata), DecoratorTypes.STRING);\n }\n}","import { string } from '../decorators/string/string.decorator';\n\n/**\n * The base Entity class.\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 id!: string;\n}","import { isEqual } from 'lodash';\nimport { DecoratorType, DecoratorTypes } from '../decorators/base/decorator-types.enum';\nimport { cols } from '../decorators/base/property-decorator.data';\nimport { Entity } from './entity-model.class';\nimport { PropertyDecoratorConfigInternal } from '../decorators/base/property-decorator-internal.data';\nimport { EntityArrayDecoratorConfigInternal } from '../decorators/array/array-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../decorators/string/string-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal } from '../decorators/number/number-decorator-internal.data';\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 Entity>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key of Reflect.ownKeys(entity)) {\n const metadata = Reflect.getMetadata('metadata', entity, key) as PropertyDecoratorConfigInternal;\n if (metadata.omitForUpdate) {\n res.push(key as keyof EntityType);\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 Entity>(entity: EntityType): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const key of Reflect.ownKeys(entity)) {\n const metadata = Reflect.getMetadata('metadata', entity, key) as PropertyDecoratorConfigInternal;\n if (metadata.omitForCreate) {\n res.push(key as keyof EntityType);\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<EntityType extends Entity, T extends DecoratorTypes>(\n entity: EntityType,\n propertyKey: keyof EntityType,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type: T\n ): DecoratorType<T> {\n try {\n const metadata = Reflect.getMetadata('metadata', entity, propertyKey as string) as DecoratorType<T>;\n if (!metadata) {\n throw new Error(\n `Could not find metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\n return metadata;\n }\n catch (error) {\n throw new Error(\n `Could not find metadata for property ${String(propertyKey)} on the entity ${JSON.stringify(entity)}`\n );\n }\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 Entity>(\n entity: EntityType, propertyKey: keyof EntityType\n ): DecoratorTypes {\n try {\n const propertyType = Reflect.getMetadata('type', entity, propertyKey as string) as DecoratorTypes;\n if (!propertyType) {\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;\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 Entity>(target: EntityType, entity?: EntityType): void {\n for (const key in target) {\n const type = EntityUtilities.getPropertyType(target, key);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n let value = entity ? Reflect.get(entity, key) : undefined;\n switch (type) {\n case DecoratorTypes.OBJECT:\n const objectMetadata = EntityUtilities.getPropertyMetadata(target, key, DecoratorTypes.OBJECT);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n value = new objectMetadata.type(value) as EntityType;\n break;\n case DecoratorTypes.ARRAY:\n const inputArray: EntityType[] = value as EntityType[];\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 = new arrayMetadata.EntityClass(item) as EntityType;\n resArray.push(itemWithMetadata);\n }\n }\n value = resArray;\n break;\n default:\n break;\n }\n Reflect.set(target, key, value);\n }\n }\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static construct = this.new;\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static build = this.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 creatiung or editing validity.\n * @returns Whether or not the entity is valid.\n */\n static isEntityValid<EntityType extends Entity>(entity: EntityType, omit: 'create' | 'update'): boolean {\n for (const key in entity) {\n if (!this.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 Entity>(\n entity: EntityType,\n key: keyof EntityType,\n omit: 'create' | 'update'\n ): boolean {\n const type = this.getPropertyType(entity, key);\n const metadata: PropertyDecoratorConfigInternal = this.getPropertyMetadata(entity, key, type);\n const metadataDefaultString = metadata as DefaultStringDecoratorConfigInternal;\n const metadataTextboxString = metadata as TextboxStringDecoratorConfigInternal;\n const metadataAutocompleteString = metadata as AutocompleteStringDecoratorConfigInternal;\n const metadataDefaultNumber = metadata as DefaultNumberDecoratorConfigInternal;\n const objectProperty = entity[key] as unknown as EntityType;\n const metadataEntityArray = metadata as EntityArrayDecoratorConfigInternal<Entity>;\n const arrayItems = entity[key] as unknown as [];\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 && !entity[key]) {\n return false;\n }\n switch (type) {\n case DecoratorTypes.STRING:\n if (\n metadataDefaultString.maxLength\n && (entity[key] as unknown as string).length > metadataDefaultString.maxLength\n ) {\n return false;\n }\n if (\n metadataDefaultString.minLength\n && (entity[key] as unknown as string).length < metadataDefaultString.minLength\n ) {\n return false;\n }\n if (\n metadataDefaultString.regex\n && !(entity[key] as unknown as string).match(metadataDefaultString.regex)\n ) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_AUTOCOMPLETE:\n if (\n metadataAutocompleteString.maxLength\n && (entity[key] as unknown as string).length > metadataAutocompleteString.maxLength\n ) {\n return false;\n }\n if (\n metadataAutocompleteString.minLength\n && (entity[key] as unknown as string).length < metadataAutocompleteString.minLength\n ) {\n return false;\n }\n if (\n metadataAutocompleteString.regex\n && !(entity[key] as unknown as string).match(metadataAutocompleteString.regex)\n ) {\n return false;\n }\n break;\n case DecoratorTypes.STRING_TEXTBOX:\n if (\n metadataTextboxString.maxLength\n && (entity[key] as unknown as string).length > metadataTextboxString.maxLength\n ) {\n return false;\n }\n if (\n metadataTextboxString.minLength\n && (entity[key] as unknown as string).length < metadataTextboxString.minLength\n ) {\n return false;\n }\n break;\n case DecoratorTypes.NUMBER:\n if (metadataDefaultNumber.max && (entity[key] as unknown as number) > metadataDefaultNumber.max) {\n return false;\n }\n if (metadataDefaultNumber.min && (entity[key] as unknown as number) < metadataDefaultNumber.min) {\n return false;\n }\n break;\n case DecoratorTypes.OBJECT:\n for (const parameterKey in objectProperty) {\n if (!this.isPropertyValid(objectProperty, 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:\n if (metadataEntityArray.required && !arrayItems.length) {\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 /**\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 dirty(entity: Entity, entityPriorChanges: Entity): boolean {\n if (!entityPriorChanges) {\n return false;\n }\n else {\n const diff = this.difference(entity, entityPriorChanges);\n if (JSON.stringify(diff) === '{}') {\n return false;\n }\n else {\n return true;\n }\n }\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 difference<EntityType extends Entity>(\n entity: EntityType,\n entityPriorChanges: EntityType\n ): Partial<EntityType> {\n const res: Partial<EntityType> = {};\n for (const key in entity) {\n if (!isEqual(entity[key], entityPriorChanges[key])) {\n res[key] = entity[key];\n }\n }\n return res;\n }\n\n //TODO X Y\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 X, a positive value if Y.\n */\n static compareOrder<EntityType extends Entity>(a: keyof EntityType, b: keyof EntityType, entity: EntityType): number {\n const metadataA = EntityUtilities.getPropertyMetadata(entity, a, EntityUtilities.getPropertyType(entity, a));\n const metadataB = EntityUtilities.getPropertyMetadata(entity, b, EntityUtilities.getPropertyType(entity, b));\n\n if (metadataA.order === -1) {\n if (metadataB.order === -1) {\n return 0;\n }\n return 1;\n }\n else if (metadataB.order === -1) {\n return -1;\n }\n\n return ((metadataA.order ) - (metadataB.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 screensize the column values should be returned.\n * @returns Bootstrap column value.\n */\n static getWidth<EntityType extends Entity>(entity: EntityType, key: keyof EntityType, type: 'lg' | 'md' | 'sm'): number {\n const propertyType = EntityUtilities.getPropertyType(entity, key);\n const metadata = EntityUtilities.getPropertyMetadata(entity, key, propertyType);\n metadata.defaultWidths = metadata.defaultWidths as [cols, cols, cols];\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 Entity>(entity: EntityType, entityPriorChanges: EntityType): void {\n for (const key in entityPriorChanges) {\n Reflect.set(entity, key, Reflect.get(entityPriorChanges, key));\n }\n }\n}","import { Entity } from './entity-model.class';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { isNil, omit, omitBy } from 'lodash';\nimport { EntityUtilities } from './entity-utilities.class';\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 Entity> {\n /**\n * The base url used for api requests. If u want to have more control over this,\n * you can override the create, read, update and delete methods.\n *\n * Create Sends a POST-Request to baseUrl.\n *\n * Read Sends a GET-Request to baseUrl.\n *\n * Update Sends a PATCH-Request to baseUrl/{id}.\n *\n * Delete Sends a DEL-Request to baseUrl/{id}.\n */\n abstract readonly baseUrl: string;\n\n /**\n * 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 = omit(entity, EntityUtilities.getOmitForCreate(entity));\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 entites 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 reqBody = omit(\n EntityUtilities.difference(entity, entityPriorChanges),\n EntityUtilities.getOmitForUpdate(entity)\n );\n const updatedEntity = await firstValueFrom(\n this.http.patch<EntityType>(\n `${this.baseUrl}/${entityPriorChanges.id}`,\n omitBy(reqBody, isNil)\n )\n );\n this.entities[this.entities.findIndex((e) => e.id === entityPriorChanges.id)] = updatedEntity;\n this.entitiesSubject.next(this.entities);\n }\n\n /**\n * Deletes a specific Entity.\n *\n * @param id - The id of the element to delete.\n */\n async delete(id: string): Promise<void> {\n await firstValueFrom(this.http.delete<void>(`${this.baseUrl}/${id}`));\n this.entities.splice(\n this.entities.findIndex((e) => e.id === id), 1\n );\n this.entitiesSubject.next(this.entities);\n }\n}","import { ConfirmDialogData, ConfirmDialogTypes } from './confirm-dialog-data';\n\nexport class ConfirmDialogDataInternal implements ConfirmDialogData {\n text: string[];\n type: ConfirmDialogTypes;\n confirmButtonLabel: string;\n cancelButtonLabel: string;\n title: string;\n requireConfirmation: boolean;\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\nexport class ConfirmDialogDataBuilder {\n confirmDialogData: ConfirmDialogDataInternal;\n private readonly dataInput?: ConfirmDialogData;\n\n constructor(data?: ConfirmDialogData) {\n this.validateInput(data);\n this.dataInput = data;\n this.confirmDialogData = new ConfirmDialogDataInternal(\n data?.text ? data.text : ['Do you really want to do this?'],\n data?.type ? data.type : 'default',\n data?.confirmButtonLabel ? data.confirmButtonLabel : 'Confirm',\n data?.cancelButtonLabel ? data.cancelButtonLabel : 'Cancel',\n data?.title ? data.title : 'Confirmation',\n data?.requireConfirmation ? data.requireConfirmation : false,\n data?.confirmationText\n );\n return this;\n }\n\n private validateInput(data?: ConfirmDialogData): void {\n if (!data) {\n return;\n }\n if (data.requireConfirmation && !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 && 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\n withDefaultText(text: string[]): ConfirmDialogDataBuilder {\n if (!this.dataInput?.text) {\n this.confirmDialogData.text = text;\n }\n return this;\n }\n\n withDefaultType(type: ConfirmDialogTypes): ConfirmDialogDataBuilder {\n if (!this.dataInput?.type) {\n this.confirmDialogData.type = type;\n }\n return this;\n }\n\n withDefaultConfirmButtonLabel(label: string): ConfirmDialogDataBuilder {\n if (!this.dataInput?.confirmButtonLabel) {\n this.confirmDialogData.confirmButtonLabel = label;\n }\n return this;\n }\n\n withDefaultCancelButtonLabel(label: string): ConfirmDialogDataBuilder {\n if (!this.dataInput?.cancelButtonLabel) {\n this.confirmDialogData.cancelButtonLabel = label;\n }\n return this;\n }\n\n withDefaultTitle(title: string): ConfirmDialogDataBuilder {\n if (!this.dataInput?.title) {\n this.confirmDialogData.title = title;\n }\n return this;\n }\n\n withDefaultRequireConfirmation(requireConfirmation: boolean): ConfirmDialogDataBuilder {\n if (this.dataInput?.requireConfirmation === undefined) {\n this.confirmDialogData.requireConfirmation = requireConfirmation;\n }\n return this;\n }\n\n withDefaultConfirmationText(confirmationText: string): ConfirmDialogDataBuilder {\n if (!this.dataInput?.confirmationText) {\n this.confirmDialogData.confirmationText = confirmationText;\n }\n return this;\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@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).confirmDialogData;\n this.dialogRef.disableClose = true;\n }\n\n confirmAction(): void {\n this.dialogRef.close(1);\n }\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 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 else {\n return 'invalid input';\n }\n}","import { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { CreateDialogData } from '../table-data';\n\nexport class CreateDialogDataInternal implements CreateDialogData {\n title: string;\n createButtonLabel: string;\n cancelButtonLabel: string;\n createRequiresConfirmDialog: boolean;\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\nexport class CreateDialogDataBuilder {\n createDialogData: CreateDialogDataInternal;\n private readonly dataInput?: CreateDialogData;\n\n constructor(data?: CreateDialogData) {\n // this.validateInput(data);\n this.dataInput = data;\n const confirmCreateDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmCreateDialogData)\n .withDefaultConfirmButtonLabel('Create')\n .withDefaultText(['Do you really want to create this entity?'])\n .withDefaultTitle('Create')\n .confirmDialogData;\n this.createDialogData = new CreateDialogDataInternal(\n data?.title ? data.title : 'Create',\n data?.createButtonLabel ? data.createButtonLabel : 'Create',\n data?.cancelButtonLabel ? data.cancelButtonLabel : 'Cancel',\n data?.createRequiresConfirmDialog ? data.createRequiresConfirmDialog : false,\n confirmCreateDialogData\n );\n return this;\n }\n\n withDefaultTitle(title: string): CreateDialogDataBuilder {\n if (!this.dataInput?.title) {\n this.createDialogData.title = title;\n }\n return this;\n }\n\n withDefaultCreateButtonLabel(label: string): CreateDialogDataBuilder {\n if (!this.dataInput?.createButtonLabel) {\n this.createDialogData.createButtonLabel = label;\n }\n return this;\n }\n\n withDefaultCancelButtonLabel(label: string): CreateDialogDataBuilder {\n if (!this.dataInput?.cancelButtonLabel) {\n this.createDialogData.cancelButtonLabel = label;\n }\n return this;\n }\n\n withDefaultCreateRequiresConfirmDialog(createRequiresConfirmDialog: boolean): CreateDialogDataBuilder {\n if (this.dataInput?.createRequiresConfirmDialog === undefined) {\n this.createDialogData.createRequiresConfirmDialog = createRequiresConfirmDialog;\n }\n return this;\n }\n\n withDefaultConfirmCreateDialogData(confirmCreateDialogData: ConfirmDialogDataInternal): CreateDialogDataBuilder {\n if (this.dataInput?.confirmCreateDialogData === undefined) {\n this.createDialogData.confirmCreateDialogData = confirmCreateDialogData;\n }\n return this;\n }\n}","import { NgModel } from '@angular/forms';\nimport { Entity } from '../../../../classes/entity-model.class';\nimport { getValidationErrorMessage } 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\nexport class AddArrayItemDialogDataInternal<EntityType extends Entity> implements AddArrayItemDialogData<EntityType> {\n entity: EntityType;\n createDialogData: CreateDialogDataInternal;\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\nexport class AddArrayItemDialogDataBuilder<EntityType extends Entity> {\n addArrayItemDialogData: AddArrayItemDialogDataInternal<EntityType>;\n private readonly dataInput: AddArrayItemDialogData<EntityType>;\n\n constructor(data: AddArrayItemDialogData<EntityType>) {\n this.dataInput = data;\n const createDialogData = new CreateDialogDataBuilder(data.createDialogData)\n .withDefaultCreateButtonLabel('Add')\n .withDefaultTitle('Add to array')\n .createDialogData;\n this.addArrayItemDialogData = new AddArrayItemDialogDataInternal(\n data.entity,\n createDialogData,\n data.getValidationErrorMessage ? data.getValidationErrorMessage : getValidationErrorMessage,\n );\n return this;\n }\n\n withDefaultCreateDialogData(createDialogData: CreateDialogDataInternal): AddArrayItemDialogDataBuilder<EntityType> {\n if (!this.dataInput.createDialogData) {\n this.addArrayItemDialogData.createDialogData = createDialogData;\n }\n return this;\n }\n\n withDefaultGetValidationErrorMessage(getValidationErrorMessage: (model: NgModel) => string): AddArrayItemDialogDataBuilder<EntityType> {\n if (!this.dataInput.getValidationErrorMessage) {\n this.addArrayItemDialogData.getValidationErrorMessage = getValidationErrorMessage;\n }\n return this;\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { DecoratorTypes } from '../../../decorators/base/decorator-types.enum';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { NgModel } from '@angular/forms';\nimport { DropdownBooleanDecoratorConfigInternal } from '../../../decorators/boolean/boolean-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal } from '../../../decorators/number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../../../decorators/object/object-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../../../decorators/string/string-decorator-internal.data';\nimport { PropertyDecoratorConfigInternal } from '../../../decorators/base/property-decorator-internal.data';\n\n@Component({\n selector: 'ngx-mat-entity-internal-input',\n templateUrl: './internal-input.component.html',\n styleUrls: ['./internal-input.component.scss']\n})\nexport class NgxMatEntityInternalInputComponent<EntityType extends Entity> implements OnInit {\n /**\n * The entity on which the property exists. Used in conjuction with the \"propertyKey\"\n * to determine the property for which the input should be generated.\n */\n @Input()\n entity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjuction with the \"entity\".\n */\n @Input()\n propertyKey!: keyof EntityType;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\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 @Input()\n hideOmitForEdit?: boolean;\n\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n type!: DecoratorTypes;\n\n metadata!: PropertyDecoratorConfigInternal;\n\n metadataDefaultString!: DefaultStringDecoratorConfigInternal;\n metadataTextboxString!: TextboxStringDecoratorConfigInternal;\n metadataAutocompleteString!: AutocompleteStringDecoratorConfigInternal;\n metadataDropdownString!: DropdownStringDecoratorConfigInternal;\n\n metadataDropdownBoolean!: DropdownBooleanDecoratorConfigInternal;\n\n metadataDefaultNumber!: DefaultNumberDecoratorConfigInternal;\n metadataDropdownNumber!: DropdownNumberDecoratorConfigInternal;\n\n metadataDefaultObject!: DefaultObjectDecoratorConfigInternal<EntityType>;\n objectProperty!: Entity;\n\n readonly DecoratorTypes = DecoratorTypes;\n\n getWidth = EntityUtilities.getWidth;\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 if (!this.propertyKey) {\n throw new Error('Missing required Input data \"propertyKey\"');\n }\n this.type = EntityUtilities.getPropertyType(this.entity, this.propertyKey);\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.propertyKey, this.type);\n\n this.metadataDefaultString = this.metadata as DefaultStringDecoratorConfigInternal;\n this.metadataTextboxString = this.metadata as TextboxStringDecoratorConfigInternal;\n this.metadataAutocompleteString = this.metadata as AutocompleteStringDecoratorConfigInternal;\n this.metadataDropdownString = this.metadata as DropdownStringDecoratorConfigInternal;\n\n this.metadataDropdownBoolean = this.metadata as DropdownBooleanDecoratorConfigInternal;\n\n this.metadataDefaultNumber = this.metadata as DefaultNumberDecoratorConfigInternal;\n this.metadataDropdownNumber = this.metadata as DropdownNumberDecoratorConfigInternal;\n\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfigInternal<EntityType>;\n this.objectProperty = this.entity[this.propertyKey] as unknown as Entity;\n }\n\n getObjectProperties(): (keyof Entity)[] {\n const res: (keyof Entity)[] = [];\n for (const property in this.objectProperty) {\n const metadata = EntityUtilities.getPropertyMetadata(\n this.objectProperty,\n property as keyof Entity,\n EntityUtilities.getPropertyType(this.objectProperty, property as keyof Entity)\n );\n if (\n !(this.hideOmitForCreate && metadata.omitForCreate)\n && !(this.hideOmitForEdit && metadata.omitForUpdate)\n ) {\n res.push(property as keyof Entity);\n }\n }\n return res.sort((a, b) => EntityUtilities.compareOrder(a, b, this.objectProperty));\n }\n}","<div [ngSwitch]=\"type\" *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [pattern]=\"metadataDefaultString.regex ? metadataDefaultString.regex : '[\\\\s\\\\S]*'\"\n [minlength]=\"metadataDefaultString.minLength ? metadataDefaultString.minLength : null\"\n [maxlength]=\"metadataDefaultString.maxLength ? metadataDefaultString.maxLength : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [minlength]=\"metadataTextboxString.minLength ? metadataTextboxString.minLength : null\"\n [maxlength]=\"metadataTextboxString.maxLength ? metadataTextboxString.maxLength : null\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [matAutocomplete]=\"auto\"\n [minlength]=\"metadataAutocompleteString.minLength ? metadataAutocompleteString.minLength : null\"\n [maxlength]=\"metadataAutocompleteString.maxLength ? metadataAutocompleteString.maxLength : null\"\n [pattern]=\"metadataAutocompleteString.regex ? metadataAutocompleteString.regex : '[\\\\s\\\\S]*'\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let value of metadataAutocompleteString.autocompleteValues\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n <mat-option *ngFor=\"let value of metadataDropdownString.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <mat-form-field>\n <mat-checkbox [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n {{metadata.displayName}}\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n {{metadata.displayName}}\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadataDropdownBoolean.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadataDropdownBoolean.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n type=\"number\"\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [min]=\"metadataDefaultNumber.min ? metadataDefaultNumber.min : null\"\n [max]=\"metadataDefaultNumber.max ? metadataDefaultNumber.max : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\">\n <mat-option *ngFor=\"let value of metadataDropdownNumber.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Object------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.OBJECT\">\n <b>{{metadataDefaultObject.displayName}}</b>\n <!-- iterates over the object properties -->\n <div class=\"row\">\n <!--\n displays another ngx-material-entity with the:\n object as the entity,\n the current key in the loop received by the keyvalue direction as the propertyKey\n and the getValidationErrorMessage of the current component\n -->\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of getObjectProperties(); let i = index; trackBy: trackByFn\"\n [entity]=\"objectProperty\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n class=\"col-lg-{{getWidth(objectProperty, key, 'lg')}} col-md-{{getWidth(objectProperty, key, 'md')}} col-sm-{{getWidth(objectProperty, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </div>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}}is not known.</div>\n</div>","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Entity } from '../../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../../classes/entity-utilities.class';\nimport { AddArrayItemDialogData } from './add-array-item-dialog-data';\nimport { AddArrayItemDialogDataBuilder, AddArrayItemDialogDataInternal } from './add-array-item-dialog-data.builder';\n\n@Component({\n selector: 'ngx-mat-entity-add-array-item-dialog',\n templateUrl: './add-array-item-dialog.component.html',\n styleUrls: ['./add-array-item-dialog.component.scss']\n})\nexport class NgxMatEntityAddArrayItemDialogComponent<EntityType extends Entity> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityKeys!: (keyof EntityType)[];\n\n getWidth = EntityUtilities.getWidth;\n\n data!: AddArrayItemDialogDataInternal<EntityType>;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n private readonly inputData: AddArrayItemDialogData<EntityType>,\n public dialogRef: MatDialogRef<NgxMatEntityAddArrayItemDialogComponent<EntityType>>\n ) {}\n\n ngOnInit(): void {\n this.data = new AddArrayItemDialogDataBuilder(this.inputData).addArrayItemDialogData;\n this.dialogRef.disableClose = true;\n this.setEntityKeys();\n }\n\n private setEntityKeys(): void {\n this.entityKeys = Reflect.ownKeys(this.data.entity) as (keyof EntityType)[];\n const omitCreateKeys = EntityUtilities.getOmitForCreate(this.data.entity);\n this.entityKeys = this.entityKeys.filter((k) => !omitCreateKeys.includes(k))\n .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));\n }\n\n create(): void {\n this.dialogRef.close(1);\n }\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\" class=\"row\">\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"data.getValidationErrorMessage\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'create')\">\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 { Entity } from '../../classes/entity-model.class';\nimport { CreateDialogData } from '../../components/table/table-data';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { ArrayTableDisplayColumn, AutocompleteStringChipsArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\n\nexport class EntityArrayDecoratorConfigInternal<EntityType extends Entity>\n extends PropertyDecoratorConfigInternal implements EntityArrayDecoratorConfig<EntityType> {\n\n itemType: DecoratorTypes.OBJECT;\n displayStyle: 'table';\n EntityClass: new (entity?: EntityType) => EntityType;\n displayColumns: ArrayTableDisplayColumn<EntityType>[];\n createDialogData?: CreateDialogData;\n createInline: boolean;\n missingErrorMessage: string;\n\n constructor(data: EntityArrayDecoratorConfig<EntityType>) {\n super(data);\n this.createDialogData = data.createDialogData;\n this.displayStyle = data.displayStyle;\n this.itemType = data.itemType;\n this.EntityClass = data.EntityClass;\n this.displayColumns = data.displayColumns;\n this.createInline = data.createInline != undefined ? data.createInline : true;\n this.missingErrorMessage = data.missingErrorMessage ? data.missingErrorMessage : 'Needs to contain at least one value';\n this.defaultWidths = data.defaultWidths ? data.defaultWidths : [12, 12, 12];\n }\n}\n\nexport class StringChipsArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements StringChipsArrayDecoratorConfig {\n itemType: DecoratorTypes.STRING;\n displayStyle: 'chips';\n deleteHtml?: string;\n minLength?: number;\n maxLength?: number;\n regex?: RegExp;\n\n constructor(data: StringChipsArrayDecoratorConfig) {\n super(data);\n this.deleteHtml = data.deleteHtml;\n this.displayStyle = data.displayStyle;\n this.itemType = data.itemType;\n this.maxLength = data.maxLength;\n this.minLength = data.minLength;\n this.regex = data.regex;\n this.defaultWidths = data.defaultWidths ? data.defaultWidths : [6, 12, 12];\n }\n}\n\nexport class AutocompleteStringChipsArrayDecoratorConfigInternal\n extends PropertyDecoratorConfigInternal implements AutocompleteStringChipsArrayDecoratorConfig {\n\n autocompleteValues: string[];\n itemType: DecoratorTypes.STRING_AUTOCOMPLETE;\n displayStyle: 'chips';\n deleteHtml?: string;\n minLength?: number;\n maxLength?: number;\n regex?: RegExp;\n\n constructor(data: AutocompleteStringChipsArrayDecoratorConfig) {\n super(data);\n this.autocompleteValues = data.autocompleteValues;\n this.deleteHtml = data.deleteHtml;\n this.displayStyle = data.displayStyle;\n this.itemType = data.itemType;\n this.maxLength = data.maxLength;\n this.minLength = data.minLength;\n this.regex = data.regex;\n this.defaultWidths = data.defaultWidths ? data.defaultWidths : [6, 12, 12];\n }\n}","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { NgModel } from '@angular/forms';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatDialog } from '@angular/material/dialog';\nimport { cloneDeep } from 'lodash';\nimport { firstValueFrom } from 'rxjs';\nimport { NgxMatEntityAddArrayItemDialogComponent } from './add-array-item-dialog/add-array-item-dialog.component';\nimport { AddArrayItemDialogDataBuilder, AddArrayItemDialogDataInternal } from './add-array-item-dialog/add-array-item-dialog-data.builder';\nimport { AddArrayItemDialogData } from './add-array-item-dialog/add-array-item-dialog-data';\nimport { EntityArrayDecoratorConfigInternal } from '../../../decorators/array/array-decorator-internal.data';\n\n@Component({\n selector: 'ngx-mat-entity-array-table',\n templateUrl: './array-table.component.html',\n styleUrls: ['./array-table.component.scss']\n})\nexport class NgxMatEntityArrayTableComponent<EntityType extends Entity> implements OnInit {\n @Input()\n arrayItems!: EntityType[];\n\n @Input()\n metadata!: EntityArrayDecoratorConfigInternal<EntityType>;\n\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n @Input()\n omit!: 'create' | 'update';\n\n dataSource!: MatTableDataSource<EntityType>;\n\n selection: SelectionModel<EntityType> = new SelectionModel<EntityType>(true, []);\n\n displayedColumns!: string[];\n\n arrayItem!: EntityType;\n\n private arrayItemPriorChanges!: EntityType;\n\n getWidth = EntityUtilities.getWidth;\n\n EntityUtilities = EntityUtilities;\n\n constructor(private readonly dialog: MatDialog) {}\n\n trackByFn(index: unknown): unknown {\n return index;\n }\n\n ngOnInit(): void {\n const givenDisplayColumns: string[] = this.metadata.displayColumns.map((v) => v.displayName);\n this.validateInput(givenDisplayColumns);\n this.displayedColumns = ['select'].concat(givenDisplayColumns);\n this.dataSource = new MatTableDataSource();\n this.dataSource.data = this.arrayItems;\n this.arrayItem = new this.metadata.EntityClass();\n this.arrayItemPriorChanges = cloneDeep(this.arrayItem);\n }\n private validateInput(givenDisplayColumns: string[]): void {\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 if (!this.metadata.createInline && !this.metadata.createDialogData) {\n throw new Error(\n `Missing required Input data \"createDialogData\".\n You can only omit this value when the creation is inline.`\n );\n }\n }\n\n add(): void {\n if (this.metadata.createInline) {\n this.arrayItems.push(cloneDeep(this.arrayItem));\n this.dataSource.data = this.arrayItems;\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n }\n else {\n const dialogInputData: AddArrayItemDialogData<EntityType>= {\n entity: this.arrayItem,\n createDialogData: this.metadata.createDialogData,\n getValidationErrorMessage: this.getValidationErrorMessage\n }\n const dialogData: AddArrayItemDialogDataInternal<EntityType> = new AddArrayItemDialogDataBuilder(dialogInputData)\n .addArrayItemDialogData;\n firstValueFrom(\n this.dialog.open(\n NgxMatEntityAddArrayItemDialogComponent,\n {\n data: dialogData,\n autoFocus: false,\n restoreFocus: false\n }\n ).afterClosed()\n ).then((res: number) => {\n if (res === 1) {\n this.arrayItems.push(cloneDeep(this.arrayItem));\n this.dataSource.data = this.arrayItems;\n }\n EntityUtilities.resetChangesOnEntity(this.arrayItem, this.arrayItemPriorChanges);\n });\n }\n }\n remove(): void {\n this.selection.selected.forEach(s => {\n this.arrayItems.splice(this.arrayItems.indexOf(s), 1);\n });\n this.dataSource.data = this.arrayItems;\n this.selection.clear();\n }\n\n getObjectProperties(): (keyof EntityType)[] {\n const res: (keyof EntityType)[] = [];\n for (const property in this.arrayItem) {\n const metadata = EntityUtilities.getPropertyMetadata(\n this.arrayItem,\n property as keyof Entity,\n EntityUtilities.getPropertyType(this.arrayItem, property as keyof Entity)\n );\n if (!(metadata.omitForCreate)) {\n res.push(property as keyof Entity);\n }\n }\n return res.sort((a, b) => EntityUtilities.compareOrder(a, b, this.arrayItem));\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 isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n}","<div class=\"mat-elevation-z8\" style=\"border-radius: 5px;padding: 15px;margin-bottom: 15px;margin-top: 15px;\">\n\n <div style=\"padding-bottom: 10px\">\n <b>{{metadata.displayName}}</b>\n </div>\n <div class=\"row\" *ngIf=\"metadata.createInline\">\n <ngx-mat-entity-internal-input\n *ngFor=\"let key of getObjectProperties(); let i = index; trackBy: trackByFn\"\n [entity]=\"arrayItem\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n class=\"col-lg-{{getWidth(arrayItem, key, 'lg')}} col-md-{{getWidth(arrayItem, key, 'md')}} col-sm-{{getWidth(arrayItem, key, 'sm')}}\"\n >\n </ngx-mat-entity-internal-input>\n </div>\n <div class=\"buttons\">\n <button mat-raised-button\n [disabled]=\"metadata.createInline && !EntityUtilities.isEntityValid(arrayItem, 'create')\"\n (click)=\"add()\">\n Add\n </button>\n <button mat-raised-button\n [disabled]=\"!selection.selected.length\"\n (click)=\"remove()\">\n Remove\n </button>\n </div>\n\n <mat-table [dataSource]=\"dataSource\">\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 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>","import { Component, Input, OnInit } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { EntityUtilities } from '../../classes/entity-utilities.class';\nimport { Entity } from '../../classes/entity-model.class';\nimport { DecoratorTypes } from '../../decorators/base/decorator-types.enum';\nimport { getValidationErrorMessage } from '../get-validation-error-message.function';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { cloneDeep } from 'lodash';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from '../../decorators/array/array-decorator-internal.data';\nimport { DropdownBooleanDecoratorConfigInternal } from '../../decorators/boolean/boolean-decorator-internal.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal } from '../../decorators/number/number-decorator-internal.data';\nimport { DefaultObjectDecoratorConfigInternal } from '../../decorators/object/object-decorator-internal.data';\nimport { AutocompleteStringDecoratorConfigInternal, DefaultStringDecoratorConfigInternal, DropdownStringDecoratorConfigInternal, TextboxStringDecoratorConfigInternal } from '../../decorators/string/string-decorator-internal.data';\nimport { PropertyDecoratorConfigInternal } from '../../decorators/base/property-decorator-internal.data';\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 Entity> implements OnInit {\n /**\n * The entity on which the property exists. Used in conjuction with the \"propertyKey\"\n * to determine the property for which the input should be generated.\n */\n @Input()\n entity!: EntityType;\n\n /**\n * The name of the property to generate the input for. Used in conjuction with the \"entity\".\n */\n @Input()\n propertyKey!: keyof EntityType;\n\n /**\n * (optional) A custom function to generate the error-message for invalid inputs.\n */\n @Input()\n getValidationErrorMessage!: (model: NgModel) => string;\n\n /**\n * Whether to hide a value if it is omitted for creation.\n * Is used internally for the object property.\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 @Input()\n hideOmitForEdit?: boolean;\n\n type!: DecoratorTypes;\n\n metadata!: PropertyDecoratorConfigInternal;\n\n metadataDefaultString!: DefaultStringDecoratorConfigInternal;\n metadataTextboxString!: TextboxStringDecoratorConfigInternal;\n metadataAutocompleteString!: AutocompleteStringDecoratorConfigInternal;\n autocompleteStrings!: string[];\n filteredAutocompleteStrings!: string[];\n metadataDropdownString!: DropdownStringDecoratorConfigInternal;\n\n metadataDropdownBoolean!: DropdownBooleanDecoratorConfigInternal;\n\n metadataDefaultNumber!: DefaultNumberDecoratorConfigInternal;\n metadataDropdownNumber!: DropdownNumberDecoratorConfigInternal;\n\n metadataDefaultObject!: DefaultObjectDecoratorConfigInternal<EntityType>;\n objectProperty!: Entity;\n\n metadataEntityArray!: EntityArrayDecoratorConfigInternal<Entity>;\n entityArrayValues!: Entity[];\n metadataStringChipsArray!: StringChipsArrayDecoratorConfigInternal;\n stringChipsArrayValues!: string[];\n chipsInput: string = '';\n\n metadataAutocompleteStringChipsArray!: AutocompleteStringChipsArrayDecoratorConfigInternal;\n\n readonly DecoratorTypes = DecoratorTypes;\n\n getWidth = EntityUtilities.getWidth;\n\n constructor() {}\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 if (!this.propertyKey) {\n throw new Error('Missing required Input data \"propertyKey\"');\n }\n this.type = EntityUtilities.getPropertyType(this.entity, this.propertyKey);\n this.metadata = EntityUtilities.getPropertyMetadata(this.entity, this.propertyKey, this.type);\n\n this.metadataDefaultString = this.metadata as DefaultStringDecoratorConfigInternal;\n this.metadataTextboxString = this.metadata as TextboxStringDecoratorConfigInternal;\n\n this.metadataAutocompleteString = this.metadata as AutocompleteStringDecoratorConfigInternal;\n this.autocompleteStrings = this.metadataAutocompleteString.autocompleteValues;\n this.filteredAutocompleteStrings = cloneDeep(this.autocompleteStrings);\n\n this.metadataDropdownString = this.metadata as DropdownStringDecoratorConfigInternal;\n\n this.metadataDropdownBoolean = this.metadata as DropdownBooleanDecoratorConfigInternal;\n\n this.metadataDefaultNumber = this.metadata as DefaultNumberDecoratorConfigInternal;\n this.metadataDropdownNumber = this.metadata as DropdownNumberDecoratorConfigInternal;\n\n this.metadataDefaultObject = this.metadata as DefaultObjectDecoratorConfigInternal<EntityType>;\n this.objectProperty = this.entity[this.propertyKey] as unknown as EntityType;\n\n this.metadataEntityArray = this.metadata as EntityArrayDecoratorConfigInternal<Entity>;\n if (this.metadataEntityArray.EntityClass) {\n if (!this.entity[this.propertyKey]) {\n (this.entity[this.propertyKey] as unknown as Entity[]) = [];\n }\n this.entityArrayValues = this.entity[this.propertyKey] as unknown as Entity[];\n if (this.metadataEntityArray.createInline === undefined) {\n this.metadataEntityArray.createInline = true;\n }\n if (!this.metadataEntityArray.createInline && !this.metadataEntityArray.createDialogData) {\n this.metadataEntityArray.createDialogData = {\n title: 'Add'\n }\n }\n }\n\n this.metadataStringChipsArray = this.metadata as StringChipsArrayDecoratorConfigInternal;\n if (\n this.metadataStringChipsArray.itemType\n && (this.entity[this.propertyKey] as unknown as string[])?.length\n ) {\n this.stringChipsArrayValues = (this.entity[this.propertyKey] as unknown as string[]);\n }\n\n this.metadataAutocompleteStringChipsArray = this.metadata as AutocompleteStringChipsArrayDecoratorConfigInternal;\n\n if (!this.getValidationErrorMessage) {\n this.getValidationErrorMessage = getValidationErrorMessage;\n }\n }\n\n getObjectProperties(): (keyof Entity)[] {\n const res: (keyof Entity)[] = [];\n for (const property in this.objectProperty) {\n const metadata = EntityUtilities.getPropertyMetadata(\n this.objectProperty,\n property as keyof Entity,\n EntityUtilities.getPropertyType(this.objectProperty, property as keyof Entity)\n );\n if (\n !(this.hideOmitForCreate && metadata.omitForCreate)\n && !(this.hideOmitForEdit && metadata.omitForUpdate)\n ) {\n res.push(property as keyof Entity);\n }\n }\n return res.sort((a, b) => EntityUtilities.compareOrder(a, b, this.objectProperty));\n }\n\n addStringChipArrayValue(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.metadataStringChipsArray.minLength && value.length < this.metadataStringChipsArray.minLength) {\n return;\n }\n if (this.metadataStringChipsArray.maxLength && value.length > this.metadataStringChipsArray.maxLength) {\n return;\n }\n if (this.metadataStringChipsArray.regex && !value.match(this.metadataStringChipsArray.regex)) {\n return;\n }\n if (!this.stringChipsArrayValues) {\n if (!this.entity[this.propertyKey] as unknown as string[]) {\n (this.entity[this.propertyKey] as unknown as string[]) = [];\n }\n this.stringChipsArrayValues = this.entity[this.propertyKey] as unknown as string[];\n }\n this.stringChipsArrayValues.push(value);\n }\n event.chipInput!.clear();\n }\n\n removeStringChipArrayValue(value: string): void {\n this.stringChipsArrayValues.splice(this.stringChipsArrayValues.indexOf(value), 1);\n if (!this.stringChipsArrayValues.length) {\n (this.entity[this.propertyKey] as unknown) = undefined;\n this.stringChipsArrayValues = this.entity[this.propertyKey] as unknown as string[];\n }\n }\n\n selected(event: MatAutocompleteSelectedEvent, chipsInput: HTMLInputElement): void {\n const value = (event.option.viewValue || '').trim();\n if (this.metadataStringChipsArray.minLength && value.length < this.metadataStringChipsArray.minLength) {\n return;\n }\n if (this.metadataStringChipsArray.maxLength && value.length > this.metadataStringChipsArray.maxLength) {\n return;\n }\n if (this.metadataStringChipsArray.regex && !value.match(this.metadataStringChipsArray.regex)) {\n return;\n }\n if (!this.stringChipsArrayValues) {\n if (!this.entity[this.propertyKey] as unknown as string[]) {\n (this.entity[this.propertyKey] as unknown as string[]) = [];\n }\n this.stringChipsArrayValues = this.entity[this.propertyKey] as unknown as string[];\n }\n this.stringChipsArrayValues.push(value);\n chipsInput.value = '';\n }\n\n filterAutocompleteStrings(input: unknown): void {\n const filterValue = (input as string).toLowerCase();\n this.filteredAutocompleteStrings = this.autocompleteStrings.filter(s => s.toLowerCase().includes(filterValue));\n }\n}","<div [ngSwitch]=\"type\" *ngIf=\"!(hideOmitForCreate && metadata.omitForCreate) && !(hideOmitForEdit && metadata.omitForUpdate)\">\n <!-------------------------------------------->\n <!-----------------Strings-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.STRING\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [pattern]=\"metadataDefaultString.regex ? metadataDefaultString.regex : '[\\\\s\\\\S]*'\"\n [minlength]=\"metadataDefaultString.minLength ? metadataDefaultString.minLength : null\"\n [maxlength]=\"metadataDefaultString.maxLength ? metadataDefaultString.maxLength : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_TEXTBOX\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"10\"\n [required]=\"metadata.required\"\n [minlength]=\"metadataTextboxString.minLength ? metadataTextboxString.minLength : null\"\n [maxlength]=\"metadataTextboxString.maxLength ? metadataTextboxString.maxLength : null\"\n >\n </textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_AUTOCOMPLETE\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [matAutocomplete]=\"auto\"\n (keyup)=\"filterAutocompleteStrings(entity[propertyKey])\"\n [required]=\"metadata.required\"\n [minlength]=\"metadataAutocompleteString.minLength ? metadataAutocompleteString.minLength : null\"\n [maxlength]=\"metadataAutocompleteString.maxLength ? metadataAutocompleteString.maxLength : null\"\n [pattern]=\"metadataAutocompleteString.regex ? metadataAutocompleteString.regex : '[\\\\s\\\\S]*'\"\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>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.STRING_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required\">\n <mat-option *ngFor=\"let value of metadataDropdownString.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-----------------Booleans------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_CHECKBOX\">\n <mat-form-field>\n <mat-checkbox [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required\">\n {{metadata.displayName}}\n </mat-checkbox>\n <!-- hidden input is needed so that the checkbox can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_TOGGLE\">\n <mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required\">\n {{metadata.displayName}}\n </mat-slide-toggle>\n <!-- hidden input is needed so that the toggle can be used inside a mat-form-field -->\n <textarea matInput hidden></textarea>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.BOOLEAN_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required\">\n <mat-option [value]=\"undefined\">-</mat-option>\n <mat-option [value]=\"true\">{{metadataDropdownBoolean.dropdownTrue}}</mat-option>\n <mat-option [value]=\"false\">{{metadataDropdownBoolean.dropdownFalse}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!------------------Numbers------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <input\n matInput\n type=\"number\"\n [(ngModel)]=\"entity[propertyKey]\"\n [name]=\"propertyKey.toString()\"\n #model=\"ngModel\"\n [required]=\"metadata.required\"\n [min]=\"metadataDefaultNumber.min ? metadataDefaultNumber.min : null\"\n [max]=\"metadataDefaultNumber.max ? metadataDefaultNumber.max : null\"\n />\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.NUMBER_DROPDOWN\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-select [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\" [required]=\"metadata.required\">\n <mat-option *ngFor=\"let value of metadataDropdownNumber.dropdownValues\" [value]=\"value.value\">{{value.displayName}}</mat-option>\n </mat-select>\n <mat-error>{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Object------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.OBJECT\">\n <b>{{metadataDefaultObject.displayName}}</b>\n <!-- iterates over the object properties -->\n <div class=\"row\">\n <!--\n displays another ngx-material-entity with the:\n object as the entity,\n the current key in the loop received by the keyvalue direction as the propertyKey\n and the getValidationErrorMessage of the current component\n -->\n <ngx-mat-entity-input\n *ngFor=\"let key of getObjectProperties(); let i = index; trackBy: trackByFn\"\n [entity]=\"objectProperty\"\n [propertyKey]=\"key\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [hideOmitForCreate]=\"hideOmitForCreate\"\n [hideOmitForEdit]=\"hideOmitForEdit\"\n class=\"col-lg-{{getWidth(objectProperty, key, 'lg')}} col-md-{{getWidth(objectProperty, key, 'md')}} col-sm-{{getWidth(objectProperty, key, 'sm')}}\"\n >\n </ngx-mat-entity-input>\n </div>\n </div>\n\n <!-------------------------------------------->\n <!-------------------Array-------------------->\n <!-------------------------------------------->\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY\">\n <ngx-mat-entity-array-table\n [arrayItems]=\"entityArrayValues\"\n [metadata]=\"metadataEntityArray\"\n [getValidationErrorMessage]=\"getValidationErrorMessage\"\n [omit]=\"hideOmitForCreate ? 'create' : 'update'\"\n >\n </ngx-mat-entity-array-table>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_CHIPS\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n >\n <mat-chip *ngFor=\"let value of stringChipsArrayValues\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove *ngIf=\"metadataStringChipsArray.deleteHtml\" [innerHtml]=\"metadataStringChipsArray.deleteHtml\">\n </button>\n <button matChipRemove *ngIf=\"!metadataStringChipsArray.deleteHtml\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip>\n <input matInput\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addStringChipArrayValue($event)\"\n [(ngModel)]=\"chipsInput\" [name]=\"propertyKey.toString()\" #chipsModel=\"ngModel\"\n [minlength]='metadataStringChipsArray.minLength ? metadataStringChipsArray.minLength : null'\n [maxlength]='metadataStringChipsArray.maxLength ? metadataStringChipsArray.maxLength : null'\n [pattern]=\"metadataStringChipsArray.regex ? metadataStringChipsArray.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>\n </div>\n\n <div *ngSwitchCase=\"DecoratorTypes.ARRAY_STRING_AUTOCOMPLETE_CHIPS\">\n <mat-form-field>\n <mat-label>{{metadata.displayName}}</mat-label>\n <mat-chip-list #chipList\n [(ngModel)]=\"entity[propertyKey]\" [name]=\"propertyKey.toString()\" #model=\"ngModel\"\n [required]=\"metadata.required\"\n >\n <mat-chip *ngFor=\"let value of stringChipsArrayValues\" (removed)=\"removeStringChipArrayValue(value)\">\n {{value}}\n <button matChipRemove *ngIf=\"metadataStringChipsArray.deleteHtml\" [innerHtml]=\"metadataStringChipsArray.deleteHtml\">\n </button>\n <button matChipRemove *ngIf=\"!metadataStringChipsArray.deleteHtml\">\n <mat-icon>cancel</mat-icon>\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]=\"propertyKey.toString()\" #chipsModel=\"ngModel\"\n #chipsElement\n [minlength]='metadataStringChipsArray.minLength ? metadataStringChipsArray.minLength : null'\n [maxlength]='metadataStringChipsArray.maxLength ? metadataStringChipsArray.maxLength : null'\n [pattern]=\"metadataStringChipsArray.regex ? metadataStringChipsArray.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 filteredAutocompleteStrings\" [value]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"!chipsModel.errors\">{{getValidationErrorMessage(model)}}</mat-error>\n </mat-form-field>\n </div>\n\n <div *ngSwitchDefault>ERROR: The type {{type}}is not known.</div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\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 { MatTableModule } from '@angular/material/table';\nimport { NgxMatEntityInternalInputComponent } from './internal-input.component';\n\n@NgModule({\n declarations: [NgxMatEntityInternalInputComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatTableModule\n ],\n exports: [NgxMatEntityInternalInputComponent]\n})\nexport class NgxMatEntityInternalInputModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMatEntityAddArrayItemDialogComponent } from './add-array-item-dialog.component';\nimport { NgxMatEntityInternalInputModule } from '../../internal-input/internal-input.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\n\n@NgModule({\n declarations: [NgxMatEntityAddArrayItemDialogComponent],\n imports: [CommonModule, NgxMatEntityInternalInputModule, MatDialogModule, FormsModule, MatButtonModule],\n exports: [NgxMatEntityAddArrayItemDialogComponent]\n})\nexport class NgxMatEntityAddArrayItemDialogModule {}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\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 { MatTableModule } from '@angular/material/table';\nimport { NgxMatEntityArrayTableComponent } from './array-table.component';\nimport { NgxMatEntityInternalInputModule } from '../internal-input/internal-input.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgxMatEntityAddArrayItemDialogModule } from './add-array-item-dialog/add-array-item-dialog.module';\n\n@NgModule({\n declarations: [NgxMatEntityArrayTableComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatTableModule,\n NgxMatEntityInternalInputModule,\n MatButtonModule,\n NgxMatEntityAddArrayItemDialogModule\n ],\n exports: [NgxMatEntityArrayTableComponent]\n})\nexport class NgxMatEntityArrayTableModule {}","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 { NgxMatEntityArrayTableModule } from './array-table/array-table.module';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [NgxMatEntityInputComponent],\n imports: [\n CommonModule,\n MatInputModule,\n FormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatAutocompleteModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n NgxMatEntityArrayTableModule,\n MatChipsModule,\n MatIconModule\n ],\n exports: [NgxMatEntityInputComponent]\n})\nexport class NgxMatEntityInputModule {}","import { EntityService } from '../../../classes/entity-service.class';\nimport { Entity } from '../../../classes/entity-model.class'\nimport { CreateEntityDialogData } from './create-entity-dialog-data'\nimport { HttpClient } from '@angular/common/http';\nimport { CreateDialogDataBuilder, CreateDialogDataInternal } from './create-dialog-data.builder';\n\nexport class CreateEntityDialogDataInternal<EntityType extends Entity> implements CreateEntityDialogData<EntityType> {\n entity: EntityType;\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\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\nexport class CreateEntityDialogDataBuilder<EntityType extends Entity> {\n createDialogData: CreateEntityDialogDataInternal<EntityType>;\n private readonly dataInput: CreateEntityDialogData<EntityType>;\n\n constructor(data: CreateEntityDialogData<EntityType>) {\n // this.validateInput(data);\n this.dataInput = data;\n const createDialogData: CreateDialogDataInternal = new CreateDialogDataBuilder(data.createDialogData).createDialogData;\n this.createDialogData = new CreateEntityDialogDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n createDialogData\n );\n return this;\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.class';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\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';\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 Entity> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityKeys!: (keyof EntityType)[];\n\n entityService!: EntityService<EntityType>;\n\n data!: CreateEntityDialogDataInternal<EntityType>;\n\n getWidth = EntityUtilities.getWidth;\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).createDialogData;\n this.dialogRef.disableClose = true;\n this.setEntityKeys();\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n }\n\n private setEntityKeys(): void {\n this.entityKeys = Reflect.ownKeys(this.data.entity) as (keyof EntityType)[];\n const omitCreateKeys = EntityUtilities.getOmitForCreate(this.data.entity);\n this.entityKeys = this.entityKeys.filter((k) => !omitCreateKeys.includes(k))\n .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));\n }\n\n create(): void {\n if (!this.data.createDialogData?.createRequiresConfirmDialog) {\n return this.confirmCreate();\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.createDialogData?.confirmCreateDialogData)\n .withDefaultText(['Do you really want to create this entity?'])\n .withDefaultConfirmButtonLabel('Create')\n .withDefaultTitle('Create')\n .confirmDialogData;\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 this.entityService.create(this.data.entity).then(() => this.dialogRef.close());\n }\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\" class=\"row\">\n <ngx-mat-entity-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForCreate]=\"true\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"create()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'create')\">\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 { Entity } from '../../../classes/entity-model.class';\nimport { ConfirmDialogData } from '../../confirm-dialog/confirm-dialog-data';\nimport { ConfirmDialogDataBuilder, ConfirmDialogDataInternal } from '../../confirm-dialog/confirm-dialog-data.builder';\nimport { EditDialogData } from '../table-data';\n\nexport class EditDialogDataInternal<EntityType extends Entity> implements EditDialogData<EntityType> {\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 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\nexport class EditDialogDataBuilder<EntityType extends Entity> {\n editDialogData: EditDialogDataInternal<EntityType>;\n private readonly dataInput?: EditDialogData<EntityType>;\n\n constructor(data?: EditDialogData<EntityType>) {\n // this.validateInput(data);\n this.dataInput = data;\n const confirmEditDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmEditDialogData)\n .withDefaultConfirmButtonLabel('Save')\n .withDefaultText(['Do you really want to save all changes?'])\n .withDefaultTitle('Edit')\n .confirmDialogData;\n const confirmDeleteDialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(data?.confirmDeleteDialogData)\n .withDefaultConfirmButtonLabel('Delete')\n .withDefaultType('delete')\n .withDefaultText(['Do you really want to delete this entity?'])\n .withDefaultTitle('Delete')\n .confirmDialogData;\n this.editDialogData = new EditDialogDataInternal(\n data?.title ? data.title : () => 'Edit',\n data?.confirmButtonLabel ? data.confirmButtonLabel : 'Save',\n data?.deleteButtonLabel ? data.deleteButtonLabel : 'Delete',\n data?.cancelButtonLabel ? data.cancelButtonLabel : 'Cancel',\n data?.deleteRequiresConfirmDialog ? data.deleteRequiresConfirmDialog : true,\n data?.editRequiresConfirmDialog ? data.editRequiresConfirmDialog : false,\n confirmDeleteDialogData,\n confirmEditDialogData\n );\n return this;\n }\n\n withDefaultTitle(title: (entity: EntityType) => string): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.title) {\n this.editDialogData.title = title;\n }\n return this;\n }\n\n withDefaultConfirmButtonLabel(label: string): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.confirmButtonLabel) {\n this.editDialogData.confirmButtonLabel = label;\n }\n return this;\n }\n\n withDefaultDeleteButtonLabel(label: string): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.deleteButtonLabel) {\n this.editDialogData.deleteButtonLabel = label;\n }\n return this;\n }\n\n withDefaultCancelButtonLabel(label: string): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.cancelButtonLabel) {\n this.editDialogData.cancelButtonLabel = label;\n }\n return this;\n }\n\n withDefaultDeleteRequiresConfirmDialog(deleteRequiresConfirmDialog: boolean): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.deleteRequiresConfirmDialog) {\n this.editDialogData.deleteRequiresConfirmDialog = deleteRequiresConfirmDialog;\n }\n return this;\n }\n\n withDefaultEditRequiresConfirmDialog(editRequiresConfirmDialog: boolean): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.editRequiresConfirmDialog) {\n this.editDialogData.editRequiresConfirmDialog = editRequiresConfirmDialog;\n }\n return this;\n }\n\n withDefaultConfirmDeleteDialogData(confirmDeleteDialogData: ConfirmDialogData): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.confirmDeleteDialogData) {\n this.editDialogData.confirmDeleteDialogData = confirmDeleteDialogData;\n }\n return this;\n }\n\n withDefaultConfirmEditDialogData(confirmEditDialogData: ConfirmDialogData): EditDialogDataBuilder<EntityType> {\n if (!this.dataInput?.confirmEditDialogData) {\n this.editDialogData.confirmEditDialogData = confirmEditDialogData;\n }\n return this;\n }\n}","import { EntityService } from '../../../classes/entity-service.class';\nimport { Entity } from '../../../classes/entity-model.class'\nimport { HttpClient } from '@angular/common/http';\nimport { EditEntityDialogData } from './edit-entity-dialog-data';\nimport { EditDialogDataBuilder, EditDialogDataInternal } from './edit-dialog-data.builder';\n\nexport class EditEntityDialogDataInternal<EntityType extends Entity> implements EditEntityDialogData<EntityType> {\n entity: EntityType;\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\n editDialogData: EditDialogDataInternal<EntityType>;\n allowDelete: (entity: EntityType) => boolean;\n\n constructor(\n entity: EntityType,\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>,\n editDialogData: EditDialogDataInternal<EntityType>,\n allowDelete: (entity: EntityType) => boolean\n ) {\n this.entity = entity;\n this.EntityServiceClass = EntityServiceClass;\n this.editDialogData = editDialogData;\n this.allowDelete = allowDelete;\n }\n}\n\nexport class EditEntityDialogDataBuilder<EntityType extends Entity> {\n editDialogData: EditEntityDialogDataInternal<EntityType>;\n private readonly dataInput: EditEntityDialogData<EntityType>;\n\n constructor(data: EditEntityDialogData<EntityType>) {\n // this.validateInput(data);\n this.dataInput = data;\n const editDialogData: EditDialogDataInternal<EntityType> = new EditDialogDataBuilder(data.editDialogData).editDialogData;\n this.editDialogData = new EditEntityDialogDataInternal<EntityType>(\n data.entity,\n data.EntityServiceClass,\n editDialogData,\n data.allowDelete ? data.allowDelete : () => true\n );\n return this;\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.class';\nimport { Entity } from '../../../classes/entity-model.class';\nimport { EntityUtilities } from '../../../classes/entity-utilities.class';\nimport { cloneDeep } from 'lodash';\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';\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 Entity> implements OnInit {\n EntityUtilities = EntityUtilities;\n\n entityKeys!: (keyof EntityType)[];\n\n entityService!: EntityService<EntityType>;\n\n entityPriorChanges!: EntityType;\n\n data!: EditEntityDialogDataInternal<EntityType>;\n\n getWidth = EntityUtilities.getWidth;\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).editDialogData;\n this.dialogRef.disableClose = true;\n this.setEntityKeys();\n this.entityService = this.injector.get(this.data.EntityServiceClass) as EntityService<EntityType>;\n this.entityPriorChanges = cloneDeep(this.data.entity);\n }\n\n private setEntityKeys(): void {\n this.entityKeys = Reflect.ownKeys(this.data.entity) as (keyof EntityType)[];\n const omitUpdateKeys = EntityUtilities.getOmitForUpdate(this.data.entity);\n this.entityKeys = this.entityKeys.filter((k) => !omitUpdateKeys.includes(k))\n .sort((a, b) => EntityUtilities.compareOrder(a, b, this.data.entity));\n }\n\n edit(): void {\n if (!this.data.editDialogData.editRequiresConfirmDialog) {\n return this.confirmEdit();\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.editDialogData.confirmEditDialogData)\n .withDefaultText(['Do you really want to save all changes?'])\n .withDefaultConfirmButtonLabel('Save')\n .withDefaultTitle('Edit')\n .confirmDialogData;\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 private confirmEdit(): void {\n this.entityService.update(this.data.entity, this.entityPriorChanges).then(() => this.dialogRef.close(1));\n }\n\n delete(): void {\n if (!this.data.editDialogData.deleteRequiresConfirmDialog) {\n return this.confirmDelete();\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(this.data.editDialogData.confirmDeleteDialogData)\n .withDefaultText(['Do you really want to delete this entity?'])\n .withDefaultType('delete')\n .withDefaultConfirmButtonLabel('Delete')\n .withDefaultTitle('Delete')\n .confirmDialogData;\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 private confirmDelete(): void {\n this.entityService.delete(this.entityPriorChanges.id).then(() => this.dialogRef.close(2));\n }\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 <ngx-mat-entity-input\n *ngFor=\"let key of entityKeys\"\n [entity]=\"data.entity\"\n [propertyKey]=\"key\"\n [hideOmitForEdit]=\"true\"\n class=\"col-lg-{{getWidth(data.entity, key, 'lg')}} col-md-{{getWidth(data.entity, key, 'md')}} col-sm-{{getWidth(data.entity, key, 'sm')}}\"\n >\n </ngx-mat-entity-input>\n </form>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-raised-button (click)=\"edit()\" [disabled]=\"!EntityUtilities.isEntityValid(data.entity, 'update') || !EntityUtilities.dirty(data.entity, entityPriorChanges)\">\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.class';\nimport { Entity } from '../../classes/entity-model.class';\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';\n\nexport class TableDataInternal<EntityType extends Entity> implements TableData<EntityType> {\n baseData: BaseDataInternal<EntityType>;\n createDialogData: CreateDialogDataInternal;\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\nexport class BaseDataBuilder<EntityType extends Entity> {\n baseData: BaseDataInternal<EntityType>;\n private readonly dataInput: BaseData<EntityType>;\n\n constructor(data: BaseData<EntityType>) {\n //this.validateInput(data);\n this.dataInput = data;\n this.baseData = new BaseDataInternal<EntityType>(\n data.title,\n data.displayColumns,\n data.EntityServiceClass,\n data.searchLabel ? data.searchLabel : 'Search',\n data.createButtonLabel ? data.createButtonLabel : 'Create',\n data.searchString ? data.searchString : defaultSearchFunction,\n data.allowCreate ? data.allowCreate : true,\n data.allowEdit ? data.allowEdit : () => true,\n data.allowDelete ? data.allowDelete : () => true,\n data.multiSelectActions ? data.multiSelectActions : [],\n data.multiSelectLabel ? data.multiSelectLabel : 'Actions',\n data.EntityClass,\n data.edit,\n data.create\n );\n return this;\n }\n}\n\nexport class BaseDataInternal<EntityType extends Entity> implements BaseData<EntityType> {\n title: string;\n displayColumns: DisplayColumn<EntityType>[];\n EntityServiceClass: new (httpClient: HttpClient) => EntityService<EntityType>;\n searchLabel: string;\n createButtonLabel: string;\n searchString: (enity: EntityType) => string;\n allowCreate: boolean;\n allowEdit: (entity: EntityType) => boolean;\n allowDelete: (entity: EntityType) => boolean;\n multiSelectActions: MultiSelectAction<EntityType>[];\n multiSelectLabel: string\n\n EntityClass?: new (entity?: EntityType) => EntityType;\n edit?: (entity: EntityType) => unknown;\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: (enity: EntityType) => string,\n allowCreate: boolean,\n allowEdit: (entity: EntityType) => boolean,\n allowDelete: (entity: EntityType) => boolean,\n multiSelectActions: MultiSelectAction<EntityType>[],\n multiSelectLabel: string,\n\n EntityClass?: new (entity?: EntityType) => 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.allowEdit = allowEdit;\n this.allowDelete = allowDelete;\n this.multiSelectActions = multiSelectActions;\n this.multiSelectLabel = multiSelectLabel;\n this.edit = edit;\n this.create = create;\n }\n}\n\nexport class TableDataBuilder<EntityType extends Entity> {\n tableData: TableDataInternal<EntityType>;\n private readonly dataInput: TableData<EntityType>;\n\n constructor(data: TableData<EntityType>) {\n this.validateInput(data);\n this.dataInput = data;\n const createDialogData: CreateDialogDataInternal = new CreateDialogDataBuilder(data.createDialogData).createDialogData;\n const editDialogData: EditDialogDataInternal<EntityType> = new EditDialogDataBuilder(data.editDialogData).editDialogData;\n const baseData: BaseDataInternal<EntityType> = new BaseDataBuilder(data.baseData).baseData;\n this.tableData = new TableDataInternal<EntityType>(\n baseData,\n createDialogData,\n editDialogData\n );\n return this;\n }\n\n private 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.allowEdit && data.baseData.allowEdit !== (() => false)\n || data.baseData.allowDelete && data.baseData.allowDelete !== (() => false)\n || data.baseData.allowCreate\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.allowEdit !== (() => 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 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 Entity>(entity: EntityType): string {\n const searchString = Object.keys(entity as unknown as Record<string, unknown>)\n .reduce((currentTerm: string, key: string) => {\n return `${currentTerm}${(entity as unknown 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.class';\nimport { firstValueFrom, Subject, takeUntil } from 'rxjs';\nimport { Entity } from '../../classes/entity-model.class';\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';\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 Entity> 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 ngOnInit(): void {\n this.data = new TableDataBuilder(this.tableData).tableData;\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 if (this.data.baseData.searchString) {\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 }\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 this.entityService.read();\n }\n\n editEntity(entity: EntityType): void {\n if (this.data.baseData.allowEdit(entity)) {\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 this.editDefault(new this.data.baseData.EntityClass(entity));\n }\n }\n }\n private editDefault(entity: EntityType): void {\n const inputDialogData: EditEntityDialogData<EntityType> = {\n entity: entity,\n EntityServiceClass: this.data.baseData.EntityServiceClass,\n allowDelete: this.data.baseData.allowDelete,\n editDialogData: this.data.editDialogData\n }\n const dialogData: EditEntityDialogDataInternal<EntityType> = new EditEntityDialogDataBuilder(inputDialogData).editDialogData;\n firstValueFrom(\n this.dialog.open(NgxMatEntityEditDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n }).afterClosed()\n ).then((res: number) => {\n if (res === 0) {\n const data = this.dataSource.data;\n data[this.dataSource.data.findIndex((e) => e.id === entity.id)] = entity;\n this.dataSource.data = data;\n this.selection.clear();\n }\n });\n }\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 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 ).createDialogData;\n this.dialog.open(NgxMatEntityCreateDialogComponent, {\n data: dialogData,\n minWidth: '60%',\n autoFocus: false,\n restoreFocus: false\n });\n }\n\n runMultiAction(action: MultiSelectAction<EntityType>): void {\n if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {\n return this.confirmRunMultiAction(action);\n }\n const dialogData: ConfirmDialogDataInternal = new ConfirmDialogDataBuilder(action.confirmDialogData)\n .withDefaultText([`Do you really want to run this action on ${this.selection.selected.length} entries?`])\n .withDefaultTitle(action.displayName).confirmDialogData;\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 private confirmRunMultiAction(action: MultiSelectAction<EntityType>): void {\n action.action(this.selection.selected);\n }\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 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 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 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.allowEdit(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 { 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';\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 ],\n exports: [NgxMatEntityTableComponent]\n})\nexport class NgxMatEntityTableModule {}","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';\n\n@NgModule({\n declarations: [NgxMatEntityCreateDialogComponent],\n imports: [CommonModule, NgxMatEntityInputModule, MatDialogModule, FormsModule, MatButtonModule],\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';\n\n@NgModule({\n declarations: [ NgxMatEntityEditDialogComponent],\n imports: [\n CommonModule,\n NgxMatEntityInputModule,\n MatDialogModule,\n FormsModule,\n MatButtonModule,\n NgxMatEntityConfirmDialogModule\n ],\n exports: [ NgxMatEntityEditDialogComponent]\n})\nexport class NgxMatEntityEditDialogModule {}","import { Entity } from '../../classes/entity-model.class';\nimport { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { AutocompleteStringChipsArrayDecoratorConfigInternal, EntityArrayDecoratorConfigInternal, StringChipsArrayDecoratorConfigInternal } from './array-decorator-internal.data';\nimport { AutocompleteStringChipsArrayDecoratorConfig, EntityArrayDecoratorConfig, StringChipsArrayDecoratorConfig } from './array-decorator.data';\n\n/**\n * Decorator for setting and getting array propery 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 Entity>(\n metadata: EntityArrayDecoratorConfig<EntityType> | StringChipsArrayDecoratorConfig | AutocompleteStringChipsArrayDecoratorConfig\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.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}","export type cols = 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 screensize lg, the second for md and the third for sm.\n *\n * @default [6, 6, 12]\n */\n defaultWidths?: [cols, cols, cols];\n /**\n * Specifies order of the input property when used inside the default create or edit dialog.\n * Ordering is ascending.\n *\n * @default -1 (sets this property at the end)\n */\n order?: number\n}","import { Entity } from '../../classes/entity-model.class';\nimport { CreateDialogData } from '../../components/table/table-data';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\nexport interface ArrayTableDisplayColumn<EntityType extends Entity> {\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 */\nabstract class ArrayDecoratorConfig extends PropertyDecoratorConfig {\n /**\n * How to display the string.\n */\n displayStyle!: 'table' | 'chips';\n\n /**\n * The type of the items inside the array.\n */\n itemType!: DecoratorTypes;\n}\n\n/**\n * Definition for an array of Entities.\n */\nexport interface EntityArrayDecoratorConfig<EntityType extends Entity> extends ArrayDecoratorConfig {\n itemType: DecoratorTypes.OBJECT,\n displayStyle: 'table',\n\n /**\n * The EntityClass used for generating the create inputs.\n */\n EntityClass: new (entity?: EntityType) => 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 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 strings displayed as a chips list.\n */\nexport interface StringChipsArrayDecoratorConfig extends ArrayDecoratorConfig {\n itemType: DecoratorTypes.STRING,\n displayStyle: 'chips',\n\n /**\n * The html inside the delete-button.\n * Please note that custom tags such as <mat-icon></mat-icon>\n * need to be defined as known elements, otherwise the sanitizer will remove them.\n * You can however work around this by using `<span class=\"material-icons\"></span>`.\n *\n * @default <mat-icon>cancel</mat-icon>\n */\n deleteHtml?: 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 itemType: DecoratorTypes.STRING_AUTOCOMPLETE,\n displayStyle: 'chips',\n\n /**\n * The html inside the delete-button.\n * Please note that custom tags such as <mat-icon></mat-icon>\n * need to be defined as known elements, otherwise the sanitizer will remove them.\n * You can however work around this by using `<span class=\"material-icons\"></span>`.\n *\n * @default <mat-icon>cancel</mat-icon>\n */\n deleteHtml?: 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\nexport class DropdownBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DropdownBooleanDecoratorConfig {\n displayStyle: 'dropdown';\n dropdownTrue: string;\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\nexport class CheckboxBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements CheckboxBooleanDecoratorConfig {\n displayStyle: 'checkbox';\n\n constructor(data: CheckboxBooleanDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n }\n}\n\nexport class ToggleBooleanDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements ToggleBooleanDecoratorConfig {\n displayStyle: 'toggle';\n\n constructor(data: ToggleBooleanDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\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 propery 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\nexport interface DropdownBooleanDecoratorConfig extends BooleanDecoratorConfig {\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\nexport interface CheckboxBooleanDecoratorConfig extends BooleanDecoratorConfig {\n displayStyle: 'checkbox'\n}\nexport interface ToggleBooleanDecoratorConfig extends BooleanDecoratorConfig {\n displayStyle: 'toggle'\n}","import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig } from './number-decorator.data';\n\nexport class DefaultNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DefaultNumberDecoratorConfig {\n displayStyle: 'line';\n min?: number;\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\nexport class DropdownNumberDecoratorConfigInternal extends PropertyDecoratorConfigInternal implements DropdownNumberDecoratorConfig {\n displayStyle: 'dropdown';\n dropdownValues: { displayName: string, value: number }[];\n\n constructor(data: DropdownNumberDecoratorConfig) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.dropdownValues = data.dropdownValues;\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultNumberDecoratorConfig, DropdownNumberDecoratorConfig } from './number-decorator.data';\nimport { DefaultNumberDecoratorConfigInternal, DropdownNumberDecoratorConfigInternal } from './number-decorator-internal.data';\n\n/**\n * Decorator for setting and getting string propery metadata.\n *\n * @param metadata - The metadata of the string property.\n * @returns The method that defines the metadata.\n */\nexport function number(\n metadata: DefaultNumberDecoratorConfig | DropdownNumberDecoratorConfig\n): (target: object, propertyKey: string) => void {\n if (metadata.displayStyle === 'dropdown') {\n return baseProperty(new DropdownNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER_DROPDOWN);\n }\n else {\n return baseProperty(new DefaultNumberDecoratorConfigInternal(metadata), DecoratorTypes.NUMBER);\n }\n}","import { 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';\n}\n\nexport interface DefaultNumberDecoratorConfig extends NumberDecoratorConfig {\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\nexport interface DropdownNumberDecoratorConfig extends NumberDecoratorConfig {\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value.\n */\n dropdownValues: { displayName: string, value: number }[]\n}","import { Entity } from '../../classes/entity-model.class';\nimport { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';\nimport { DefaultObjectDecoratorConfig } from './object-decorator.data';\n\nexport class DefaultObjectDecoratorConfigInternal<EntityType extends Entity>\n extends PropertyDecoratorConfigInternal implements DefaultObjectDecoratorConfig<EntityType> {\n\n displayStyle: 'inline';\n type: new (entity?: EntityType) => EntityType;\n\n constructor(data: DefaultObjectDecoratorConfig<EntityType>) {\n super(data);\n this.displayStyle = data.displayStyle;\n this.type = data.type;\n }\n}","import { baseProperty } from '../base/base-property.decorator';\nimport { Entity } from '../../classes/entity-model.class';\nimport { DecoratorTypes } from '../base/decorator-types.enum';\nimport { DefaultObjectDecoratorConfig } from './object-decorator.data';\nimport { DefaultObjectDecoratorConfigInternal } from './object-decorator-internal.data';\n\n/**\n * Decorator for setting and getting object propery 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 Entity>(\n metadata: DefaultObjectDecoratorConfig<EntityType>\n): (target: object, propertyKey: string) => void {\n return baseProperty(new DefaultObjectDecoratorConfigInternal(metadata), DecoratorTypes.OBJECT);\n}","import { Entity } from '../../classes/entity-model.class';\nimport { PropertyDecoratorConfig } from '../base/property-decorator.data';\n\n/**\n * Definition for the @object metadata.\n */\nabstract class ObjectDecoratorConfig<EntityType extends Entity> extends PropertyDecoratorConfig {\n /**\n * The entity type of the object.\n */\n type!: new (entity?: EntityType) => 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\nexport interface DefaultObjectDecoratorConfig<EntityType extends Entity> extends ObjectDecoratorConfig<EntityType> {\n displayStyle: 'inline'\n}","import { 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';\n}\n\nexport interface DropdownStringDecoratorConfig extends StringDecoratorConfig {\n displayStyle: 'dropdown',\n /**\n * The values of the dropdown, consisting of a name to display and the actual value\n * Can also receive a function to determine the values.\n */\n dropdownValues: { displayName: string, value: string }[]\n}\n\nexport interface DefaultStringDecoratorConfig extends StringDecoratorConfig {\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\nexport interface TextboxStringDecoratorConfig extends StringDecoratorConfig {\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\nexport interface AutocompleteStringDecoratorConfig extends StringDecoratorConfig {\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 * Public API Surface of ngx-material-entity.\n */\nimport 'reflect-metadata';\n\n// classes\nexport * from './classes/entity-model.class';\nexport * from './classes/entity-service.class';\nexport * from './classes/entity-utilities.class';\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\n// decorators\nexport * from './decorators/base/decorator-types.enum';\nexport { cols } from './decorators/base/property-decorator.data';\n\nexport * from './decorators/array/array.decorator';\nexport * from './decorators/array/array-decorator.data';\n\nexport * from './decorators/boolean/boolean.decorator';\nexport * from './decorators/boolean/boolean-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 * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i5","i1","i3","i9","i2.NgxMatEntityInternalInputComponent","i6","i7.NgxMatEntityArrayTableComponent","i8","i10","i11","i13","i2.NgxMatEntityInputComponent","i3.NgxMatEntityInputComponent","i7"],"mappings":"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"}